css-minify 0.5.2

CSS parser and minificator based on nom
Documentation
use crate::optimizations::transformer::Transform;
use crate::structure::{Parameters, Value};

#[derive(Default, Debug, Clone)]
pub(crate) struct FontTransformer;

impl Transform for FontTransformer {
    fn transform_parameters(&self, mut parameters: Parameters) -> Parameters {
        parameters
            .iter_mut()
            .filter(|(name, _)| matches!(name.as_str(), "font-weight"))
            .for_each(|(_, value): (_, &mut Value)| {
                *value = value
                    .replace("normal", "400")
                    .replace("bold", "700")
                    .replace('\"', "");
            });
        parameters
    }
}

#[cfg(test)]
mod test {
    use crate::optimizations::font::FontTransformer;
    use crate::optimizations::transformer::Transform;
    use crate::structure::{Block, CssEntities, CssEntity, Selector, SelectorWithPseudoClasses};
    use indexmap::map::IndexMap;

    #[test]
    fn test_blocks() {
        assert_eq!(
            FontTransformer::default().transform_many(CssEntities(vec![CssEntity::Block(Block {
                selectors: vec![SelectorWithPseudoClasses(
                    Some(Selector::Class("test".into())),
                    vec![],
                )]
                .into(),
                parameters: {
                    let mut tmp = IndexMap::new();
                    tmp.insert("font-weight".into(), "bold".into());
                    tmp.into()
                },
            }),])),
            CssEntities(vec![CssEntity::Block(Block {
                selectors: vec![SelectorWithPseudoClasses(
                    Some(Selector::Class("test".into())),
                    vec![],
                )]
                .into(),
                parameters: {
                    let mut tmp = IndexMap::new();
                    tmp.insert("font-weight".into(), "700".into());
                    tmp.into()
                },
            }),])
        )
    }
}