in config/shared.go [33:63]
func override(prefix string, data interface{}) error {
v := viper.New()
v.SetEnvPrefix(prefix)
pointerType := reflect.TypeOf(data)
if pointerType.Kind() != reflect.Ptr {
return errors.New("data not a pointer to struct")
}
dataType := pointerType.Elem()
if dataType.Kind() != reflect.Struct {
return errors.New("data not a pointer to struct")
}
keys := make([]string, dataType.NumField())
for i := 0; i < dataType.NumField(); i++ {
keys = append(keys, dataType.Field(i).Name)
}
for _, key := range keys {
if key == "" {
continue
}
variable := fmt.Sprintf("%s_%s", prefix, toEnvironmentVariable(key))
if err := v.BindEnv(key, variable); err != nil {
return err
}
}
return v.Unmarshal(data)
}