mirror of
https://github.com/spf13/viper
synced 2025-04-10 23:47:19 +00:00
fix: config type check when loading any config
Signed-off-by: Mark Sagi-Kazar <mark.sagikazar@gmail.com>
This commit is contained in:
parent
4ddd7c091c
commit
1508a7ba44
1 changed files with 20 additions and 12 deletions
32
viper.go
32
viper.go
|
@ -1535,27 +1535,29 @@ func (v *Viper) MergeInConfig() error {
|
||||||
func ReadConfig(in io.Reader) error { return v.ReadConfig(in) }
|
func ReadConfig(in io.Reader) error { return v.ReadConfig(in) }
|
||||||
|
|
||||||
func (v *Viper) ReadConfig(in io.Reader) error {
|
func (v *Viper) ReadConfig(in io.Reader) error {
|
||||||
if v.getConfigType() == "" {
|
config := make(map[string]any)
|
||||||
return errors.New("cannot decode configuration: unable to get config type from configType or file extension")
|
|
||||||
|
err := v.unmarshalReader(in, config)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
v.config = make(map[string]any)
|
v.config = config
|
||||||
return v.unmarshalReader(in, v.config)
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// MergeConfig merges a new configuration with an existing config.
|
// MergeConfig merges a new configuration with an existing config.
|
||||||
func MergeConfig(in io.Reader) error { return v.MergeConfig(in) }
|
func MergeConfig(in io.Reader) error { return v.MergeConfig(in) }
|
||||||
|
|
||||||
func (v *Viper) MergeConfig(in io.Reader) error {
|
func (v *Viper) MergeConfig(in io.Reader) error {
|
||||||
if v.getConfigType() == "" {
|
config := make(map[string]any)
|
||||||
return errors.New("cannot decode configuration: unable to get config type from configType or file extension")
|
|
||||||
}
|
|
||||||
|
|
||||||
cfg := make(map[string]any)
|
if err := v.unmarshalReader(in, config); err != nil {
|
||||||
if err := v.unmarshalReader(in, cfg); err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return v.MergeConfigMap(cfg)
|
|
||||||
|
return v.MergeConfigMap(config)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MergeConfigMap merges the configuration from the map given with an existing config.
|
// MergeConfigMap merges the configuration from the map given with an existing config.
|
||||||
|
@ -1662,15 +1664,21 @@ func (v *Viper) writeConfig(filename string, force bool) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *Viper) unmarshalReader(in io.Reader, c map[string]any) error {
|
func (v *Viper) unmarshalReader(in io.Reader, c map[string]any) error {
|
||||||
|
format := strings.ToLower(v.getConfigType())
|
||||||
|
if format == "" {
|
||||||
|
return errors.New("cannot decode configuration: unable to determine config type")
|
||||||
|
}
|
||||||
|
|
||||||
buf := new(bytes.Buffer)
|
buf := new(bytes.Buffer)
|
||||||
buf.ReadFrom(in)
|
buf.ReadFrom(in)
|
||||||
|
|
||||||
format := strings.ToLower(v.getConfigType())
|
// TODO: remove this once SupportedExts is deprecated/removed
|
||||||
|
|
||||||
if !slices.Contains(SupportedExts, format) {
|
if !slices.Contains(SupportedExts, format) {
|
||||||
return UnsupportedConfigError(format)
|
return UnsupportedConfigError(format)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: return [UnsupportedConfigError] if the registry does not contain the format
|
||||||
|
// TODO: consider deprecating this error type
|
||||||
decoder, err := v.decoderRegistry.Decoder(format)
|
decoder, err := v.decoderRegistry.Decoder(format)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ConfigParseError{err}
|
return ConfigParseError{err}
|
||||||
|
|
Loading…
Add table
Reference in a new issue