From d1e18b25518ecb619d30ef2c8c562fb9561675b6 Mon Sep 17 00:00:00 2001 From: Mark Sagi-Kazar Date: Tue, 4 Jun 2024 21:06:34 +0200 Subject: [PATCH] feat: add experimental flag for bind struct Signed-off-by: Mark Sagi-Kazar --- experimental.go | 2 +- viper.go | 8 +++++--- viper_test.go | 7 +------ 3 files changed, 7 insertions(+), 10 deletions(-) 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 f5a3163..30ae4aa 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 } @@ -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 { @@ -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 { diff --git a/viper_test.go b/viper_test.go index 0b9d9c6..2edc83f 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()