generateTypesFromSwagger function

void generateTypesFromSwagger()

Implementation

void generateTypesFromSwagger() {
  final swaggerMain =
      jsonDecode(File(swaggerPath).readAsStringSync()) as Map<String, dynamic>;
  final swaggerAuth = jsonDecode(File(authProxySwaggerPath).readAsStringSync())
      as Map<String, dynamic>;

  final out = StringBuffer()..write(header);

  // ----- DEFINITIONS (Enums + Classes) -----
  out.writeln('// --- Base definitions ---');
  final defs = (swaggerMain['definitions'] as Map).cast<String, dynamic>();

  // Emit enums first so classes can reference them
  for (final entry in defs.entries) {
    final name = entry.key;
    final def = (entry.value as Map).cast<String, dynamic>();
    if (def['type'] == 'string' && def['enum'] is List) {
      out.write(generateEnumHelpers(name, (def['enum'] as List)));
    }
  }

  // Emit classes
  for (final entry in defs.entries) {
    final name = entry.key.replaceAll(r'.', '');

    final def = (entry.value as Map).cast<String, dynamic>();
    if (def['type'] == 'object' && def['properties'] is Map) {
      out.write(generateClass(name, def, defs));
    } else if (!(def['type'] == 'string' && def['enum'] is List)) {
      // Unknown/empty -> minimal stub
      out.writeln('class $name {');
      out.writeln('  const $name();');
      out.writeln(
          '  factory $name.fromJson(Map<String, dynamic> json) => const $name();');
      out.writeln('  Map<String, dynamic> toJson() => {};');
      out.writeln('}\n');
    }
  }

  // ----- API TYPES -----
  out.writeln('// --- API shapes ---\n');
  out.write(generateApiTypes(swaggerMain, ""));
  out.write(generateApiTypes(swaggerAuth, "Proxy"));

  // Write file
  final f = File(outPath);
  f.parent.createSync(recursive: true);
  f.writeAsStringSync(out.toString());
  stdout.writeln('Wrote ${f.path}');
}