Skip to content

Commit

Permalink
feat: add experimental flag for bind struct
Browse files Browse the repository at this point in the history
Signed-off-by: Mark Sagi-Kazar <mark.sagikazar@gmail.com>
  • Loading branch information
sagikazarmark committed Jun 5, 2024
1 parent 96ad74f commit d1e18b2
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 10 deletions.
2 changes: 1 addition & 1 deletion experimental.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ package viper
// ExperimentalBindStruct tells Viper to use the new bind struct feature.
func ExperimentalBindStruct() Option {
return optionFunc(func(v *Viper) {
v.experimentalFinder = true
v.experimentalBindStruct = true
})
}
8 changes: 5 additions & 3 deletions viper.go
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,8 @@ type Viper struct {
encoderRegistry *encoding.EncoderRegistry
decoderRegistry *encoding.DecoderRegistry

experimentalFinder bool
experimentalFinder bool
experimentalBindStruct bool
}

// New returns an initialized Viper instance.
Expand All @@ -219,6 +220,7 @@ func New() *Viper {
v.resetEncoding()

v.experimentalFinder = features.Finder
v.experimentalBindStruct = features.BindStruct

return v
}
Expand Down Expand Up @@ -1002,7 +1004,7 @@ func Unmarshal(rawVal any, opts ...DecoderConfigOption) error {
func (v *Viper) Unmarshal(rawVal any, opts ...DecoderConfigOption) error {
keys := v.AllKeys()

if features.BindStruct {
if v.experimentalBindStruct {
// TODO: make this optional?
structKeys, err := v.decodeStructKeys(rawVal, opts...)
if err != nil {
Expand Down Expand Up @@ -1096,7 +1098,7 @@ func (v *Viper) UnmarshalExact(rawVal any, opts ...DecoderConfigOption) error {

keys := v.AllKeys()

if features.BindStruct {
if v.experimentalBindStruct {
// TODO: make this optional?
structKeys, err := v.decodeStructKeys(rawVal, opts...)
if err != nil {
Expand Down
7 changes: 1 addition & 6 deletions viper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

"github.com/spf13/viper/internal/features"
"github.com/spf13/viper/internal/testutil"
)

Expand Down Expand Up @@ -1067,10 +1066,6 @@ func TestUnmarshalWithDecoderOptions(t *testing.T) {
}

func TestUnmarshalWithAutomaticEnv(t *testing.T) {
if !features.BindStruct {
t.Skip("binding struct is not enabled")
}

t.Setenv("PORT", "1313")
t.Setenv("NAME", "Steve")
t.Setenv("DURATION", "1s1ms")
Expand Down Expand Up @@ -1104,7 +1099,7 @@ func TestUnmarshalWithAutomaticEnv(t *testing.T) {
Flag bool `mapstructure:"flag"`
}

v := New()
v := NewWithOptions(ExperimentalBindStruct())
v.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
v.AutomaticEnv()

Expand Down

0 comments on commit d1e18b2

Please sign in to comment.