diff options
| author | Physcik <mynameisgennadiy@vk.com> | 2025-12-25 18:55:59 +0500 |
|---|---|---|
| committer | Physcik <mynameisgennadiy@vk.com> | 2025-12-25 18:55:59 +0500 |
| commit | 1f8ae1bcb66f5ff9029612307b882dfe85aa810b (patch) | |
| tree | 4282f37a2101e993f2e1cc64614b29e7402ed4f2 /src/Settings | |
Structure pt 1
Diffstat (limited to 'src/Settings')
| -rw-r--r-- | src/Settings/Settings.go | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/Settings/Settings.go b/src/Settings/Settings.go new file mode 100644 index 0000000..58daed3 --- /dev/null +++ b/src/Settings/Settings.go @@ -0,0 +1,67 @@ +package settings + +import ( + "encoding/json" + "fmt" + "os" + "strings" +) + +type Settings struct { + Port string + StaticLocation string + TemplatesLocation string +} + +const settingsLocation = "Settings.json" + +var defaultSettings = Settings { + Port: ":6969", + StaticLocation: "../static", + TemplatesLocation: "../templates", +} + + +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 { + if len(base.Port) == 0 || !strings.Contains(base.Port, ":") { + return fmt.Errorf("The port string is invalid") + } + return nil +} |
