hexga_bitflags 0.0.10-beta.6

Bitflags utilities
Documentation
🚧 **Warning: Experimental Crate!** 🚧

This crate is currently in **beta** and **experimental**.  
It is subject to **breaking changes** in future releases.  
Use it at your own risk, and keep in mind that the API may change in future versions.

# BitFlags


A crate to manage bitflags with enums.

## Features


- Easily create and manage bitflags using enums.
- Provides intuitive methods for adding, removing, and toggling flags.
- Supports bitwise operations (`|`, `&`, `^`, `!`) for combining and manipulating flags.
- Implements iteration over active flags.


### Defining a BitFlags


```rust
#[repr(u8)]

#[derive(Clone, Copy, PartialEq, Eq, Debug)]

enum TeamFlag {
    Blue,
    Red,
    Yellow,
}

impl MaxValue for TeamFlag {
    const MAX: Self = Self::Yellow;
}

impl From<TeamFlag> for u8 {
    fn from(value: TeamFlag) -> Self {
        value as u8
    }
}

impl TryFrom<u8> for TeamFlag {
    type Error = ();
    fn try_from(value: u8) -> Result<Self, Self::Error> {
        match value {
            0 => Ok(TeamFlag::Blue),
            1 => Ok(TeamFlag::Red),
            2 => Ok(TeamFlag::Yellow),
            _ => Err(()),
        }
    }
}

type Team = BitFlags<TeamFlag, u8>;
```

### Basic Operations


```rust
fn main() 
{
    let mut team = Team::ZERO | TeamFlag::Blue | TeamFlag::Red;
    // same as
    // let mut team = Team::ZERO.added(TeamFlag::Blue).added(TeamFlag::Red);

    team ^= TeamFlag::Red;
    // same as
    // team.toggle(TeamFlag::Red);
    
    assert!(team.have(TeamFlag::Blue));
    assert!(!team.have(TeamFlag::Red));
    assert!(!team.have(TeamFlag::Yellow));

    team |= TeamFlag::Yellow;
    assert!(team.have(TeamFlag::Yellow));
}
```

### Iteration


```rust
fn main() 
{
    let mut teams = Team::ZERO | TeamFlag::Blue | TeamFlag::Red;

    // iteration :
    for team in teams
    {
        
    }
}
```