forked from TrueCloudLab/frostfs-node
54 lines
894 B
Go
54 lines
894 B
Go
|
package config
|
||
|
|
||
|
import (
|
||
|
"strings"
|
||
|
|
||
|
"github.com/spf13/viper"
|
||
|
)
|
||
|
|
||
|
// Params groups the parameters of configuration.
|
||
|
type Params struct {
|
||
|
File string
|
||
|
Type string
|
||
|
Prefix string
|
||
|
Name string
|
||
|
Version string
|
||
|
|
||
|
AppDefaults func(v *viper.Viper)
|
||
|
}
|
||
|
|
||
|
// NewConfig is a configuration tool's constructor.
|
||
|
func NewConfig(p Params) (v *viper.Viper, err error) {
|
||
|
v = viper.New()
|
||
|
v.SetEnvPrefix(p.Prefix)
|
||
|
v.AutomaticEnv()
|
||
|
v.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
|
||
|
|
||
|
v.SetDefault("app.name", p.Name)
|
||
|
v.SetDefault("app.version", p.Version)
|
||
|
|
||
|
if p.AppDefaults != nil {
|
||
|
p.AppDefaults(v)
|
||
|
}
|
||
|
|
||
|
if p.fromFile() {
|
||
|
v.SetConfigFile(p.File)
|
||
|
v.SetConfigType(p.safeType())
|
||
|
|
||
|
err = v.ReadInConfig()
|
||
|
}
|
||
|
|
||
|
return v, err
|
||
|
}
|
||
|
|
||
|
func (p Params) fromFile() bool {
|
||
|
return p.File != ""
|
||
|
}
|
||
|
|
||
|
func (p Params) safeType() string {
|
||
|
if p.Type == "" {
|
||
|
p.Type = "yaml"
|
||
|
}
|
||
|
return strings.ToLower(p.Type)
|
||
|
}
|