getField method

Field getField(
  1. String name,
  2. YamlMap property
)

Implementation

Field getField(String name, YamlMap property) {
  try {
    final required =
        property.containsKey('required') && property['required'] == true;
    final ignored =
        property.containsKey('ignore') && property['ignore'] == true;
    final nonFinal = ignored ||
        property.containsKey('non_final') && property['non_final'] == true;
    final includeIfNull = property['include_if_null'] != false;
    final unknownEnumValue = property['unknown_enum_value'];
    final jsonKey = property['jsonKey'] ?? property['jsonkey'];
    final type = property['type'];
    ItemType itemType;

    if (type == null) {
      throw Exception('$name has no defined type');
    }
    if (type == 'object' || type == 'dynamic' || type == 'any') {
      itemType = DynamicType();
    } else if (type == 'bool' || type == 'boolean') {
      itemType = BooleanType();
    } else if (type == 'string' || type == 'String') {
      itemType = StringType();
    } else if (type == 'date' || type == 'datetime') {
      itemType = DateTimeType();
    } else if (type == 'double') {
      itemType = DoubleType();
    } else if (type == 'int' || type == 'integer') {
      itemType = IntegerType();
    } else if (type == 'array') {
      final items = property['items'];
      final arrayType = items['type'];
      itemType = ArrayType(_makeGenericName(arrayType));
    } else if (type == 'map') {
      final items = property['items'];
      final keyType = items['key'];
      final valueType = items['value'];
      itemType = MapType(
        key: _makeGenericName(keyType),
        valueName: _makeGenericName(valueType),
      );
    } else {
      itemType = ObjectType(type);
    }
    return Field(
      name: name,
      type: itemType,
      isRequired: required,
      ignore: ignored,
      jsonKey: jsonKey,
      nonFinal: nonFinal,
      includeIfNull: includeIfNull,
      unknownEnumValue: unknownEnumValue,
    );
  } catch (e) {
    print('Something went wrong with $name:\n\n${e.toString()}');
    rethrow;
  }
}