package settings import ( "encoding/json" "fmt" "os" ) const settingsLocation = "Settings.json" type Settings struct { SongsLocation string } var defaultSettings = Settings { SongsLocation: "./Songs", } func (base Settings) String() string { var outp, jsonErr = json.Marshal(base) if jsonErr != nil { return fmt.Sprintf("Failed to parse settings: %s", jsonErr.Error()) } return string(outp) } var Current Settings = Settings{} func ReadSettings() { var file, fopenerr = os.ReadFile(settingsLocation) if fopenerr != nil { var success, inintBody = createSettingsFile() if success { file = inintBody } else { panic(fmt.Sprintf("Unable to load or create settings file. \nOriginal error: %v\n", fopenerr.Error())) } } var data = Settings{} json.Unmarshal(file, &data) var validationErr = data.Validate() if validationErr != nil { panic(fmt.Sprintf("Failed to load settings file: %s", validationErr.Error())) } Current = data } func createSettingsFile() (bool, []byte ) { var file, err = os.Create(settingsLocation) if err != nil { return false, nil } defer file.Close() var inititalData = defaultSettings var body, jsonerr = json.MarshalIndent(inititalData, "", " ") if jsonerr != nil { return false, nil } fmt.Fprint(file, string(body)) return true, body } // Returns an error with the issue description if the settings are invalid func (base *Settings) Validate() error { return nil }