I think that, similar to SE-0194, the best way to provide this feature would be to add a CaseDiscriminatable
(to be bike-shedded) protocol, for which, like CaseEnumerable
a compiler-provided default implementation would be created for same-file extensions.
e.g:
protocol CaseDiscriminatable {
associatedtype Discriminator: Hashable
var case: Discriminator
}