func override()

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)
}