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 39 40 41
macro_rules! bl_enum { ( $(#[$meta:meta])* $vis:vis enum $name:ident { $( $(#[$meta_var:meta])* $variant:ident = $value:ident, )* } Default => $default:ident ) => { $(#[$meta])* #[derive(Copy, Clone, Debug, PartialEq, PartialOrd)] $vis enum $name { $( $(#[$meta_var])* $variant = $value as _, )* } impl From<u32> for $name { fn from(val: u32) -> Self { match val as _ { $( $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 } } }; }