first version

This commit is contained in:
Aurélie Delhaie
2023-05-07 22:34:30 +02:00
commit 784679592d
13 changed files with 394 additions and 0 deletions

80
data/json/json.go Normal file
View 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
}