zitadel/internal/config/hook/enum.go

25 lines
463 B
Go
Raw Normal View History

package hook
import (
"reflect"
"github.com/mitchellh/mapstructure"
"golang.org/x/exp/constraints"
)
func EnumHookFunc[T constraints.Integer](resolve func(string) (T, error)) mapstructure.DecodeHookFuncType {
return func(
f reflect.Type,
t reflect.Type,
data interface{},
) (interface{}, error) {
if f.Kind() != reflect.String {
return data, nil
}
if t != reflect.TypeOf(T(0)) {
return data, nil
}
return resolve(data.(string))
}
}