listEach function
- IValidator itemValidator
Returns a Validator that runs itemValidator
for each item in the list
This validator also checks that the value is a list
Implementation
IValidator listEach(IValidator itemValidator) {
return $isList &
Validator((value) {
final errors = <Expectation>[];
FutureOr<Result> loop(int index) {
if (index >= value.length) {
return errors.isEmpty
? Result.valid(value)
: Result.invalid(value, expectations: errors);
}
final item = value[index];
if (item == null && itemValidator.isNullable) {
return loop(index + 1);
}
final res = itemValidator.validator(item);
if (res is Future<Result>) {
return res.then((r) {
_collectListIndex(r, errors, index);
return loop(index + 1);
});
}
_collectListIndex(res, errors, index);
return loop(index + 1);
}
return loop(0);
});
}