Macro bitmask::bitmask [] [src]

macro_rules! bitmask {
    (
        $(#[$st_attr: meta])* mask $st_name: ident : $T: tt where
        $(#[$en_attr: meta])* flags $en_name: ident { $($token: tt)+ }
    ) => { ... };
    (
        st_meta: [ $(#[$st_attr: meta])* ],
        st_name: $st_name: ident,
        mask_type: $T: tt,
        en_meta: [ $(#[$en_attr: meta])* ],
        en_name: $en_name: ident,
        flags: [
            $(
                meta: [ $(#[$flag_attr: meta])* ]
                flag: $flag_name: ident = $flag_value: expr;
            )*
            [ $(#[$prev_attr: meta])* ]
        ],
        #[$next_attr: meta] $($token: tt)*
    ) => { ... };
    (
        st_meta: [ $(#[$st_attr: meta])* ],
        st_name: $st_name: ident,
        mask_type: $T: tt,
        en_meta: [ $(#[$en_attr: meta])* ],
        en_name: $en_name: ident,
        flags: [
            $(
                meta: [ $(#[$flag_attr: meta])* ]
                flag: $flag_name: ident = $flag_value: expr;
            )*
            [ $(#[$next_attr: meta])* ]
        ],
        $next_name: ident = $next_value: expr, $($token: tt)*
    ) => { ... };
    (
        st_meta: [ $(#[$st_attr: meta])* ],
        st_name: $st_name: ident,
        mask_type: $T: tt,
        en_meta: [ $(#[$en_attr: meta])* ],
        en_name: $en_name: ident,
        flags: [
            $(
                meta: [ $(#[$flag_attr: meta])* ]
                flag: $flag_name: ident = $flag_value: expr;
            )*
            [ $(#[$next_attr: meta])* ]
        ],
        $next_name: ident = $next_value: expr
    ) => { ... };
    (
        st_meta: [ $(#[$st_attr: meta])* ],
        st_name: $st_name: ident,
        mask_type: $T: tt,
        en_meta: [ $(#[$en_attr: meta])* ],
        en_name: $en_name: ident,
        flags: [
            $(
                meta: [ $(#[$flag_attr: meta])* ]
                flag: $flag_name: ident = $flag_value: expr;
            )+
            []
        ],
    ) => { ... };
    (
        $(#[$st_attr: meta])* pub mask $st_name: ident : $T: tt where
        $(#[$en_attr: meta])* flags $en_name: ident { $($token: tt)+ }
    ) => { ... };
    (
        pub
        st_meta: [ $(#[$st_attr: meta])* ],
        st_name: $st_name: ident,
        mask_type: $T: tt,
        en_meta: [ $(#[$en_attr: meta])* ],
        en_name: $en_name: ident,
        flags: [
            $(
                meta: [ $(#[$flag_attr: meta])* ]
                flag: $flag_name: ident = $flag_value: expr;
            )*
            [ $(#[$prev_attr: meta])* ]
        ],
        #[$next_attr: meta] $($token: tt)*
    ) => { ... };
    (
        pub
        st_meta: [ $(#[$st_attr: meta])* ],
        st_name: $st_name: ident,
        mask_type: $T: tt,
        en_meta: [ $(#[$en_attr: meta])* ],
        en_name: $en_name: ident,
        flags: [
            $(
                meta: [ $(#[$flag_attr: meta])* ]
                flag: $flag_name: ident = $flag_value: expr;
            )*
            [ $(#[$next_attr: meta])* ]
        ],
        $next_name: ident = $next_value: expr, $($token: tt)*
    ) => { ... };
    (
        pub
        st_meta: [ $(#[$st_attr: meta])* ],
        st_name: $st_name: ident,
        mask_type: $T: tt,
        en_meta: [ $(#[$en_attr: meta])* ],
        en_name: $en_name: ident,
        flags: [
            $(
                meta: [ $(#[$flag_attr: meta])* ]
                flag: $flag_name: ident = $flag_value: expr;
            )*
            [ $(#[$next_attr: meta])* ]
        ],
        $next_name: ident = $next_value: expr
    ) => { ... };
    (
        pub
        st_meta: [ $(#[$st_attr: meta])* ],
        st_name: $st_name: ident,
        mask_type: $T: tt,
        en_meta: [ $(#[$en_attr: meta])* ],
        en_name: $en_name: ident,
        flags: [
            $(
                meta: [ $(#[$flag_attr: meta])* ]
                flag: $flag_name: ident = $flag_value: expr;
            )+
            []
        ],
    ) => { ... };
    (@IMPL $st_name: ident $T: tt $en_name: ident, {
        $($flag_name: ident = $flag_val: expr),+
    }) => { ... };
    (@IMPL_BITOR $($target: ty, $other: ty, $st_name: ident);*;) => { ... };
    (@IMPL_BITAND $($target: ty, $other: ty, $st_name: ident);*;) => { ... };
    (@IMPL_BITXOR $($target: ty, $other: ty, $st_name: ident);*;) => { ... };
    (@IMPL_BITOR_ASSIGN $($target: ty, $other: ty);*;) => { ... };
    (@IMPL_BITAND_ASSIGN $($target: ty, $other: ty);*;) => { ... };
    (@IMPL_BITXOR_ASSIGN $($target: ty, $other: ty);*;) => { ... };
    (@IMPL_NOT $($target: ty, $st_name: ident);*;) => { ... };
}

The macro that generates a bitmask and it's associated bit flags.

See the crate level docs for more info and examples.

Methods

  • none - Create a new mask with all flags unset.
  • all - Create a new mask with all flags set.
  • set - Set a single flag if enum flag variant is passed or multiple if mask is passed.
  • unset - Unset a single flag if enum flag variant is passed or multiple if mask is passed.
  • toggle - Same as set/unset but always negates the flags (1 -> 0 and 0 -> 1).
  • contains - Check if the mask contains a flag or a whole mask.
  • intersects - Check if the mask intersects with a flag or a whole mask.
  • is_all - Check if all flag variants are set.
  • is_none - Check if all flag variants are unset.

Operators

  • BitOr
  • BitXor
  • BitAnd
  • BitOrAssign
  • BitXorAssign
  • BitAndAssign
  • Not - Same as toggle but creates a new mask with the resulting value.

Misc

  • From< enum > for struct
  • Deref for struct
  • Deref for enum