From 293ad7bada61561e59b7b0b845e8edcade69dfff Mon Sep 17 00:00:00 2001 From: Emilijus Stankus Date: Mon, 18 Oct 2021 15:49:09 +0300 Subject: [PATCH] Fix deep file parsing not working when flag delimiter is set --- aconfig_test.go | 32 ++++++++++++++++++++++++++++++++ reflection.go | 5 ++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/aconfig_test.go b/aconfig_test.go index f91002d..506d44a 100644 --- a/aconfig_test.go +++ b/aconfig_test.go @@ -1450,3 +1450,35 @@ func TestBad(t *testing.T) { t.Fatalf("want %v, got %v", want, got) } } + +func TestFileConfigFlagDelim(t *testing.T) { + type TestConfig struct { + Options struct { + Foo float64 + Bar float64 + } + } + var cfg TestConfig + + loader := LoaderFor(&cfg, Config{ + SkipDefaults: true, + SkipEnv: true, + SkipFlags: true, + FlagDelimiter: "_", + + Files: []string{"testdata/toy.json"}, + }) + + if err := loader.Load(); err != nil { + t.Fatal(err) + } + + var want = TestConfig{Options: struct { + Foo float64 + Bar float64 + }{0.4, 0.25}} + + if got := cfg; !reflect.DeepEqual(want, got) { + t.Fatalf("want %v, got %v", want, got) + } +} diff --git a/reflection.go b/reflection.go index 07c6b97..f7fe2ce 100644 --- a/reflection.go +++ b/reflection.go @@ -73,7 +73,10 @@ func (l *Loader) tagsForField(field reflect.StructField) map[string]string { } func (l *Loader) fullTag(prefix string, f *fieldData, tag string) string { - sep := l.config.FlagDelimiter + sep := "." + if tag == flagNameTag { + sep = l.config.FlagDelimiter + } if tag == envNameTag { sep = l.config.envDelimiter }