1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
macro_rules! bl_enum { ( $(#[$meta:meta])* $vis:vis enum $name:ident { $( $variant:ident = $value:ident, )* } Default => $default:ident ) => { $(#[$meta])* #[repr(i32)] #[derive(Copy, Clone, Debug, PartialEq, PartialOrd)] $vis enum $name { $( $variant = $value as i32, )* } impl From<u32> for $name { fn from(val: u32) -> Self { match val as i32 { $( $value => $name::$variant, )* _ => $name::$default, } } } impl From<$name> for u32 { fn from(val: $name) -> u32 { val as u32 } } impl Default for $name { fn default() -> Self { $name::$default } } }; }