enumeration<E extends Enum> static method

Codec<E> enumeration<E extends Enum>(
  1. Map<E, String> labels
)

Enum storage labels are explicit and independent of declaration ordinals.

Implementation

static Codec<E> enumeration<E extends Enum>(Map<E, String> labels) {
  final encode = Map<E, String>.unmodifiable(labels);
  final decode = {for (final entry in encode.entries) entry.value: entry.key};
  if (encode.isEmpty || decode.length != encode.length) {
    throw ArgumentError('Enum mappings must contain unique storage labels.');
  }
  return Codec<E>(
    'text',
    (value) {
      if (decode[value] case final result?) return result;
      throw const OrmException('CODEC.ENUM', 'Unknown stored enum value.');
    },
    (value) {
      if (encode[value] case final result?) return result;
      throw const OrmException(
        'CODEC.ENUM',
        'Enum value has no storage label.',
      );
    },
  );
}