code: func DecodeHookExec(
  	raw DecodeHookFunc,
  	from reflect.Type, to reflect.Type,
  	data interface{}) (interface{}, error) {
  	switch f := typedDecodeHook(raw).(type) {
  	case DecodeHookFuncType:
  		return f(from, to, data)
  	case DecodeHookFuncKind:
  		return f(from.Kind(), to.Kind(), data)
  	default:
  		return nil, errors.New("invalid decode hook signature")
  	}
  }
docs: // DecodeHookExec executes the given decode hook. This should be used
  // since it'll naturally degrade to the older backwards compatible DecodeHookFunc
  // that took reflect.Kind instead of reflect.Type.