in reify.go [655:691]
func reifyPrimitive(
opts fieldOptions,
val value,
t, baseType reflect.Type,
) (reflect.Value, Error) {
// zero initialize value if val==nil
if isNil(val) {
v := pointerize(t, baseType, reflect.Zero(baseType))
return tryInitDefaults(v), nil
}
var v reflect.Value
var err Error
var ok bool
if v, ok = typeIsUnpacker(baseType); ok {
err := unpackWith(opts.opts, v, val)
if err != nil {
return reflect.Value{}, err
}
} else {
v, err = doReifyPrimitive(opts, val, baseType)
if err != nil {
return v, err
}
}
if err := runValidators(v.Interface(), opts.validators); err != nil {
return reflect.Value{}, raiseValidation(val.Context(), val.meta(), "", err)
}
if err := tryValidate(v); err != nil {
return reflect.Value{}, raiseValidation(val.Context(), val.meta(), "", err)
}
return pointerize(t, baseType, chaseValuePointers(v)), nil
}