enumeration<E extends Enum> static method
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.',
);
},
);
}