first version
This commit is contained in:
80
data/json/json.go
Normal file
80
data/json/json.go
Normal file
@@ -0,0 +1,80 @@
|
||||
package json
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"os"
|
||||
"retroHub/data"
|
||||
)
|
||||
|
||||
type FileProvider struct {
|
||||
categories []category
|
||||
}
|
||||
|
||||
type fileContent struct {
|
||||
Categories []category `json:"categories"`
|
||||
}
|
||||
|
||||
type category struct {
|
||||
T string `json:"title"`
|
||||
Ls []link `json:"links"`
|
||||
}
|
||||
|
||||
func (c category) Title() string {
|
||||
return c.T
|
||||
}
|
||||
|
||||
func (c category) Links() []data.Link {
|
||||
var r []data.Link
|
||||
for _, l := range c.Ls {
|
||||
r = append(r, data.Link(l))
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
type link struct {
|
||||
T string `json:"title"`
|
||||
U string `json:"url"`
|
||||
D string `json:"description"`
|
||||
}
|
||||
|
||||
func (l link) Title() string {
|
||||
return l.T
|
||||
}
|
||||
|
||||
func (l link) URL() string {
|
||||
return l.U
|
||||
}
|
||||
|
||||
func (l link) Description() string {
|
||||
return l.D
|
||||
}
|
||||
|
||||
func (jfp *FileProvider) Categories() []data.Category {
|
||||
var r []data.Category
|
||||
for _, c := range jfp.categories {
|
||||
r = append(r, data.Category(c))
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
func New(fp string) (*FileProvider, error) {
|
||||
if _, err := os.Stat(fp); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
content, err := os.ReadFile(fp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var c fileContent
|
||||
err = json.Unmarshal(content, &c)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
jfp := new(FileProvider)
|
||||
jfp.categories = c.Categories
|
||||
|
||||
return jfp, nil
|
||||
}
|
||||
Reference in New Issue
Block a user