func reifyDoArray()

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
}