generateSerializers method

String generateSerializers(
  1. Map serializers
)

Implementation

String generateSerializers(Map serializers) {
  final library = Library((b) {
    for (final key in serializers.keys) {
      final class_ = Class((b) {
        final typeName = '$key';
        final reader = MapReader(serializers);
        final className = reader.read<String>('$typeName.type');
        b.name = className;
        b.methods.add(Method((b) {
          b.static = true;
          b.name = 'deserialize';
          b.returns = Reference('$key');
          b.requiredParameters.add(Parameter((b) {
            b.name = 'value';
            b.type = Reference('Object?');
          }));
          final body = reader.read<String>('$typeName.deserialize');
          b.body = Code(body);
        }));

        b.methods.add(Method((b) {
          b.static = true;
          b.name = 'serialize';
          b.returns = Reference('Object?');
          b.requiredParameters.add(Parameter((b) {
            b.name = 'value';
            b.type = Reference('$key');
          }));
          final body = reader.read<String>('$typeName.serialize');
          b.body = Code(body);
        }));
      });

      b.body.add(class_);
    }
  });

  final emitter = DartEmitter();
  final result = library.accept(emitter).toString();
  return result;
}