generateConverter<T extends Object?> method
Generate converter for the data classes file.
Implementation
void generateConverter<T extends Object?>(
final StringBuffer buffer,
final ClassModel model,
) {
String converter = model.name.endsWith('Model')
? model.name.substring(0, model.name.length - 5)
: model.name;
converter += 'Converter';
String converterName = converter.decapitalize();
converterName =
converterName == converter ? '\$$converterName' : converterName;
final String optionalConverter = 'Optional$converter';
buffer
..writeDoc('The optional converter of the [${model.name}].')
..writeln(
'const $optionalConverter ${optionalConverter.decapitalize()} = '
'$optionalConverter._();',
)
..writeln()
..writeDoc('The optional converter of the [${model.name}].')
..writeln('@sealed')
..writeln('@immutable')
..writeln(
'class $optionalConverter implements '
'JsonConverter<${model.name}?, Map<String, Object?>?> {',
)
..writeln('const $optionalConverter._();')
..writeln()
..writeln('@override')
..writeFunction(
'${model.name}? fromJson',
fields: <String>['final Map<String, Object?>? value'],
bodyConstructor: 'value == null ? null : ${model.name}.fromMap',
bodyFields: <String>['value'],
)
..writeln()
..writeln('@override')
..writeFunction(
'Map<String, Object?>? toJson',
fields: <String>['final ${model.name}? value'],
bodyConstructor: 'value?.toMap',
)
..writeln('}')
..writeln()
..writeDoc('The converter of the [${model.name}].')
..writeln(
'const $converter $converterName = $converter._();',
)
..writeln()
..writeDoc('The converter of the [${model.name}].')
..writeln('@sealed')
..writeln('@immutable')
..writeln(
'class $converter implements '
'JsonConverter<${model.name}, Map<String, Object?>> {',
)
..writeln('const $converter._();')
..writeln()
..writeln('@override')
..writeFunction(
'${model.name} fromJson',
fields: <String>['final Map<String, Object?> value'],
bodyConstructor: '${model.name}.fromMap',
bodyFields: <String>['value'],
)
..writeln()
..writeln('@override')
..writeFunction(
'Map<String, Object?> toJson',
fields: <String>['final ${model.name} value'],
bodyConstructor: 'value.toMap',
)
..writeln('}');
}