renderDeserialization<T extends Object?> method

String renderDeserialization<T extends Object?>(
  1. ClassModel model,
  2. FieldModel field, {
  3. 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,)';
  }
}