#![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);
}