package main import ( "encoding/json" "os" ) type ScoreSet struct { Name string `json:"name"` Type string `json:"type,omitempty"` Shapes []ShapeDefinition `json:"shapes"` } type ScoreSetsData struct { Sets []ScoreSet `json:"sets"` Selected int `json:"selected"` } func DefaultScoreSetsData() ScoreSetsData { return ScoreSetsData{ Sets: []ScoreSet{ {Name: "Standard Shapes", Shapes: DefaultShapes()}, {Name: "Chord Density", Type: "density", Shapes: DefaultShapes()}, }, Selected: 0, } } func LoadScoreSets(path string) (ScoreSetsData, error) { var data ScoreSetsData raw, err := os.ReadFile(path) if err != nil { return data, err } err = json.Unmarshal(raw, &data) if err != nil { return data, err } if len(data.Sets) == 0 { return DefaultScoreSetsData(), nil } if data.Selected < 0 || data.Selected >= len(data.Sets) { data.Selected = 0 } return data, nil } func SaveScoreSets(path string, data ScoreSetsData) error { raw, err := json.MarshalIndent(data, "", " ") if err != nil { return err } return os.WriteFile(path, raw, 0644) }