diff --git a/experimental.go b/experimental.go index f648f84..6e19e8a 100644 --- a/experimental.go +++ b/experimental.go @@ -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 }) } diff --git a/viper.go b/viper.go index 3f9d164..02285a7 100644 --- a/viper.go +++ b/viper.go @@ -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. @@ -219,6 +220,7 @@ func New() *Viper { v.resetEncoding() v.experimentalFinder = features.Finder + v.experimentalBindStruct = features.BindStruct return v } @@ -985,7 +987,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 { @@ -1079,7 +1081,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 { diff --git a/viper_test.go b/viper_test.go index 184f0b3..919e2e2 100644 --- a/viper_test.go +++ b/viper_test.go @@ -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" ) @@ -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") @@ -1104,7 +1099,7 @@ func TestUnmarshalWithAutomaticEnv(t *testing.T) { Flag bool `mapstructure:"flag"` } - v := New() + v := NewWithOptions(ExperimentalBindStruct()) v.SetEnvKeyReplacer(strings.NewReplacer(".", "_")) v.AutomaticEnv()