css_minify/optimizations/
font.rs

1use crate::optimizations::transformer::Transform;
2use crate::structure::{Parameters, Value};
3
4#[derive(Default, Debug, Clone)]
5pub(crate) struct FontTransformer;
6
7impl Transform for FontTransformer {
8    fn transform_parameters(&self, mut parameters: Parameters) -> Parameters {
9        parameters
10            .iter_mut()
11            .filter(|(name, _)| matches!(name.as_str(), "font-weight"))
12            .for_each(|(_, value): (_, &mut Value)| {
13                *value = value
14                    .replace("normal", "400")
15                    .replace("bold", "700")
16                    .replace('\"', "");
17            });
18        parameters
19    }
20}
21
22#[cfg(test)]
23mod test {
24    use crate::optimizations::font::FontTransformer;
25    use crate::optimizations::transformer::Transform;
26    use crate::structure::{Block, CssEntities, CssEntity, Selector, SelectorWithPseudoClasses};
27    use indexmap::map::IndexMap;
28
29    #[test]
30    fn test_blocks() {
31        assert_eq!(
32            FontTransformer::default().transform_many(CssEntities(vec![CssEntity::Block(Block {
33                selectors: vec![SelectorWithPseudoClasses(
34                    Some(Selector::Class("test".into())),
35                    vec![],
36                )]
37                .into(),
38                parameters: {
39                    let mut tmp = IndexMap::new();
40                    tmp.insert("font-weight".into(), "bold".into());
41                    tmp.into()
42                },
43            }),])),
44            CssEntities(vec![CssEntity::Block(Block {
45                selectors: vec![SelectorWithPseudoClasses(
46                    Some(Selector::Class("test".into())),
47                    vec![],
48                )]
49                .into(),
50                parameters: {
51                    let mut tmp = IndexMap::new();
52                    tmp.insert("font-weight".into(), "700".into());
53                    tmp.into()
54                },
55            }),])
56        )
57    }
58}