write method

String write()

Implementation

String write() {
  final sb = StringBuffer()
    ..writeln("import 'package:json_annotation/json_annotation.dart';")
    ..writeln()
    ..writeln('enum ${jsonModel.name} {');
  jsonModel.fields?.forEach((key) {
    final jsonValue = key.value == null || key.value?.isEmpty == null
        ? key.serializedName
        : key.value;
    sb..writeln("  @JsonValue('$jsonValue')")..writeln('  ${key.name},');
  });
  sb.writeln('}');

  if (jsonModel.generateMap) {
    sb..writeln()..writeln('const ${jsonModel.name}Mapping = {');

    jsonModel.fields?.forEach((key) {
      final jsonValue = key.value == null || key.value?.isEmpty == null
          ? key.serializedName
          : key.value;
      sb
        ..write('  ${jsonModel.name}.${key.name}: ')
        ..writeln('\'$jsonValue\',');
    });

    sb
      ..writeln('};')
      ..writeln()
      ..writeln('const reverse${jsonModel.name}Mapping = {');

    jsonModel.fields?.forEach((key) {
      final jsonValue = key.value == null || key.value?.isEmpty == null
          ? key.serializedName
          : key.value;
      sb
        ..write('  \'$jsonValue\': ')
        ..writeln('${jsonModel.name}.${key.name},');
    });

    sb.writeln('};');

    if (jsonModel.generateExtensions) {
      sb
        ..writeln()
        ..writeln(
            'extension ${jsonModel.name}Extension on ${jsonModel.name} {')
        ..writeln(
            '  String get stringValue => ${jsonModel.name}Mapping[this]!;')
        ..writeln('}')
        ..writeln()
        ..writeln('extension ${jsonModel.name}StringExtension on String {')
        ..writeln(
            '  ${jsonModel.name}? get as${jsonModel.name} => reverse${jsonModel.name}Mapping[this];')
        ..writeln('}');
    }
  }

  return sb.toString();
}