expectPreserveValue function

IValidator expectPreserveValue(
  1. IValidator validator,
  2. Expectation expectation
)

Adds an expectation message while preserving the child's resulting value (useful for coercions where later constraints rely on the coerced type even on failure).

Implementation

IValidator expectPreserveValue(IValidator validator, Expectation expectation) {
  return Validator((value) {
    final innerResult = validator.validate(value);
    if (innerResult.isValid) return Result.valid(innerResult.value);

    return Result.invalid(innerResult.value, expectations: [
      expectation.copyWith(
        code: innerResult.firstExpectation.code,
        value: innerResult.value,
      )
    ]);
  });
}