summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-08-29 09:44:33 +0300
committerPaul Buetow <paul@buetow.org>2024-08-29 09:44:33 +0300
commitf1dc3c4c27f333b213790560653ff25656643c08 (patch)
treef7a074052beb532660d2493ae20a3f711d89eb5d
parent16dee0a35bfcd9a9053241a1d52b5f9bc45c6112 (diff)
initial EnvToBool
-rw-r--r--internal/config/config.go24
-rw-r--r--internal/config/config_test.go36
-rw-r--r--internal/config/server/server.go19
3 files changed, 70 insertions, 9 deletions
diff --git a/internal/config/config.go b/internal/config/config.go
index e888e4f..b8a78e5 100644
--- a/internal/config/config.go
+++ b/internal/config/config.go
@@ -72,6 +72,30 @@ func EnvToInt(keys ...any) int {
return 0
}
+func EnvToBool(keys ...any) bool {
+ for _, key := range keys {
+ switch key := key.(type) {
+ case string:
+ if key == "" || !isAllUpperCase(key) {
+ continue
+ }
+ strValue := os.Getenv(key)
+ if strValue == "" {
+ continue
+ }
+ if boolValue, err := strconv.ParseBool(strValue); err == nil {
+ return boolValue
+ }
+ case bool:
+ return key
+ case func() bool:
+ return key()
+ }
+ }
+
+ return false
+}
+
func isAllUpperCase(s string) bool {
for _, r := range s {
if unicode.IsLetter(r) && !unicode.IsUpper(r) {
diff --git a/internal/config/config_test.go b/internal/config/config_test.go
index 27da6ed..41e9851 100644
--- a/internal/config/config_test.go
+++ b/internal/config/config_test.go
@@ -77,6 +77,42 @@ func TestEnvToInt(t *testing.T) {
t.Logf("got '%d' as expected", expected)
}
+func TestEnvToBool(t *testing.T) {
+ t.Parallel()
+
+ os.Setenv("GOS_TEST_BOOL_FROM_ENV", "true")
+
+ var (
+ expected = true
+ got = EnvToBool(t, "GOS_TEST_BOOL_FROM_ENV")
+ )
+
+ if got != expected {
+ t.Errorf("got '%t' but expected '%t'", got, expected)
+ }
+ t.Logf("got '%t' as expected", expected)
+
+ expected = false
+ got = EnvToBool("GOS_JAJAJA", expected)
+ if got != expected {
+ t.Errorf("got '%t' but expected '%t'", got, expected)
+ }
+ t.Logf("got '%t' as expected", expected)
+
+ os.Unsetenv("JUJUJU_NOT_EXISTANT_ENV")
+ if got = EnvToBool("JUJUJU_NOT_EXISTANT_ENV"); got {
+ t.Errorf("got '%t' but expected false", got)
+ }
+ t.Logf("got 'false' as expected")
+
+ expected = true
+ got = EnvToBool("JUJUJU_NOT_EXISTANT_ENV", "", "", "", expected, "")
+ if got != expected {
+ t.Errorf("got '%t' but expected '%t'", got, expected)
+ }
+ t.Logf("got '%t' as expected", expected)
+}
+
func TestSecondENV(t *testing.T) {
t.Parallel()
diff --git a/internal/config/server/server.go b/internal/config/server/server.go
index 88211a4..a5bd5fb 100644
--- a/internal/config/server/server.go
+++ b/internal/config/server/server.go
@@ -10,15 +10,16 @@ import (
)
type ServerConfig struct {
- ListenAddr string `json:"ListenAddr,omitempty"`
- Partner string `json:"Partner,omitempty"`
- APIKey string `json:"APIKey,omitempty"`
- DataDir string `json:"StateDir,omitempty"`
- EmailTo string `json:"EmailTo,omitempty"`
- EmailFrom string `json:"EmailFrom,omitempty"`
- SMTPServer string `json:"SMTPServer,omitempty"`
- MergeIntervalS int `json:"MergeInterval,omitempty"`
- ScheduleIntervalS int `json:"ScheduleInterval,omitempty"`
+ ListenAddr string `json:"ListenAddr,omitempty"`
+ Partner string `json:"Partner,omitempty"`
+ APIKey string `json:"APIKey,omitempty"`
+ DataDir string `json:"StateDir,omitempty"`
+ EmailTo string `json:"EmailTo,omitempty"`
+ EmailFrom string `json:"EmailFrom,omitempty"`
+ SMTPServer string `json:"SMTPServer,omitempty"`
+ MergeIntervalS int `json:"MergeInterval,omitempty"`
+ ScheduleIntervalS int `json:"ScheduleInterval,omitempty"`
+ Secrets SecretsConfig `json:"Secrets,omitemtpy"`
}
func New(configFile string) (ServerConfig, error) {