generateClass method

String generateClass(
  1. String originalClassName,
  2. String name,
  3. Iterable<Field> fields, [
  4. Iterable<FieldType> interfaces = const [],
])

Implementation

String generateClass(
  String originalClassName,
  String name,
  Iterable<Field> fields, [
  Iterable<FieldType> interfaces = const [],
]) {
  final result = StringBuffer();

  if (name.startsWith('_')) {
    name = name.substring(1);
  }

  if (interfaces.isNotEmpty) {
    final implements = interfaces.map((it) => it.displayName).join(', ');
    result.writeln('class $name implements $implements {');
  } else {
    result.writeln('class $name {');
  }

  result.writeln('  final $originalClassName? \$scheme = null;');
  result.writeln();

  result.write(generateClassFields(fields));
  result.writeln();
  result.write(generateConstructor(name, fields));
  result.write(generateUnions(fields));
  result.write(generateTypeAdapters(fields));

  if (shouldGenerateFromJson) {
    result.writeln();
    result.write(generateFromJson(name, fields));
  }

  if (shoudlGenerateFromStringJson) {
    result.writeln();
    result.write(generateFromJsonString(name));
  }

  if (shouldGenerateToJson) {
    result.writeln();
    result.write(generateToJson(name, fields));
  }

  if (shouldGenerateToStringJson) {
    result.writeln();
    result.write(generateToJsonString());
  }

  result.writeln('}');
  return result.toString();
}