macro_rules! TryFromU32 { derive() ( $(#[$meta:meta])* $vis:vis enum $Type:ident { $( $(#[$varmeta:meta])* $Variant:ident $(= $discr:expr)? ),* $(,)? } ) => { impl ::core::convert::TryFrom for $Type { type Error = u32; #[allow(deprecated)] // Don't warn about deprecated variants. fn try_from(value: u32) -> ::core::result::Result<$Type, Self::Error> { $( if value == const { $Type::$Variant as u32 } { return Ok($Type::$Variant) } )* Err(value) } } } } pub(crate) use TryFromU32;