eskema function

Validator eskema(
  1. Map<String, Validator> eskema
)

Returns a Validator that checks a value against a Map eskema that declares a validator for each key.

Example:

final mapField = all([
  eskema({
    'name': all([isType<String>()]),
    'vat': or(
      isTypeNull(),
      isGte(0),
    ),
    'age': all([
      isType<int>(),
      isGte(0),
    ]),
  }),
]);

Implementation

Validator eskema(Map<String, Validator> eskema) {
  return (value) {
    if (value is! Map) return Result.invalid('Map', value);

    for (final key in eskema.keys) {
      final field = eskema[key] as Validator;
      final result = field.call(value[key]);

      if (result.isNotValid) {
        return Result.invalid('$key -> ${result.expected}', result.value);
      }
    }

    return Result.valid;
  };
}