in reify.go [589:625]
func reifyDoArray(
opts fieldOptions,
to reflect.Value, elemT reflect.Type,
start int,
val value,
arr []value,
) (reflect.Value, Error) {
aLen := len(arr)
tLen := to.Len()
for idx := 0; idx < tLen; idx++ {
if idx >= start && idx < start+aLen {
v, err := reifyMergeValue(opts, to.Index(idx), arr[idx-start])
if err != nil {
return reflect.Value{}, err
}
if v.IsValid() {
to.Index(idx).Set(v)
}
} else {
if err := tryRecursiveValidate(to.Index(idx), opts.opts, nil); err != nil {
return reflect.Value{}, raiseValidation(val.Context(), val.meta(), "", err)
}
}
}
if err := runValidators(to.Interface(), opts.validators); err != nil {
ctx := val.Context()
return reflect.Value{}, raiseValidation(ctx, val.meta(), "", err)
}
if err := tryValidate(to); err != nil {
ctx := val.Context()
return reflect.Value{}, raiseValidation(ctx, val.meta(), "", err)
}
return to, nil
}