utilz_rs/
bool_utils.rs

1pub trait BoolUtils {
2    #[must_use]
3    fn not(&self) -> bool;
4    fn then_val<T>(&self, val: T) -> Option<T>;
5    fn if_true<T, F: FnOnce() -> T>(&self, f: F) -> Option<T>;
6    fn if_false<T, F: FnOnce() -> T>(&self, f: F) -> Option<T>;
7    fn toggle(&mut self);
8}
9
10impl BoolUtils for bool {
11    fn not(&self) -> bool {
12        !self
13    }
14    fn then_val<T>(&self, val: T) -> Option<T> {
15        if *self { Some(val) } else { None }
16    }
17    fn if_true<T, F: FnOnce() -> T>(&self, f: F) -> Option<T> {
18        if *self { Some(f()) } else { None }
19    }
20    fn if_false<T, F: FnOnce() -> T>(&self, f: F) -> Option<T> {
21        if self.not() { Some(f()) } else { None }
22    }
23    fn toggle(&mut self) {
24        *self = !*self;
25    }
26}