Crate enumset[][src]

A library for defining enums that can be used in compact bit sets. It supports enums up to 128 variants, and has a macro to use these sets in constants.

For serde support, enable the serde feature.

Defining enums for use with EnumSet

Enums to be used with EnumSet should be defined using #[derive(EnumSetType)]:

#[derive(EnumSetType, Debug)]
pub enum Enum {
   A, B, C, D, E, F, G,
}

For more information on more advanced use cases, see the documentation for EnumSetType.

Working with EnumSets

EnumSets can be constructed via EnumSet::new() like a normal set. In addition, #[derive(EnumSetType)] creates operator overloads that allow you to create EnumSets like so:

let new_set = Enum::A | Enum::C | Enum::G;
assert_eq!(new_set.len(), 3);

All bitwise operations you would expect to work on bitsets also work on both EnumSets and enums with #[derive(EnumSetType)]:

// Intersection of sets
assert_eq!((Enum::A | Enum::B) & Enum::C, EnumSet::empty());
assert_eq!((Enum::A | Enum::B) & Enum::A, Enum::A);
assert_eq!(Enum::A & Enum::B, EnumSet::empty());

// Symmetric difference of sets
assert_eq!((Enum::A | Enum::B) ^ (Enum::B | Enum::C), Enum::A | Enum::C);
assert_eq!(Enum::A ^ Enum::C, Enum::A | Enum::C);

// Difference of sets
assert_eq!((Enum::A | Enum::B | Enum::C) - Enum::B, Enum::A | Enum::C);

// Complement of sets
assert_eq!(!(Enum::E | Enum::G), Enum::A | Enum::B | Enum::C | Enum::D | Enum::F);

The enum_set! macro allows you to create EnumSets in constant contexts:

const CONST_SET: EnumSet<Enum> = enum_set!(Enum::A | Enum::B);
assert_eq!(CONST_SET, Enum::A | Enum::B);

Mutable operations on the EnumSet otherwise similarly to Rust’s builtin sets:

let mut set = EnumSet::new();
set.insert(Enum::A);
set.insert_all(Enum::E | Enum::G);
assert!(set.contains(Enum::A));
assert!(!set.contains(Enum::B));
assert_eq!(set, Enum::A | Enum::E | Enum::G);

Macros

enum_set

Creates a EnumSet literal, which can be used in const contexts.

Structs

EnumSet

An efficient set type for enums.

EnumSetIter

The iterator used by EnumSets.

Traits

EnumSetType

The trait used to define enum types that may be used with EnumSet.

Derive Macros

EnumSetType

A wrapper that parses the input enum.