writeEnum method

  1. @override
void writeEnum(
  1. KotlinOptions generatorOptions,
  2. Root root,
  3. Indent indent,
  4. Enum anEnum, {
  5. required String dartPackageName,
})
override

Writes a single Enum to indent. This is needed in most generators.

Implementation

@override
void writeEnum(
  KotlinOptions generatorOptions,
  Root root,
  Indent indent,
  Enum anEnum, {
  required String dartPackageName,
}) {
  indent.newln();
  addDocumentationComments(
      indent, anEnum.documentationComments, _docCommentSpec);
  indent.write('enum class ${anEnum.name}(val raw: Int) ');
  indent.addScoped('{', '}', () {
    enumerate(anEnum.members, (int index, final EnumMember member) {
      addDocumentationComments(
          indent, member.documentationComments, _docCommentSpec);
      final String nameScreamingSnakeCase = member.name
          .replaceAllMapped(
              RegExp(r'(?<=[a-z])[A-Z]'), (Match m) => '_${m.group(0)}')
          .toUpperCase();
      indent.write('$nameScreamingSnakeCase($index)');
      if (index != anEnum.members.length - 1) {
        indent.addln(',');
      } else {
        indent.addln(';');
      }
    });

    indent.newln();
    indent.write('companion object ');
    indent.addScoped('{', '}', () {
      indent.write('fun ofRaw(raw: Int): ${anEnum.name}? ');
      indent.addScoped('{', '}', () {
        indent.writeln('return values().firstOrNull { it.raw == raw }');
      });
    });
  });
}