write method
Implementation
String write() {
final sb = StringBuffer()
..writeln(ObjectModelWriter.autoGeneratedWarning)
..writeln()
..writeln("import 'package:json_annotation/json_annotation.dart';")
..writeln();
final modelDescription = jsonModel.description?.trim();
if (modelDescription != null && modelDescription.isNotEmpty) {
sb.writeln("///$modelDescription");
}
final jsonModelName = CaseUtil(jsonModel.name);
final itemTypeName = CaseUtil(jsonModel.itemType.name);
sb.writeln('enum ${jsonModelName.pascalCase} {');
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');
}
if (jsonModel.itemType is StringType) {
sb.writeln(' @JsonValue(\'$jsonValue\')');
} else if (jsonModel.itemType is DoubleType && jsonValue != null) {
final doubleValue = double.tryParse(jsonValue);
sb.writeln(' @JsonValue($doubleValue)');
} else {
sb.writeln(' @JsonValue($jsonValue)');
}
sb.writeln(' ${key.name},');
});
sb.writeln('}');
if (jsonModel.generateMap) {
sb
..writeln()
..writeln('const ${jsonModelName.camelCase}Mapping = {');
jsonModel.fields?.forEach((key) {
final jsonValue = key.value == null || key.value?.isEmpty == null
? key.serializedName
: key.value;
sb.write(' ${jsonModelName.pascalCase}.${key.name}: ');
if (jsonModel.itemType is StringType) {
sb.writeln('\'$jsonValue\',');
} else if (jsonModel.itemType is DoubleType && jsonValue != null) {
final doubleValue = double.tryParse(jsonValue);
sb.writeln('$doubleValue,');
} else {
sb.writeln('$jsonValue,');
}
});
sb
..writeln('};')
..writeln();
if (jsonModel.itemType is DoubleType) {
sb.writeln('final reverse${jsonModelName.pascalCase}Mapping = {');
} else {
sb.writeln('const reverse${jsonModelName.pascalCase}Mapping = {');
}
jsonModel.fields?.forEach((key) {
final jsonValue = key.value == null || key.value?.isEmpty == null
? key.serializedName
: key.value;
if (jsonModel.itemType is StringType) {
sb.write(' \'$jsonValue\': ');
} else if (jsonModel.itemType is DoubleType && jsonValue != null) {
final doubleValue = double.tryParse(jsonValue);
sb.write(' $doubleValue: ');
} else {
sb.write(' $jsonValue: ');
}
sb.writeln('${jsonModelName.pascalCase}.${key.name},');
});
sb.writeln('};');
if (jsonModel.generateExtensions) {
sb
..writeln()
..writeln(
'extension ${jsonModelName.pascalCase}Extension on ${jsonModelName.pascalCase} {')
..writeln(
' ${itemTypeName.originalText} get ${itemTypeName.camelCase}Value => ${jsonModelName.camelCase}Mapping[this]!;')
..writeln('}')
..writeln()
..writeln(
'extension ${jsonModelName.pascalCase}${itemTypeName.pascalCase}Extension on ${itemTypeName.originalText} {')
..writeln(
' ${jsonModelName.pascalCase}? get as${jsonModelName.pascalCase} => reverse${jsonModelName.pascalCase}Mapping[this];')
..writeln('}');
}
}
return sb.toString();
}