summaryrefslogtreecommitdiff
path: root/engine/Settings
diff options
context:
space:
mode:
Diffstat (limited to 'engine/Settings')
-rw-r--r--engine/Settings/Flags.go28
-rw-r--r--engine/Settings/Settings.go78
2 files changed, 106 insertions, 0 deletions
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
+}