use bitflags::*;
use option_set::option_set;
#[macro_use]
extern crate bitflags_serial;
bitflags! {
#[derive(serde::Serialize, serde::Deserialize)]
struct TestGood: u8 {
const
const TWO = 1 << 1;
const THREE = 1 << 2;
}
}
option_set! {
struct TestBad: UpperCamel + u8 {
const
const TWO = 1 << 1;
const THREE = 1 << 2;
}
}
bitflags_serial! {
struct TestBadTWO: u8 {
const
const TWO = 1 << 1;
const THREE = 1 << 2;
}
}
#[test]
fn test_bitflags() {
let flag_good = TestGood::ONE | TestGood::TWO;
let json_ser_good = serde_json::ser::to_string(&flag_good).unwrap();
let ron_ser_good = ron::ser::to_string(&flag_good).unwrap();
assert_eq!(json_ser_good, "{\"bits\":3}");
assert_eq!(ron_ser_good, "(bits:3)");
let json_de_good: TestGood = serde_json::de::from_str(json_ser_good.as_str()).unwrap();
let ron_de_good: TestGood = ron::de::from_str(ron_ser_good.as_str()).unwrap();
assert_eq!(json_de_good, flag_good);
assert_eq!(ron_de_good, flag_good);
let flag_bad = TestBad::ONE | TestBad::TWO;
let json_ser_bad = serde_json::ser::to_string(&flag_bad).unwrap();
let ron_ser_bad = ron::ser::to_string(&flag_bad).unwrap();
assert_eq!(json_ser_bad, "[\"One\",\"Two\"]");
assert_eq!(ron_ser_bad, "[\"One\",\"Two\"]");
let json_de_bad: TestBad = serde_json::de::from_str(json_ser_bad.as_str()).unwrap();
let ron_de_bad: TestBad = ron::de::from_str(ron_ser_bad.as_str()).unwrap();
assert_eq!(json_de_bad, flag_bad);
assert_eq!(ron_de_bad, flag_bad);
let flag_bad_two = TestBadTWO::ONE | TestBadTWO::TWO;
let json_ser_bad_two = serde_json::ser::to_string(&flag_bad_two).unwrap();
let ron_ser_bad_two = ron::ser::to_string(&flag_bad_two).unwrap();
assert_eq!(json_ser_bad_two, "[\"ONE\",\"TWO\"]");
assert_eq!(ron_ser_bad_two, "[ONE,TWO]");
let json_de_bad_two: TestBadTWO = serde_json::de::from_str(json_ser_bad_two.as_str()).unwrap();
let ron_de_bad_two: TestBadTWO = ron::de::from_str(ron_ser_bad_two.as_str()).unwrap();
assert_eq!(json_de_bad_two, flag_bad_two);
assert_eq!(ron_de_bad_two, flag_bad_two);
}