feat: adhere to the strictest clean code standards and DRY

This commit is contained in:
Laesse 2024-02-10 21:45:31 +01:00
parent 99b0badcb2
commit d418c3f00f
No known key found for this signature in database
GPG key ID: 1A8EEF88F7CA7262
2 changed files with 32 additions and 2 deletions

24
src/boolean_toggler.rs Normal file
View file

@ -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,
};
}
}

View file

@ -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<const N: usize> 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();
}
}
}