BloomRpcValidationErrors.fromResponse constructor
BloomRpcValidationErrors.fromResponse(
- dynamic data
Parses validation errors from decoded response JSON or error maps.
Supports:
{"errors": {"field": ["msg"]}}{"field": "msg", "non_field_errors": ["general error"]}{"error": "message"}or{"detail": "message"}
Implementation
factory BloomRpcValidationErrors.fromResponse(dynamic data) {
final fieldMap = <String, List<String>>{};
final generalList = <String>[];
if (data is Map) {
dynamic targetMap = data;
if (data.containsKey('errors') && data['errors'] is Map) {
targetMap = data['errors'];
} else if (data.containsKey('validation_errors') &&
data['validation_errors'] is Map) {
targetMap = data['validation_errors'];
}
for (final entry in (targetMap as Map).entries) {
final key = entry.key.toString();
final value = entry.value;
if (key == 'non_field_errors' ||
key == '__all__' ||
key == 'general' ||
key == 'error' ||
key == 'detail' ||
key == 'message') {
if (value is Iterable) {
generalList.addAll(value.map((v) => v.toString()));
} else if (value != null) {
generalList.add(value.toString());
}
} else {
final list = fieldMap.putIfAbsent(key, () => []);
if (value is Iterable) {
list.addAll(value.map((v) => v.toString()));
} else if (value != null) {
list.add(value.toString());
}
}
}
} else if (data is String && data.isNotEmpty) {
generalList.add(data);
}
return BloomRpcValidationErrors(
fieldErrors: fieldMap,
nonFieldErrors: generalList,
);
}