1 macro_rules! enum_number { 2 ($name:ident { $($variant:ident = $value:expr, )* }) => { 3 enum $name { 4 $($variant = $value,)* 5 } 6 7 fn foo(value: i32) -> Option<$name> { 8 match value { 9 $( $value => Some($name::$variant), )* // PatKind::Lit 10 $( $value ..= 42 => Some($name::$variant), )* // PatKind::Range 11 _ => None 12 } 13 } 14 } 15 } 16 17 enum_number!(Change { 18 Pos = 1, 19 Neg = -1, 20 Arith = 1 + 1, //~ ERROR arbitrary expressions aren't allowed in patterns 21 //~| ERROR arbitrary expressions aren't allowed in patterns 22 }); 23 main()24fn main() {} 25