Add _Enum!
macros to replace _
arms when matching shared enums
#1376
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
As the docs currently state about shared enums:
This is unfortunate as there is no way to check that all listed enum variants are actually handled. IOW this code does not even warn:
This generates an extra
_Enum!
macro that matches all the ranges that are not listed by the enum. When using that macro instead of the_
catch-all, we get compile-time errors if we forget to match variants:The generated macro looks like:
It can also be used to ergonomically retrieve the inner value in the unlisted case:
I would have preferred something like
Enum::unlisted!
, but macro definitions are not supported inimpl
s. I think_Enum
carries the meaning of_
specific toEnum
, but I'm open to other naming/namespacing ideas.