package lib import ( "encoding/json" "errors" "html/template" "os" "path" "strings" ) const CONTENT_PATH string = "content" type Content struct{ Dir string Name string Title string `json:"title"` ID string `json:"id"` Md string HTML template.HTML Date string `json:"date"` Author string `json:"author"` } func ListContent(dir string) ([]Content, error) { var res []Content dirpath := path.Join(CONTENT_PATH, dir) entries, err := os.ReadDir(dirpath) if err != nil { return nil, errors.New("Cannot readdir: "+dirpath) } for _, e := range entries { if(!strings.HasSuffix(e.Name(), ".json")) { continue } var con Content jsonfile := path.Join(dirpath, e.Name()) jsoncon, err := os.ReadFile(jsonfile) if err != nil { return nil, errors.New("Cannot get JSON: "+jsonfile) } err = json.Unmarshal(jsoncon, &con) if err != nil { return nil, errors.New("Cannot parse JSON: "+jsonfile) } con.Dir = dir con.Name = strings.Split(e.Name(), ".")[0] res = append(res, con) } return res, nil } func GetContent(dir string, name string) (Content, error) { var res Content jsonfile := path.Join(CONTENT_PATH, dir, name+".json") mdfile := path.Join(CONTENT_PATH, dir, name+".md") res.Dir = dir res.Name = name jsoncontent, err := os.ReadFile(jsonfile) if err != nil { return res, errors.New("Cannot read JSON file: "+jsonfile) } rawcontent, err := os.ReadFile(mdfile) if err != nil { return res, errors.New("Cannot read markdown file: "+mdfile) } if(json.Unmarshal(jsoncontent, &res)!= nil) { return res, errors.New("Cannot parse JSON: "+jsonfile) } res.Md = string(rawcontent) res.HTML = template.HTML(ParseMarkdown(res.Md)) return res, nil }