summaryrefslogtreecommitdiff
path: root/load.go
diff options
context:
space:
mode:
Diffstat (limited to 'load.go')
-rw-r--r--load.go92
1 files changed, 92 insertions, 0 deletions
diff --git a/load.go b/load.go
new file mode 100644
index 0000000..2986819
--- /dev/null
+++ b/load.go
@@ -0,0 +1,92 @@
+package ENV
+
+import (
+ "errors"
+ "os"
+ "path/filepath"
+ "strings"
+
+ "go.wit.com/log"
+)
+
+func loadENV() error {
+ if envPB != nil {
+ log.Info("envPB already loaded")
+ return errors.New("envPB already loaded")
+ }
+ filename, err := getConfigFilenameENV()
+ if err != nil {
+ return err
+ }
+ // log.Info("loadENV()", filename)
+ stuff, err := os.ReadFile(filename)
+ if err != nil {
+ return err
+ }
+ saveMu.Lock()
+ defer saveMu.Unlock()
+ envPB = NewKeys()
+ for _, line := range strings.Split(string(stuff), "\n") {
+ line = strings.TrimSpace(line)
+ if line == "" {
+ continue
+ }
+ parts := strings.Split(line, "=")
+ if len(parts) != 2 {
+ // log.Info("INVALID LINE:", i, line)
+ continue
+ }
+ c := new(Key)
+ c.Var = parts[0]
+ c.Value = parts[1]
+ envPB.Append(c)
+ // log.Printf("ENV LINE: (%v)\n", c)
+ }
+
+ return err
+}
+
+func getConfigFilenameENV() (string, error) {
+ appname, err := GetAppname() // already configured by your application
+ if err != nil {
+ return "", err
+ }
+
+ configdir, err := getConfigDir()
+ if err != nil {
+ return "", err
+ }
+
+ filename := filepath.Join(configdir, appname+".ENV")
+ return filename, nil
+}
+
+func getCacheDir() (string, error) {
+ if Get("cacheDir") != "" {
+ return Get("cacheDir"), nil
+ }
+
+ cacheDir, _ := os.UserCacheDir()
+
+ appname, err := GetAppname() // application should have already configured this
+ if err != nil {
+ return cacheDir, err
+ }
+
+ return filepath.Join(cacheDir, appname), nil
+}
+
+func getConfigDir() (string, error) {
+ if Get("configDir") != "" {
+ return Get("configDir"), nil
+ }
+
+ configDir, _ := os.UserConfigDir()
+
+ appname, err := GetAppname() // application should have already configured this
+ if err != nil {
+ return configDir, err
+ }
+
+ return filepath.Join(configDir, appname), nil
+}