feat: add experimental flag for bind struct

Signed-off-by: Mark Sagi-Kazar <mark.sagikazar@gmail.com>
This commit is contained in:
Mark Sagi-Kazar 2024-06-04 21:06:34 +02:00 committed by Márk Sági-Kazár
parent 96ad74f6ae
commit d1e18b2551
3 changed files with 7 additions and 10 deletions

View file

@ -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
})
}

View file

@ -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 {

View file

@ -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()