eskema function

IEskValidator eskema(
  1. Map<String, IEskValidator> 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

// Structure types
//////////////////////////////////////////////////////////////////////////////////

/// Returns a Validator that checks a value against a Map eskema that declares a validator for each key.
///
/// Example:
/// ```dart
/// final mapField = all([
///   eskema({
///     'name': all([isType<String>()]),
///     'vat': or(
///       isTypeNull(),
///       isGte(0),
///     ),
///     'age': all([
///       isType<int>(),
///       isGte(0),
///     ]),
///   }),
/// ]);
/// ```
IEskValidator eskema(Map<String, IEskValidator> eskema) {
  return EskValidator((value) {
    if (value is! Map) return EskResult.invalid('Map', value);

    for (final key in eskema.keys) {
      final field = eskema[key];
      final result = field!.validate(value[key]);

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

    return EskResult.valid(value);
  });
}