This makes the code a little shorter, makes the code more DRY (because there's no need to re-state the argument names), and encourages more usage of match. Are match-only functions common enough in Rust to justify this added syntax sugar?
(I'd like a "language design" category in this group too, because lot of my posts here are about this topic).
FWIW, this is relatively straightforward to accomplish with a macro as long as you're okay with losing some flexibility (e.g. match statements always must be surrounded by {}) Someone with better macro-foo than I may be able to improve this to the point where there isn't such a drawback.
Between these two examples, we have a difference of two characters {} and maybe some indentation, The _ + ! may not be perfect, but there're no keystrokes lost from the two spaces that replaced them.
The macro removes the duplicated argument names, which appears to be the goal. What am I missing here?