diff options
Diffstat (limited to 'glfw/src/util.rs')
-rw-r--r-- | glfw/src/util.rs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/glfw/src/util.rs b/glfw/src/util.rs index f77aaf8..98dcb9b 100644 --- a/glfw/src/util.rs +++ b/glfw/src/util.rs @@ -8,3 +8,34 @@ pub fn is_main_thread() -> bool ttid == pid } + +macro_rules! enum_from_repr { + ( + #[repr($repr: ident)] + $(#[$attr: meta])* + $visibility: vis enum $name: ident + { + $($variant: ident = $raw: path,)* + } + ) => { + $(#[$attr])* + #[repr($repr)] + $visibility enum $name + { + $($variant = $raw,)* + } + + impl $name + { + fn from_repr(repr: $repr) -> Option<Self> + { + match repr { + $($raw => Some(Self::$variant),)* + _ => None + } + } + } + }; +} + +pub(crate) use enum_from_repr; |