generateClass method
Generate a serializer class.
Implementation
void generateClass(
List<int> serializers, BuildContext ctx, LibraryBuilder file) {
log.fine('Generate serializer class');
// Generate canonical codecs, etc.
var pascal = ctx.modelClassNameRecase.pascalCase.replaceAll('?', '');
var camel = ctx.modelClassNameRecase.camelCase.replaceAll('?', '');
log.fine('Generating ${pascal}Serializer');
if (ctx.constructorParameters.isEmpty) {
log.fine("Constructor is empty");
file.body.add(Code('''
const ${pascal}Serializer ${camel}Serializer = ${pascal}Serializer();
class ${pascal}Encoder extends Converter<$pascal, Map> {
const ${pascal}Encoder();
@override
Map convert($pascal model) => ${pascal}Serializer.toMap(model);
}
class ${pascal}Decoder extends Converter<Map, $pascal> {
const ${pascal}Decoder();
@override
$pascal convert(Map map) => ${pascal}Serializer.fromMap(map);
}
'''));
}
file.body.add(Class((clazz) {
clazz.name = '${pascal}Serializer';
if (ctx.constructorParameters.isEmpty) {
clazz.extend = TypeReference((b) => b
..symbol = 'Codec'
..types.addAll([ctx.modelClassType, refer('Map')]));
// Add constructor, Codec impl, etc.
clazz.constructors.add(Constructor((b) => b..constant = true));
clazz.methods.add(Method((b) => b
..name = 'encoder'
..returns = refer('${pascal}Encoder')
..type = MethodType.getter
..annotations.add(refer('override'))
..body = refer('${pascal}Encoder').constInstance([]).code));
clazz.methods.add(Method((b) => b
..name = 'decoder'
..returns = refer('${pascal}Decoder')
..type = MethodType.getter
..annotations.add(refer('override'))
..body = refer('${pascal}Decoder').constInstance([]).code));
} else {
clazz.abstract = true;
}
if (serializers.contains(Serializers.map)) {
generateFromMapMethod(clazz, ctx, file);
}
if (serializers.contains(Serializers.map) ||
serializers.contains(Serializers.json)) {
generateToMapMethod(clazz, ctx, file);
}
}));
}