From a6f3cf39a0da9d1902f2d4d443201c17e36307ed Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Sat, 10 Feb 2024 11:48:23 -0600 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Load=20config=20env=20before=20p?= =?UTF-8?q?araing=20cli?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/load.go | 21 ++++++++++++++------- config/load_test.go | 18 ++++++++++++++++++ config/types.go | 6 +++++- 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/config/load.go b/config/load.go index a7b9c57..c561575 100644 --- a/config/load.go +++ b/config/load.go @@ -31,7 +31,7 @@ func Load() (Config, error) { } } env.Parse(&c) - // @todo how to handle env on options so cli args aren't overwrittem? + c.Outputs["stdout"] = loadStdout(c.Outputs["stdout"]) l := "" for k, v := range Overrides { @@ -55,18 +55,25 @@ func Load() (Config, error) { return c, err } +func loadStdout(stdout Output) Output { + st := stdoutEnabled{stdout.Enabled} + env.Parse(&st) + stdout.Enabled = st.Enabled + var std Stdout + mapst.Decode(stdout.Config, &std) + env.Parse(&std) + mapst.Decode(std, &stdout.Config) + return stdout +} + func (oo Outputs) Stdout() (s Stdout, enabled bool) { o, ok := oo["stdout"] if !ok { return s, false } - st := struct { - Enabled bool `env:"LOG_STDOUT_ENABLED"` - }{o.Enabled} - env.Parse(&st) - enabled = st.Enabled + enabled = o.Enabled mapst.Decode(o.Config, &s) - env.Parse(&s) + return } diff --git a/config/load_test.go b/config/load_test.go index 6cc9077..e215ff2 100644 --- a/config/load_test.go +++ b/config/load_test.go @@ -57,3 +57,21 @@ func TestOverrideJson(t *testing.T) { } // @todo test time + +func TestStdoutMissing(t *testing.T) { + var oo Outputs = map[string]Output{} + std, en := oo.Stdout() + assert.False(t, en) + assert.Equal(t, Stdout{}, std) +} + +func TestStdoutLoad(t *testing.T) { + os.Setenv("LOG_STDOUT_JSON", "true") + defer os.Unsetenv("LOG_STDOUT_JSON") + os.Setenv("LOG_STDOUT_ENABLED", "true") + defer os.Unsetenv("LOG_STDOUT_ENABLED") + c, _ := Load() + std, en := c.Outputs.Stdout() + assert.True(t, en) + assert.True(t, std.Json) +} diff --git a/config/types.go b/config/types.go index 4226fca..b218509 100644 --- a/config/types.go +++ b/config/types.go @@ -19,5 +19,9 @@ type Output struct { } type Stdout struct { - Json bool `env:"LOG_STDOUT_JSON"` + Json bool `env:"LOG_STDOUT_JSON" mapstructure:"json"` +} + +type stdoutEnabled struct { + Enabled bool `env:"LOG_STDOUT_ENABLED"` }