macro_rules! convertible_enum {
(#[repr($type:ty)]$(#[$meta:meta])* $visibility:vis enum $enum_name:ident {
$($(#[$variant_meta:meta])* $variant_name:ident = $variant_value:expr,)*
}) => { ... };
}
Expand description
Adds conversions from
and into
integer to enums
Takes an enum that must have a #[repr()]
as first meta field and assigns a
value to all enum variants.
convertible_enum!(
#[repr(u8)]
#[derive(Debug, PartialEq)]
pub enum Test {
Val1 = 1,
Val2 = 2,
}
);
let int: u8 = Test::Val2.into();
assert_eq!(int, 2);
assert_eq!(Test::from(2), Test::Val2);
assert_eq!(Test::from(3), Test::Unknown(3));