T
enumDecode<T>(- Map<T, dynamic> enumValues, 
- dynamic source, 
- {required T unknownValue}
)Implementation
  T enumDecode<T>(
  Map<T, dynamic> enumValues,
  dynamic source, {
  required T unknownValue,
}) {
  if (source == null) {
    throw ArgumentError('A value must be provided. Supported values: '
        '${enumValues.values.join(', ')}');
  }
  final value = enumValues.entries.singleWhere((e) => e.value == source).key;
  if (value == null && unknownValue == null) {
    throw ArgumentError('`$source` is not one of the supported values: '
        '${enumValues.values.join(', ')}');
  }
  return value ?? unknownValue;
}