generateForEnum method
Future
generateForEnum(
- EnumElement element,
- SubjectGenContext<
Element> genContext, - SubjectCodeContext codeContext
Implementation
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.firstWhereOrNull((element) => element.name == e)")));
});
codeContext.codeBuffer.writeln(clazz.accept(emitter));
}