package settings import ( "encoding/json" "fmt" "os" ) type Settings struct { Version AppVersion PackagesLocation string } var defaultSettings = Settings { Version: AppVersion{ MajorVersion: 0, MinorVersion: 0, Patch: 0, IsBeta: true, }, PackagesLocation: "Packages", } 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() { appliedFlags = readFlags() var file, fopenerr = os.ReadFile(appliedFlags.SettingsFileLocation) if fopenerr != nil { var inintBody, createErr = createSettingsFile() if createErr != nil { panic(fmt.Sprintf("Unable to load or create settings file. \nOriginal error: %v\nFile open error: %v", createErr.Error(), fopenerr.Error())) } else { file = inintBody } } 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() ([]byte, error) { var file, err = os.Create(readFlags().SettingsFileLocation) if err != nil { return nil, err } defer file.Close() var inititalData = defaultSettings var body, jsonerr = json.MarshalIndent(inititalData, "", " ") if jsonerr != nil { return nil, jsonerr } fmt.Fprint(file, string(body)) return body, nil } // Returns an error with the issue description if the settings are invalid func (base *Settings) Validate() error { return nil }