validate method
Implementation
@override
JarResult validate(Map<String, dynamic>? value,
[Map<String, dynamic>? allValues]) {
final baseResult = super.validate(value, allValues ?? value);
if (!baseResult.isValid) {
return baseResult;
}
if (fields.isEmpty || value == null) {
return JarResult.success();
}
final ignoredFields = _ignoredFields ?? [];
if (!_allowExtra) {
final extraFields = value.keys
.where(
(key) => !fields.containsKey(key) && !ignoredFields.contains(key))
.toList();
if (extraFields.isNotEmpty) {
return JarResult.error(
'Extra fields are not allowed: ${extraFields.join(", ")}');
}
}
final errors = [];
fields.forEach((key, fieldSchema) {
final fieldValue = value[key];
if (fieldSchema is JarObject && fieldValue is Map<String, dynamic>) {
final nestedResult = fieldSchema.validate(fieldValue, value);
if (!nestedResult.isValid) {
if (nestedResult.details != null &&
nestedResult.details!.containsKey('errors')) {
final nestedErrors = nestedResult.details!['errors'];
for (var error in nestedErrors) {
errors.add({
'path': '$key.${error['path']}',
'message': error['message'],
});
}
} else {
errors.add({
'path': key,
'message': nestedResult.error,
});
}
}
} else {
final fieldResult = fieldSchema.validate(fieldValue, value);
if (!fieldResult.isValid) {
errors.add({
'path': key,
'message': fieldResult.error,
});
}
}
});
if (errors.isNotEmpty) {
return JarResult.error('Validation failed', {'errors': errors});
}
return JarResult.success();
}