macro_rules! enum_number { | |
($name:ident { $($variant:ident = $value:expr, )* }) => { | |
enum $name { | |
$($variant = $value,)* | |
} | |
fn foo(value: i32) -> Option<$name> { | |
match value { | |
$( $value => Some($name::$variant), )* // PatKind::Lit | |
$( $value ..= 42 => Some($name::$variant), )* // PatKind::Range | |
_ => None | |
} | |
} | |
} | |
} | |
enum_number!(Change { | |
Pos = 1, | |
Neg = -1, | |
Arith = 1 + 1, //~ ERROR arbitrary expressions aren't allowed in patterns | |
//~| ERROR arbitrary expressions aren't allowed in patterns | |
}); | |
fn main() {} |