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}