From d804d0467399c821a05832a96ae4780ef69fb1bf Mon Sep 17 00:00:00 2001 From: Physcik Date: Tue, 6 Jan 2026 18:53:57 +0500 Subject: Project init --- engine/Settings/Flags.go | 28 ++++++++++++++++ engine/Settings/Settings.go | 78 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 engine/Settings/Flags.go create mode 100644 engine/Settings/Settings.go (limited to 'engine/Settings') diff --git a/engine/Settings/Flags.go b/engine/Settings/Flags.go new file mode 100644 index 0000000..9f4039e --- /dev/null +++ b/engine/Settings/Flags.go @@ -0,0 +1,28 @@ +package settings + +import ( + "encoding/json" + "flag" + "fmt" +) + +type Flags struct { + SettingsFileLocation string +} + +var appliedFlags *Flags + +func (base Flags) String() string { + var outp, jsonErr = json.Marshal(base) + if jsonErr != nil { + return fmt.Sprintf("Failed to parse settings: %s", jsonErr.Error()) + } + return string(outp) +} + + +func readFlags() *Flags { + return &Flags { + SettingsFileLocation: *flag.String("c", "Config.json", "Configurtation file location"), + } +} diff --git a/engine/Settings/Settings.go b/engine/Settings/Settings.go new file mode 100644 index 0000000..05afe02 --- /dev/null +++ b/engine/Settings/Settings.go @@ -0,0 +1,78 @@ +package settings + +import ( + "encoding/json" + "fmt" + "os" +) + +type AppVersion struct { + MajorVersion uint + MinorVersion uint + Patch uint + IsBeta bool +} + +type Settings struct { + Version AppVersion +} + +var defaultSettings = Settings { + Version: AppVersion{ + MajorVersion: 0, + MinorVersion: 0, + Patch: 0, + IsBeta: true, + }, +} + +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 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(readFlags().SettingsFileLocation) + 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 +} -- cgit v1.3