Skip to content

Commit ecb0bbe

Browse files
committed
👔 up: update the banding struct and init defaults logic
- resolve multi slice-struct field, see issues #141
1 parent d9cbc9b commit ecb0bbe

File tree

4 files changed

+57
-28
lines changed

4 files changed

+57
-28
lines changed

export.go

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -90,23 +90,21 @@ func (c *Config) Structure(key string, dst any) error {
9090
}
9191
}
9292

93-
// init default value by tag: default
94-
if c.opts.ParseDefault {
95-
err := structs.InitDefaults(dst, func(opt *structs.InitOptions) {
96-
opt.ParseEnv = c.opts.ParseEnv
97-
})
98-
if err != nil {
99-
return err
100-
}
101-
}
102-
10393
bindConf := c.opts.makeDecoderConfig()
10494
// set result struct ptr
10595
bindConf.Result = dst
10696
decoder, err := mapstructure.NewDecoder(bindConf)
107-
10897
if err == nil {
109-
err = decoder.Decode(data)
98+
if err = decoder.Decode(data); err != nil {
99+
return err
100+
}
101+
}
102+
103+
// init default value by tag: default
104+
if c.opts.ParseDefault {
105+
err = structs.InitDefaults(dst, func(opt *structs.InitOptions) {
106+
opt.ParseEnv = c.opts.ParseEnv
107+
})
110108
}
111109
return err
112110
}

go.mod

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ require (
66
github.com/BurntSushi/toml v1.3.2
77
github.com/goccy/go-json v0.10.2
88
github.com/goccy/go-yaml v1.11.0
9-
github.com/gookit/goutil v0.6.9
9+
github.com/gookit/goutil v0.6.10
1010
github.com/gookit/ini/v2 v2.2.2
1111
github.com/gookit/properties v0.3.0
1212
github.com/hashicorp/hcl v1.0.0
@@ -27,9 +27,9 @@ require (
2727
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
2828
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
2929
github.com/zclconf/go-cty v1.13.0 // indirect
30-
golang.org/x/sync v0.2.0 // indirect
31-
golang.org/x/sys v0.8.0 // indirect
32-
golang.org/x/term v0.8.0 // indirect
33-
golang.org/x/text v0.9.0 // indirect
30+
golang.org/x/sync v0.3.0 // indirect
31+
golang.org/x/sys v0.9.0 // indirect
32+
golang.org/x/term v0.9.0 // indirect
33+
golang.org/x/text v0.10.0 // indirect
3434
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
3535
)

go.sum

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
2020
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
2121
github.com/gookit/color v1.5.3 h1:twfIhZs4QLCtimkP7MOxlF3A0U/5cDPseRT9M/+2SCE=
2222
github.com/gookit/color v1.5.3/go.mod h1:NUzwzeehUfl7GIb36pqId+UGmRfQcU/WiiyTTeNjHtE=
23-
github.com/gookit/goutil v0.6.9 h1:NrbGKt3cnWoqxjZonC5bTr0FrltTCRdzGReGQwnwhUk=
24-
github.com/gookit/goutil v0.6.9/go.mod h1:ZYNl/t+EIMo0rCRe1mwfC7jKyF/q1FdOEOgrXzJpr5o=
23+
github.com/gookit/goutil v0.6.10 h1:iq7CXOf+fYLvrVAh3+ZoLgufGfK65TwbzE8NpnPGtyk=
24+
github.com/gookit/goutil v0.6.10/go.mod h1:qqrPoX+Pm6YmxqqccgkNLPirTFX7UYMES1SK+fokqQU=
2525
github.com/gookit/ini/v2 v2.2.2 h1:3B8abZJrVH1vi/7TU4STuTBxdhiAq1ORSt6NJZCahaI=
2626
github.com/gookit/ini/v2 v2.2.2/go.mod h1:wGEfnBxv+7nVXytWM44tiqczv5hLKJ+m9MaA2uJg3iM=
2727
github.com/gookit/properties v0.3.0 h1:52NBYMOP5VXm3mKrQSdQoeEPgk2zXBGDF1R/xblsa6Y=
@@ -57,15 +57,15 @@ github.com/zclconf/go-cty v1.13.0 h1:It5dfKTTZHe9aeppbNOda3mN7Ag7sg6QkBNm6TkyFa0
5757
github.com/zclconf/go-cty v1.13.0/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0=
5858
golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A=
5959
golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561 h1:MDc5xs78ZrZr3HMQugiXOAkSZtfTpbJLDr/lwfgO53E=
60-
golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI=
61-
golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
60+
golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
61+
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
6262
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
63-
golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
64-
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
65-
golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols=
66-
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
67-
golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
68-
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
63+
golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s=
64+
golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
65+
golang.org/x/term v0.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28=
66+
golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo=
67+
golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58=
68+
golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
6969
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk=
7070
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
7171
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

issues_test.go

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,38 @@ func TestIssues_141(t *testing.T) {
369369

370370
assert.Eq(t, 2048, opt.Loggers[1].MaxSize)
371371
assert.Eq(t, 30, opt.Loggers[1].MaxDays)
372-
assert.Eq(t, false, opt.Loggers[1].Compress)
372+
assert.Eq(t, true, opt.Loggers[1].Compress)
373+
374+
t.Run("3 elements", func(t *testing.T) {
375+
jsonStr := `
376+
{
377+
"loggers": [
378+
{
379+
"name": "info",
380+
"logFile": "logs/info.log"
381+
},
382+
{
383+
"name": "error",
384+
"logFile": "logs/error.log"
385+
},
386+
{
387+
"name": "request",
388+
"logFile": "logs/request.log",
389+
"maxSize": 2048,
390+
"maxDays": 30,
391+
"compress": false
392+
}
393+
]
394+
}
395+
`
396+
c := config.New("issues_141", config.ParseDefault)
397+
err := c.LoadStrings(config.JSON, jsonStr)
398+
assert.NoErr(t, err)
399+
400+
opt := &LogConfig{}
401+
err = c.Decode(opt)
402+
dump.Println(opt)
403+
})
373404
}
374405

375406
// https://github.com/gookit/config/issues/146

0 commit comments

Comments
 (0)