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
            }
        }
    };
}