toDartType method

String toDartType({
  1. Map<String, List<String>>? unions,
})

Return a proper Dart type for this schema

Implementation

String toDartType({
  Map<String, List<String>>? unions,
}) {
  late String result;
  switch (this) {
    case SchemaObject(
        anyOf: final anyOf,
        nullable: final nullable,
        ref: final ref,
        properties: final properties,
      ):
      if (anyOf != null && unions != null) {
        final subSchemas = anyOf.map((e) => e.toDartType()).toList();
        final leq = ListEquality();
        for (final e in unions.entries) {
          if (leq.equals(subSchemas, e.value)) {
            final type = e.key.pascalCase;
            if (nullable == true) {
              result = '$type?';
            } else {
              result = type;
            }
          }
        }
        break;
      } else if (ref != null) {
        String type;
        // Do not modify all uppercase schema names
        if (ref == ref.toUpperCase()) {
          type = ref;
        } else {
          type = ref.pascalCase;
        }
        if (nullable == true) {
          result = '$type?';
        } else {
          result = type;
        }
        break;
      } else if (properties != null || anyOf != null) {
        result = 'Map<String,dynamic>';
        break;
      }
      result = 'dynamic';
      break;
    case SchemaBoolean():
      result = nullable == true ? 'bool?' : 'bool';
      break;
    case SchemaString():
      result = nullable == true ? 'String?' : 'String';
    case SchemaInteger():
      result = nullable == true ? 'int?' : 'int';
    case SchemaNumber():
      result = nullable == true ? 'double?' : 'double';
    case SchemaEnum():
      result = ref ?? 'String';
    case SchemaArray(items: final items):
      final itemType = items.toDartType();
      result = nullable == true ? 'List<$itemType>?' : 'List<$itemType>';
    case SchemaMap(valueSchema: final valueSchema, nullable: final nullable):
      String valueType = valueSchema?.toDartType() ?? 'dynamic';
      if (valueType != 'dynamic' && valueSchema?.nullable == true) {
        valueType = '$valueType?';
      }
      result = nullable == true
          ? 'Map<String,$valueType>?'
          : 'Map<String,$valueType>';
  }

  return result;
}