renderDeserialization<T extends Object?> method
String
renderDeserialization<T extends Object?>(
- ClassModel model,
- FieldModel field, {
- String map = 'map',
The deserialization of this field in a form of String.
Implementation
String renderDeserialization<T extends Object?>(
final ClassModel model,
final FieldModel field, {
final String map = 'map',
}) {
String? $type;
final String converter = renderConverter(model, field);
switch (field.type) {
case FieldType.$object:
final String reference = field.reference.split('[').first.normalize();
if (models.any((final _) => _.reference == reference)) {
$type = 'Map<String, Object?>';
}
continue single;
case FieldType.$enum:
case FieldType.$datetime:
case FieldType.$timedelta:
$type = 'String';
continue single;
single:
case FieldType.$boolean:
case FieldType.$integer:
case FieldType.$float:
case FieldType.$string:
$type ??= _renderType(model, field, iterable: false, nullable: false);
final String fieldKey =
model.staticKeys ? field.staticKey : "'${field.key}'";
final String nullCheck =
field.nullable || field.$default != null ? '' : '!';
String single = '$map[$fieldKey]$nullCheck';
if ($type != Object().runtimeType.toString()) {
if (field.nullable && field.checkType) {
single = '$single is ${$type} ? $single! as ${$type} : null';
} else {
final String nullCheck =
field.nullable || field.$default != null ? '?' : '';
single += ' as ${$type}$nullCheck';
}
}
return converter.isEmpty ? single : '$converter.fromJson($single,)';
case FieldType.$$object:
final String reference = field.reference.split('[').first.normalize();
if (models.any((final _) => _.reference == reference)) {
$type = 'Map<String, Object?>';
}
continue iterable;
case FieldType.$$enum:
case FieldType.$$datetime:
case FieldType.$$timedelta:
$type = 'String';
continue iterable;
iterable:
case FieldType.$$boolean:
case FieldType.$$integer:
case FieldType.$$float:
case FieldType.$$string:
$type ??= _renderType(model, field, iterable: false, nullable: false);
final String fieldKey =
model.staticKeys ? field.staticKey : "'${field.key}'";
String iterable = "$map[$fieldKey]${field.nullable ? '' : '!'}";
if (field.nullable && field.checkType) {
final Object? $default = field.checkTypeDefault ??
(field.required ? field.$default : null);
String $$default = _renderDefault(model, field, $default);
if ($$default.isEmpty) {
$$default = null.toString();
}
iterable = '$iterable is Iterable<Object?> ? '
'$iterable! as Iterable<Object?> : ${$$default}';
} else {
iterable += ' as Iterable<Object?>${field.nullable ? '?' : ''}';
}
if ($type != Object().runtimeType.toString()) {
iterable = '($iterable)${field.nullable ? '?' : ''}.'
'${field.castIterable ? 'cast' : 'whereType'}<${$type}>()';
}
return converter.isEmpty ? iterable : '$converter.fromJson($iterable,)';
}
}