🔥 Remove ReplaceIfExists class operation

This commit is contained in:
Manuel Cillero 2023-09-21 18:53:57 +02:00
parent 82b28dee5c
commit 4b9b36ed6e

View file

@ -18,7 +18,6 @@ pub enum ClassesOp {
Add, Add,
Remove, Remove,
Replace(String), Replace(String),
ReplaceIfExists(String),
Reset, Reset,
} }
@ -63,20 +62,22 @@ impl Classes {
self.0.retain(|(c, _)| c.ne(&name.to_string())); self.0.retain(|(c, _)| c.ne(&name.to_string()));
} }
} }
ClassesOp::Replace(class) => { ClassesOp::Replace(classes_to_replace) => {
match self.0.iter().position(|(c, _)| c.eq(&class)) { let mut pos = self.0.len();
Some(pos) => { let mut class_type = ClassType::User;
let (_, class_type) = self.0.remove(pos); let replace: Vec<&str> = classes_to_replace.split_ascii_whitespace().collect();
self.add(&classes, pos, class_type); for class in replace {
if let Some(replace_pos) = self.0.iter().position(|(c, _)| c.eq(class)) {
let (_, replace_type) = self.0.remove(replace_pos);
if pos > replace_pos {
pos = replace_pos;
}
if replace_type.eq(&ClassType::Default) {
class_type = replace_type;
}
} }
None => self.add(&classes, self.0.len(), ClassType::User),
};
}
ClassesOp::ReplaceIfExists(class) => {
if let Some(pos) = self.0.iter().position(|(c, _)| c.eq(&class)) {
let (_, class_type) = self.0.remove(pos);
self.add(&classes, pos, class_type);
} }
self.add(&classes, pos, class_type);
} }
ClassesOp::Reset => { ClassesOp::Reset => {
self.0.retain(|(_, t)| t.ne(&ClassType::User)); self.0.retain(|(_, t)| t.ne(&ClassType::User));
@ -88,17 +89,22 @@ impl Classes {
#[inline] #[inline]
fn add(&mut self, classes: &Vec<&str>, mut pos: usize, class_type: ClassType) { fn add(&mut self, classes: &Vec<&str>, mut pos: usize, class_type: ClassType) {
for class in classes { for class in classes {
if !class.is_empty() && self.0.iter().position(|(c, _)| c.eq(class)).is_none() { if !class.is_empty() && !self.0.iter().any(|(c, _)| c.eq(class)) {
self.0.insert(pos, (class.to_string(), class_type.clone())); self.0.insert(pos, (class.to_string(), class_type.clone()));
pos = pos + 1; pos += 1;
} }
} }
} }
// Classes GETTERS. // Classes GETTERS.
pub fn exists(&self, class: impl Into<String>) -> bool {
let class: String = class.into();
self.0.iter().any(|(c, _)| c.eq(&class))
}
pub fn get(&self) -> Option<String> { pub fn get(&self) -> Option<String> {
if self.0.len() == 0 { if self.0.is_empty() {
None None
} else { } else {
Some( Some(