From db52aa40bf57b0cee71a511ed8222ea87cc391b1 Mon Sep 17 00:00:00 2001 From: Henry Zimmerman Date: Sun, 1 Sep 2019 10:22:21 -0400 Subject: [PATCH] Add extend method to Classes --- src/virtual_dom/mod.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/virtual_dom/mod.rs b/src/virtual_dom/mod.rs index 9ba19f2a0..57ab86d9e 100644 --- a/src/virtual_dom/mod.rs +++ b/src/virtual_dom/mod.rs @@ -17,6 +17,7 @@ pub use self::vnode::VNode; pub use self::vtag::VTag; pub use self::vtext::VText; use crate::html::{Component, Scope}; +use std::ops::RangeFull; /// `Listener` trait is an universal implementation of an event listener /// which helps to bind Rust-listener to JS-listener (DOM). @@ -41,7 +42,7 @@ type Listeners = Vec>>; type Attributes = HashMap; /// A set of classes. -#[derive(Debug)] +#[derive(Debug, Clone)] pub struct Classes { set: IndexSet, } @@ -63,6 +64,13 @@ impl Classes { pub fn contains(&self, class: &str) -> bool { self.set.contains(class) } + + /// Adds other classes to this class; returning itself. + pub fn extend>(mut self, other: T) -> Self { + let mut other: Classes = other.into(); + self.set.extend(other.set.drain(RangeFull)); + self + } } impl ToString for Classes {