use core::mem::Discriminant;
use hashbrown::HashMap;
type StyleProperty<Brush> = crate::StyleProperty<'static, Brush>;
#[derive(Clone, Debug)]
pub struct StyleSet<Brush: crate::Brush>(
HashMap<Discriminant<StyleProperty<Brush>>, StyleProperty<Brush>>,
);
impl<Brush: crate::Brush> StyleSet<Brush> {
pub fn new(font_size: f32) -> Self {
let mut this = Self(HashMap::default());
this.insert(StyleProperty::FontSize(font_size));
this
}
pub fn insert(&mut self, style: StyleProperty<Brush>) -> Option<StyleProperty<Brush>> {
let discriminant = core::mem::discriminant(&style);
self.0.insert(discriminant, style)
}
pub fn retain(&mut self, mut f: impl FnMut(&StyleProperty<Brush>) -> bool) {
self.0.retain(|_, v| f(v));
}
pub fn remove(
&mut self,
property: Discriminant<StyleProperty<Brush>>,
) -> Option<StyleProperty<Brush>> {
self.0.remove(&property)
}
pub fn inner(&self) -> &HashMap<Discriminant<StyleProperty<Brush>>, StyleProperty<Brush>> {
&self.0
}
}