You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
28 lines
722 B
28 lines
722 B
8 months ago
|
package config
|
||
|
|
||
|
import (
|
||
|
"github.com/mitchellh/mapstructure"
|
||
|
"github.com/openimsdk/tools/errs"
|
||
|
"github.com/spf13/viper"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
func LoadConfig(path string, envPrefix string, config any) error {
|
||
|
v := viper.New()
|
||
|
v.SetConfigFile(path)
|
||
|
v.SetEnvPrefix(envPrefix)
|
||
|
v.AutomaticEnv()
|
||
|
v.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
|
||
|
|
||
|
if err := v.ReadInConfig(); err != nil {
|
||
|
return errs.WrapMsg(err, "failed to read config file", "path", path, "envPrefix", envPrefix)
|
||
|
}
|
||
|
|
||
|
if err := v.Unmarshal(config, func(config *mapstructure.DecoderConfig) {
|
||
|
config.TagName = "mapstructure"
|
||
|
}); err != nil {
|
||
|
return errs.WrapMsg(err, "failed to unmarshal config", "path", path, "envPrefix", envPrefix)
|
||
|
}
|
||
|
return nil
|
||
|
}
|