package main import ( "encoding/json" "io/ioutil" "path/filepath" "strings" "fagott.pw/grilist/modules/grils" ) type ACDv2Reader struct{} type ACDv2NameValue struct { Name string `json:"name"` Value string `json:"value"` } type ACDv2Gril struct { Name struct { Romaji string `json:"romaji"` Japanese string `json:"japanese"` Aliases []string `json:"aliases"` } `json:"name"` Image struct { Thumbnail string `json:"thumb"` Full string `json:"full"` } `json:"image"` Tags []struct { ID int `json:"id"` Name string `json:"name"` } `json:"tags"` Traits struct { Official []ACDv2NameValue `json:"official"` Indexed []ACDv2NameValue `json:"indexed"` } `json:"traits"` Assignments []int `json:"assignments"` CharsWithSimilarTraits []int `json:"chars_similar_traits"` Extra []ACDv2NameValue `json:"extra"` Role string `json:"role"` } func (r *ACDv2Reader) Read(path string) WrappedGril { g := WrappedGril{} g.Gril = grils.Gril{} data, err := ioutil.ReadFile(path) ifErrExit(err) var jObj ACDv2Gril err = json.Unmarshal(data, &jObj) ifErrExit(err) g.Image = jObj.Image.Full g.Thumb = jObj.Image.Thumbnail g.Gril.ID = toInt(strings.TrimSuffix(filepath.Base(path), ".json")) g.Gril.KanjiName = jObj.Name.Japanese g.Gril.RomajiName = jObj.Name.Romaji g.Gril.OtherNames = jObj.Name.Aliases g.Gril.Tags = make([]string, 0) for _, v := range jObj.Tags { g.Gril.Tags = append(g.Gril.Tags, v.Name) } return g } func (r *ACDv2Reader) ID() int { return int(grils.DataSourceACD) }