write method

String write()

Implementation

String write() {
  final sb = StringBuffer()
    ..writeln("import 'package:json_annotation/json_annotation.dart';")
    ..writeln();

  final modelDescription = jsonModel.description?.trim();
  if (modelDescription != null && modelDescription.isNotEmpty) {
    sb.writeln("///$modelDescription");
  }

  sb.writeln('enum ${jsonModel.name} {');
  jsonModel.fields?.forEach((key) {
    final jsonValue = key.value == null || key.value?.isEmpty == null
        ? key.serializedName
        : key.value;
    final description = key.description;
    if (description != null) {
      sb.writeln('  ///$description');
    }
    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();
}