#[macro_export]
macro_rules! serializable_enum {
(
$(#[$enum_attr:meta])*
$enum_visibility:vis enum $enum_name:ident : $representation:ty {
$(
$(#[$field_attr:meta])*
$field_name:ident => $field_value:expr
),*
}
) => {
::macro_bits::defile::defile!{
$(#[$enum_attr])*
$enum_visibility enum $enum_name {
$(
$(#[$field_attr])*
$field_name,
)*
Unknown($representation)
}
#[allow(ineffective_bit_mask)]
impl $enum_name {
pub const fn from_bits(value: $representation) -> Self {
use $enum_name::*;
match value {
$(
$field_value => $field_name,
)*
x => Self::Unknown(x)
}
}
pub const fn into_bits(self) -> $representation {
use $enum_name::*;
match self {
$(
$field_name => $field_value,
)*
Self::Unknown(x) => x
}
}
}
::macro_bits::generate_conversions!($representation, $representation, $enum_name);
}
};
}