bitmask-enum 1.0.0

A bitmask enum attribute macro
Documentation
# Bitmask-Enum


A bitmask enum attribute macro.

A bitmask can have unsigned integer types, the default type is `usize`.

Don't know how to document in `proc-macro` crates so if you want see a better documentation run `cargo doc --open` and select your `Bitmask` enum.

```rust
#[bitmask] // usize

enum Bitmask { /* ... */ }

#[bitmask(u8)] // u8

enum Bitmask { /* ... */ }
```

## Example


```rust
use bitmask_enum::bitmask;

#[bitmask(u8)]

enum Bitmask {
    Flag1, // defaults to 0d00000001
    Flag2, // defaults to 0d00000010
    Flag3, // defaults to 0d00000100
}

// bitmask has const bitwise operator methods
const CONST_BM: Bitmask = Bitmask::Flag2.or(Bitmask::Flag3);

fn main() {
    println!("{:#010b}", CONST_BM); // 0b00000110

    // Bitmask that contains Flag1 and Flag3
    let bm = Bitmask::Flag1 | Bitmask::Flag3;

    println!("{:#010b}", bm); // 0b00000101

    // Does bm contain / intersect CONST_BM
    println!("{}", bm.contains(CONST_BM)); // true

    // Does bm contain / intersect all of CONST_BM
    println!("{}", bm.contains_all(CONST_BM)); // false
}
```

## Custom Values


You can assign every flag a custom value, but every flag requires a unique value that only contains one `1` bit.

```rust
use bitmask_enum::bitmask;

#[bitmask(u8)]

enum Bitmask {
    Flag1 = 0b00010000,
    Flag2 = 0b00000100,
    Flag3 = 0b00000001,
}

fn main() {
    let bm = Bitmask::Flag1 | Bitmask::Flag3;
    println!("{:#010b}", bm); // 0b00010001
}
```