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}