#[derive(Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum BoolSet {
Empty,
Single(bool),
Both,
}
impl Default for BoolSet {
fn default() -> BoolSet {
BoolSet::Empty
}
}
impl BoolSet {
pub fn is_empty(self) -> bool {
self == BoolSet::Empty
}
pub fn insert(&mut self, val: bool) -> bool {
match *self {
BoolSet::Empty => *self = BoolSet::Single(val),
BoolSet::Single(s) if s != val => *self = BoolSet::Both,
_ => return false,
}
true
}
pub fn contains(self, val: bool) -> bool {
match self {
BoolSet::Empty => false,
BoolSet::Single(ref s) => *s == val,
BoolSet::Both => true,
}
}
pub fn len(self) -> usize {
match self {
BoolSet::Empty => 0,
BoolSet::Single(_) => 1,
BoolSet::Both => 2,
}
}
}