rustc_data_structures/
macros.rs

1#[macro_export]
2macro_rules! enum_from_u32 {
3    ($(#[$attr:meta])* pub enum $name:ident {
4        $($(#[$var_attr:meta])* $variant:ident = $e:expr,)*
5    }) => {
6        $(#[$attr])*
7        pub enum $name {
8            $($(#[$var_attr])* $variant = $e),*
9        }
10
11        impl $name {
12            pub fn from_u32(u: u32) -> Option<$name> {
13                $(if u == $name::$variant as u32 {
14                    return Some($name::$variant)
15                })*
16                None
17            }
18        }
19    };
20    ($(#[$attr:meta])* pub enum $name:ident {
21        $($(#[$var_attr:meta])* $variant:ident,)*
22    }) => {
23        $(#[$attr])*
24        pub enum $name {
25            $($(#[$var_attr])* $variant,)*
26        }
27
28        impl $name {
29            pub fn from_u32(u: u32) -> Option<$name> {
30                $(if u == $name::$variant as u32 {
31                    return Some($name::$variant)
32                })*
33                None
34            }
35        }
36    }
37}