[][src]Macro encap_enum::encap_enum

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])*)+
            }
        )+
    ) => { ... };
}

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);
}