generateEnum function

String generateEnum(
  1. EnumElement c
)

Implementation

String generateEnum(EnumElement c) {
  final values = c.fields.where((f) => f.isEnumConstant);
  return '''
      extension ${c.name}Match on ${c.name} {
        T match<T>({
          ${values.map(namedFunctionArgument).map((n) => 'required $n').join(',\n')}
        }) {
          final v = this;
          ${values.map((v) => enumValueMatch(c, v)).join('\n')}

          throw Exception('${c.name}.match failed, found no match for: \$this');
        }

        T matchAny<T>({
          required T Function() any,
          ${values.map(optionalNamedFunctionArgument).join(',\n')}
        }) {
          final v = this;
          ${values.map((v) => optionalEnumValueMatch(c, v)).join('\n')}

          return any();
        }
      }
  ''';
}