enum-bitset 0.2.1

Generate efficient bitsets out of your enum types
Documentation
#![cfg(feature = "serde")]

use enum_bitset_derive::EnumBitset;
use serde::{Deserialize, Serialize};

#[derive(EnumBitset, Serialize, Deserialize, Clone, Debug)]
#[bitset(serde = "map")]
enum Week {
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday,
}



#[test]
fn weekend() {
    let weekend = Week::Saturday | Week::Sunday;

    let serialized = serde_json::to_string(&weekend).unwrap();

    println!("{}", serialized);
    let expected = r#"{"Monday":false,"Tuesday":false,"Wednesday":false,"Thursday":false,"Friday":false,"Saturday":true,"Sunday":true}"#;
    assert_eq!(serialized, expected);

    let deserialized: WeekSet = serde_json::from_str(&serialized).unwrap();

    assert_eq!(deserialized, weekend);
}

#[test]
fn empty() {
    let empty = WeekSet::empty();

    let serialized = serde_json::to_string(&empty).unwrap();

    println!("{}", serialized);
    let expected = r#"{"Monday":false,"Tuesday":false,"Wednesday":false,"Thursday":false,"Friday":false,"Saturday":false,"Sunday":false}"#;
    assert_eq!(serialized, expected);

    let deserialized: WeekSet = serde_json::from_str(&serialized).unwrap();

    assert!(deserialized.is_empty());
}

#[test]
fn all() {
    let empty = WeekSet::all();

    let serialized = serde_json::to_string(&empty).unwrap();

    println!("{}", serialized);
    let expected = r#"{"Monday":true,"Tuesday":true,"Wednesday":true,"Thursday":true,"Friday":true,"Saturday":true,"Sunday":true}"#;
    assert_eq!(serialized, expected);

    let deserialized: WeekSet = serde_json::from_str(&serialized).unwrap();

    assert!(deserialized.is_all());
}

#[test]
fn deserialize_sparse() {
    let json = r#"{"Saturday":true,"Sunday":true}"#;

    let deserialized: WeekSet = serde_json::from_str(json).unwrap();

    let expected = Week::Saturday | Week::Sunday;
    assert_eq!(deserialized, expected);
}