macro_rules! encap_enum {
(
$(
$(#[$outer_comment:meta])*
$outer_vis:vis enum $name:ident : $inner_vis:vis $type:ty {
$(
$val_name:ident =
$($li:literal $(- $sub_li:literal)* $(- $li_sub_id:ident)* $(- (enum $type0:ty) $li_sub_sid:ident )*)?
$($id:ident $(- $sub_id:ident)* $(- $id_sub_li:literal)* $(- (enum $type1:ty) $id_sub_sid:ident )*)?
$((enum $type2:ty) $($sid0:ident)? $(- $sid1:ident)* $(- $($sid_sub_li:literal)* )* )*
$((-$id1:ident))?
$(| $bitor_li:literal)*
$(+ $add_li:literal)*
$(& $bitand_li:literal)*
$(^ $bitxor_li:literal)*
$(/ $div_li:literal)*
$(* $mul_li:literal)*
$(<< $shl_li:literal)*
$(>> $shr_li:literal)*
$(| $bitor_id:ident)*
$(+ $add_id:ident)*
$(& $bitand_id:ident)*
$(^ $bitxor_id:ident )*
$(/ $div_id:ident )*
$(* $mul_id:ident )*
$(<< $shl_id:ident )*
$(>> $shr_id:ident )*
$(| (enum $bitor_type_sid:ty) $bitor_sid:ident )*
$(+ (enum $add_type_sid:ty) $add_sid:ident )*
$(& (enum $bitand_type_sid:ty) $bitand_sid:ident )*
$(^ (enum $bitxor_type_sid:ty) $bitxor_sid:ident )*
$(/ (enum $div_type_sid:ty) $div_sid:ident )*
$(* (enum $mul_type_sid:ty) $mul_sid:ident )*
$(<< (enum $shl_type_sid:ty) $shl_sid:ident )*
$(>> (enum $shr_type_sid:ty) $shr_sid:ident )*
,$(#[$comment:meta])*
)+
}
)+
) => { ... };
(
$(
$(#[$outer_comment:meta])*
$outer_vis:vis enum $name:ident {
$(
$val_name:ident =
$($li:literal $(- $sub_li:literal)* $(- $li_sub_id:ident)* $(- (enum $type0:ty) $li_sub_sid:ident )*)?
$($id:ident $(- $sub_id:ident)* $(- $id_sub_li:literal)* $(- (enum $type1:ty) $id_sub_sid:ident )*)?
$((enum $type2:ty) $($sid0:ident)? $(- $sid1:ident)* $(- $($sid_sub_li:literal)* )* )*
$((-$id1:ident))?
$(| $bitor_li:literal)*
$(+ $add_li:literal)*
$(& $bitand_li:literal)*
$(^ $bitxor_li:literal)*
$(/ $div_li:literal)*
$(* $mul_li:literal)*
$(<< $shl_li:literal)*
$(>> $shr_li:literal)*
$(| $bitor_id:ident)*
$(+ $add_id:ident)*
$(& $bitand_id:ident)*
$(^ $bitxor_id:ident )*
$(/ $div_id:ident )*
$(* $mul_id:ident )*
$(<< $shl_id:ident )*
$(>> $shr_id:ident )*
$(| (enum $bitor_type_sid:ty) $bitor_sid:ident )*
$(+ (enum $add_type_sid:ty) $add_sid:ident )*
$(& (enum $bitand_type_sid:ty) $bitand_sid:ident )*
$(^ (enum $bitxor_type_sid:ty) $bitxor_sid:ident )*
$(/ (enum $div_type_sid:ty) $div_sid:ident )*
$(* (enum $mul_type_sid:ty) $mul_sid:ident )*
$(<< (enum $shl_type_sid:ty) $shl_sid:ident )*
$(>> (enum $shr_type_sid:ty) $shr_sid:ident )*
,$(#[$comment:meta])*
)+
}
)+
) => { ... };
(
$(#[$outermost_comment:meta])*
$whole_vis:vis mod $namespace:ident {
$(
$(#[$outer_comment:meta])*
$outer_vis:vis enum $name:ident {
$($val_name:ident,$(#[$comment:meta])*)+
}
)+
}
) => { ... };
(
$(#[$outermost_comment:meta])*
$whole_vis:vis mod $namespace:ident {
$(
$(#[$outer_comment:meta])*
$outer_vis:vis enum $name:ident : $inner_vis:vis $type:ty{
$($val_name:ident,$(#[$comment:meta])*)+
}
)+
}
) => { ... };
(
$(
$(#[$outer_comment:meta])*
$outer_vis:vis enum $name:ident : $inner_vis:vis $type:ty{
$($val_name:ident,$(#[$comment:meta])*)+
}
)+
) => { ... };
}Expand description
A macro for bit flags and enumerations.
See crate level docs for full documentation.
ยงExample
#[macro_use]
extern crate encap_enum;
encap_enum!{
enum Flags{
A = 0x00,
B = 0x01,
C = 0x02,
}
}
fn main() {
println!("A = {}", Flags::A.raw);
}