1#![doc = include_str!("../README.md")]
2#![cfg_attr(docsrs, feature(doc_cfg))]
3
4mod boolean_toggler;
5
6use boolean_toggler::BooleanTogglerFactory;
7
8pub trait TogglingIsALifestyle {
10 fn toggle(&mut self);
12}
13
14#[cfg_attr(not(docsrs), cfg(enterprise_license))]
15#[cfg_attr(docsrs, doc(cfg(enterprise_license)))]
16pub use TogglingIsALifestyle as BoolToggleExt;
17pub use TogglingIsALifestyle as Toggler;
18pub use TogglingIsALifestyle as Toggling;
19pub use TogglingIsALifestyle as IAmTheToggler;
20
21impl TogglingIsALifestyle for bool {
22 fn toggle(&mut self) {
23 BooleanTogglerFactory::create_boolean_toggler(self).toggle();
25 }
26}
27
28#[cfg(enterprise_license)]
29impl<const N: usize> TogglingIsALifestyle for [bool; N] {
30 fn toggle(&mut self) {
31 for b in self {
33 let mut bool_toggler = BooleanTogglerFactory::create_boolean_toggler(b);
34 bool_toggler.toggle();
35 }
36 }
37}
38
39#[cfg(test)]
40#[allow(clippy::bool_assert_comparison)]
41mod tests {
42 use super::TogglingIsALifestyle;
45 #[test]
46 fn toggle() {
47 let mut b = false;
48 b.toggle();
49 assert_eq!(b, true);
50 b.toggle();
51 assert_eq!(b, false);
52 }
53}
54
55#[cfg(all(test, enterprise_license))]
56#[allow(clippy::bool_assert_comparison)]
57mod enteprise_tests {
58 use super::BoolToggleExt;
62
63 #[test]
64 fn enterprise_toggle() {
65 let mut b = false;
66 b.toggle();
67 assert_eq!(b, true);
68 }
69 #[test]
70 fn enterprise_simd_toggle() {
71 let mut b = [false, true, false];
72 b.toggle();
73 assert_eq!(b, [true, false, true]);
74 }
75}