Added UnmarshalKeyExact() as well as non-method UnmarshalExact().

This commit is contained in:
Kolbe Kegel 2017-08-22 23:35:11 -07:00
parent 25b30aa063
commit 6d96b16143

View file

@ -768,6 +768,7 @@ func decode(input interface{}, config *mapstructure.DecoderConfig) error {
// UnmarshalExact unmarshals the config into a Struct, erroring if a field is nonexistent // UnmarshalExact unmarshals the config into a Struct, erroring if a field is nonexistent
// in the destination struct. // in the destination struct.
func UnmarshalExact(rawVal interface{}) error { return v.UnmarshalExact(rawVal) }
func (v *Viper) UnmarshalExact(rawVal interface{}) error { func (v *Viper) UnmarshalExact(rawVal interface{}) error {
config := defaultDecoderConfig(rawVal) config := defaultDecoderConfig(rawVal)
config.ErrorUnused = true config.ErrorUnused = true
@ -782,6 +783,23 @@ func (v *Viper) UnmarshalExact(rawVal interface{}) error {
return nil return nil
} }
// UnmarshalKeyExact takes a single key and unmarshals it into a Struct, erroring if a field
// is nonexistent in the destination struct.
func UnmarshalKeyExact(key string, rawVal interface{}) error { return v.UnmarshalKeyExact(key, rawVal) }
func (v *Viper) UnmarshalKeyExact(key string, rawVal interface{}) error {
config := defaultDecoderConfig(rawVal)
config.ErrorUnused = true
err := decode(v.Get(key), config)
if err != nil {
return err
}
v.insensitiviseMaps()
return nil
}
// BindPFlags binds a full flag set to the configuration, using each flag's long // BindPFlags binds a full flag set to the configuration, using each flag's long
// name as the config key. // name as the config key.