Skip to main content

toogle/
lib.rs

1#![no_std]
2
3/// Trait to implement the `.toogle()` method, to switch between two values
4///
5/// ## Exemple
6/// ```rust
7/// use toogle::Toggle;
8///
9/// #[derive(PartialEq, Eq)]
10/// pub enum TwoEnum {
11///     Value1, Value2
12/// };
13///
14/// impl Toggle for TwoEnum {
15///     fn toggle(&mut self) {
16///         *self = match *self {
17///             TwoEnum::Value1 => TwoEnum::Value2,
18///             TwoEnum::Value2 => TwoEnum::Value1,
19///         }
20///     }
21/// }
22///
23/// ```
24pub trait Toggle {
25    fn toggle(&mut self);
26}
27
28impl Toggle for bool {
29    fn toggle(&mut self) {
30        *self = !*self;
31    }
32}
33
34#[cfg(test)]
35mod tests {
36    use crate::Toggle;
37
38    #[test]
39    fn test_toogle() {
40        let mut test = false;
41
42        assert_eq!(test, false);
43        test.toggle();
44
45        assert_eq!(test, true);
46        test.toggle();
47
48        assert_eq!(test, false);
49    }
50}