Skip to main content

bool_utils/
lib.rs

1//! Provides utility functions for working with boolean values.
2
3#![deny(missing_docs)]
4
5/// A trait that extends boolean values with additional utility methods.
6pub trait BoolUtils {
7    /// Toggles the boolean value.
8    fn toggle(&mut self);
9
10    /// Selects between two values based on the boolean value.
11    fn select<T>(self, on_true: T, on_false: T) -> T;
12}
13
14impl BoolUtils for bool {
15    fn toggle(&mut self) {
16        *self = !*self;
17    }
18
19    fn select<T>(self, on_true: T, on_false: T) -> T {
20        if self {
21            on_true
22        } else {
23            on_false
24        }
25    }
26}
27
28#[test]
29fn test_toggle() {
30    let mut flag = true;
31    flag.toggle();
32    assert!(!flag);
33    flag.toggle();
34    assert!(flag);
35}
36
37#[test]
38fn test_select() {
39    let flag = true;
40    let value = flag.select(10, 20);
41    assert_eq!(value, 10);
42
43    let flag = false;
44    let value = flag.select(10, 20);
45    assert_eq!(value, 20);
46}