generateForEnum static method

Future generateForEnum(
  1. EnumElement element,
  2. SubjectGenContext<Element> genContext,
  3. SubjectCodeContext codeContext
)

Implementation

static Future generateForEnum(
    EnumElement element,
    SubjectGenContext<Element> genContext,
    SubjectCodeContext codeContext) async {
  var emitter = DartEmitter();
  var converterName = "${element.name}Converter";
  var clazz = Class((builder) {
    builder.name = converterName;

    builder.extend = Reference(
        "$genAlias.GeneratedEnumDogConverter<${codeContext.typeName(element.thisType)}>");

    builder.methods.add(Method((builder) => builder
      ..name = "values"
      ..type = MethodType.getter
      ..returns = Reference("List<String>")
      ..annotations.add(CodeExpression(Code("override")))
      ..lambda = true
      ..body = Code(
          "${codeContext.typeName(element.thisType)}.values.map((e) => e.name).toList()")));

    builder.methods.add(Method((builder) => builder
      ..name = "toStr"
      ..type = MethodType.getter
      ..returns = Reference(
          "$genAlias.EnumToString<${codeContext.typeName(element.thisType)}> ")
      ..annotations.add(CodeExpression(Code("override")))
      ..lambda = true
      ..body = Code("(e) => e!.name")));

    builder.methods.add(Method((builder) => builder
      ..name = "fromStr"
      ..type = MethodType.getter
      ..returns = Reference(
          "$genAlias.EnumFromString<${codeContext.typeName(element.thisType)}> ")
      ..annotations.add(CodeExpression(Code("override")))
      ..lambda = true
      ..body = Code(
          "(e) => ${codeContext.typeName(element.thisType)}.values.firstWhereOrNullDogs((element) => element.name == e)")));
  });
  codeContext.codeBuffer.writeln(clazz.accept(emitter));
}