From f1dc3c4c27f333b213790560653ff25656643c08 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Thu, 29 Aug 2024 09:44:33 +0300 Subject: initial EnvToBool --- internal/config/config.go | 24 ++++++++++++++++++++++++ internal/config/config_test.go | 36 ++++++++++++++++++++++++++++++++++++ internal/config/server/server.go | 19 ++++++++++--------- 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) { -- cgit v1.2.3