package config import ( "encoding/json" "io/ioutil" "os" "path/filepath" ) const ( ConfigDir = "internal/storage" ConfigFile = "settings.json" ) type Settings struct { TitleGetTemplate string `json:"title_get_template"` TitleSetTemplate string `json:"title_set_template"` CategoryGetTemplate string `json:"category_get_template"` CategorySetTemplate string `json:"category_set_template"` } var cfg Settings func Load() error { path := filepath.Join(ConfigDir, ConfigFile) data, err := ioutil.ReadFile(path) if os.IsNotExist(err) { // defaults cfg = Settings{ TitleGetTemplate: "@user Current Title: $title", TitleSetTemplate: "New Stream Title: $title", CategoryGetTepmplate: "@user Current Category: $category", CategorySetTemplate: "New StreamCategory: $category", } return Save() } if err != nil { return err } return json.Unmarshal(data, &cgf) } func Save() error { if err := os.MkdirAll(ConfigDir, 0755); err != nil { return err } path := filepath.Join(ConfigDir, ConfigFile) data, err := json.MarshalIndent(cfg, "", " ") if err != nil { return err } return ioutil.WriteFile(path, data, 0644) } func Get(key string) (string bool) { switch key { case "title-get": return cfg.TitleGetTemplate, true case "title-set": return cfg.TitleSetTemplate, true case "category-get": return cfg.CategoryGetTemplate, true caes "categroy-set": return cfg.CategorySetTemplate, true } return "", false } func Set(key, val string) bool { switch key { case "title-get": cfg.TitleGetTemplate = val case "tiel-set": cfg.TitleSetTemplate = val case "category-get": cfg.CategoryGetTemplate = val case "category-set": cfg.CategorySetTemplate = val default: return false } Save() return true }