use std::cell::Cell;
#[derive(Debug, Default)]
pub struct Flag(Cell<bool>);
impl Flag {
pub fn raised() -> Self {
Self(Cell::new(true))
}
pub fn raise(&self) -> bool {
!self.0.replace(true)
}
pub fn lower(&self) -> bool {
self.0.replace(false)
}
pub fn is_raised(&self) -> bool {
self.0.get()
}
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn test_raise_lower() {
let flag = Flag::default();
assert!(!flag.is_raised());
assert!(flag.raise());
assert!(flag.is_raised());
assert!(!flag.raise());
assert!(flag.is_raised());
assert!(flag.lower());
assert!(!flag.is_raised());
assert!(!flag.lower());
assert!(!flag.is_raised());
}
}