validate method
Validates the field value based on the defined validation rules.
Implementation
List<ValidationError> validate(
JsonValue value, {
bool isUpdate = false,
}) {
final errors = <ValidationError>[];
if (cardinality.isRequired) {
//Check for null
if (value is JsonNull) {
errors.add(
ValidationError(
message: 'Field $name is required, but null was specified',
field: name,
),
);
} else {
if (!isUpdate && value is Undefined) {
errors.add(
ValidationError(
message: 'Field $name is required, but no value was specified',
field: name,
),
);
}
}
}
if ((min != null || max != null) && value is! JsonArray) {
errors.add(
ValidationError(
message: 'Field $name must be an array',
field: name,
),
);
}
if (min != null && value is JsonArray && value.length < min!) {
errors.add(
ValidationError(
message: 'Field $name must have at least $min items',
field: name,
),
);
}
if (max != null && value is JsonArray && value.length > max!) {
errors.add(
ValidationError(
message: 'Field $name must have at most $max items',
field: name,
),
);
}
if (regex != null) {
if (value is! JsonString) {
if (value.isSome) {
errors.add(
ValidationError(
message: 'Field $name must be a string and '
'match the regex expression',
field: name,
),
);
}
} else {
if (!RegExp(regex!).hasMatch(value.value)) {
errors.add(
ValidationError(
message: 'Field $name must match the pattern $regex',
field: name,
),
);
}
}
}
if (allowedStringValues.isNotEmpty) {
if (value is! JsonString) {
if (value.isSome) {
errors.add(
ValidationError(
message: 'Field $name must be a string',
field: name,
),
);
}
} else {
if (!allowedStringValues.contains(value.value)) {
errors.add(
ValidationError(
message: 'Field $name value must be one of '
'[ ${allowedStringValues.join(', ')} ]',
field: name,
),
);
}
}
}
return errors;
}