From d418c3f00f9ac990023ad642b58ce41b74fe0c28 Mon Sep 17 00:00:00 2001 From: Laesse Date: Sat, 10 Feb 2024 21:45:31 +0100 Subject: [PATCH] feat: adhere to the strictest clean code standards and DRY --- src/boolean_toggler.rs | 24 ++++++++++++++++++++++++ src/lib.rs | 10 ++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 src/boolean_toggler.rs diff --git a/src/boolean_toggler.rs b/src/boolean_toggler.rs new file mode 100644 index 0000000..f5b021c --- /dev/null +++ b/src/boolean_toggler.rs @@ -0,0 +1,24 @@ +use super::TogglingIsALifestyle; + +pub struct BooleanToggler<'a> { + bool_to_toggle: &'a mut bool, +} + +impl TogglingIsALifestyle for BooleanToggler<'_> { + #[inline] + fn toggle(&mut self) { + // i'm enterprise fast + *self.bool_to_toggle ^= true; + } +} + +pub struct BooleanTogglerFactory; + +impl BooleanTogglerFactory { + #[inline] + pub fn create_boolean_toggler(bool_to_toggle: &mut bool) -> BooleanToggler { + return BooleanToggler { + bool_to_toggle: bool_to_toggle, + }; + } +} diff --git a/src/lib.rs b/src/lib.rs index ece3177..1af077d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,6 +1,10 @@ #![doc = include_str!("../README.md")] #![cfg_attr(docsrs, feature(doc_cfg))] +mod boolean_toggler; + +use boolean_toggler::BooleanTogglerFactory; + // Extension trait for toggling a bool. pub trait TogglingIsALifestyle { /// Toggle the bool. @@ -17,7 +21,8 @@ pub use TogglingIsALifestyle as IAmTheToggler; impl TogglingIsALifestyle for bool { fn toggle(&mut self) { // i am so smart - *self ^= true; + let mut bool_toggler = BooleanTogglerFactory::create_boolean_toggler(self); + bool_toggler.toggle(); } } @@ -26,7 +31,8 @@ impl TogglingIsALifestyle for [bool; N] { fn toggle(&mut self) { // i am so fast for b in self { - *b ^= true; + let mut bool_toggler = BooleanTogglerFactory::create_boolean_toggler(self); + bool_toggler.toggle(); } } }