validate

  1. @override
ValidationResult<T> validate(
  1. dynamic value
)

override

Implementation

@override
ValidationResult<T> validate(dynamic value) {
  if (value == null) {
    return const Invalid({
      'body': ['is required'],
    });
  }

final map = switch (value) { final Map<String, dynamic> m => m, final JSObject jsObj => switch (jsObj.dartify()) { final Map m => m.cast<String, dynamic>(), _ => null, }, _ => null, }; if (map == null) { return const Invalid({ 'body': ['must be an object'], }); }

final errors = <String, List<String>>{}; final validated = <String, dynamic>{};

for (final entry in fields.entries) { final fieldName = entry.key; final validator = entry.value; final fieldValue = map[fieldName];

final result = validator.validate(fieldValue); switch (result) { case Valid(:final value): validated[fieldName] = value; case final Invalid invalid: // Prefix errors with field name for (final e in invalid.errors.entries) { final key = e.key == 'value' ? fieldName : '$fieldName.${e.key}'; errors[key] = e.value; } } }

if (errors.isNotEmpty) { return Invalid(errors); }

return Valid(constructor(validated)); }