package config import ( "encoding/json" "os" "path/filepath" ) type API struct { Token string `json:"token"` } func LoadAPI() (*API, error) { data, err := os.ReadFile(APIPath()) if err != nil { return nil, err } var a API if err := json.Unmarshal(data, &a); err != nil { return nil, err } return &a, nil } func SaveAPI(api *API) error { if err := os.MkdirAll(Dir, 0o755); err != nil { return err } data, err := json.MarshalIndent(api, "", " ") if err != nil { return err } return os.WriteFile(APIPath(), append(data, '\n'), 0o600) } type ModState struct { Compatible string `json:"compatible"` Latest string `json:"latest"` } type Cache map[string]ModState func CachePath() string { return filepath.Join("cache", "mod_versions.json") } func LoadCache() (Cache, error) { data, err := os.ReadFile(CachePath()) if err != nil { if os.IsNotExist(err) { return Cache{}, nil } return nil, err } cache := Cache{} if err := json.Unmarshal(data, &cache); err != nil { return nil, err } return cache, nil } func SaveCache(cache Cache) error { if err := os.MkdirAll(filepath.Dir(CachePath()), 0o755); err != nil { return err } data, err := json.MarshalIndent(cache, "", " ") if err != nil { return err } return os.WriteFile(CachePath(), data, 0o644) }