wal_css/parser/
mod.rs

1use std::collections::HashMap;
2
3use self::{cleaners::clear_css, parsing_functions::parse_stylesheet};
4
5mod cleaners;
6mod parsing_functions;
7mod types;
8
9/// generates css with prefixed selectors and stylesheet selector mapping
10pub(crate) fn process_css(input: &str, prefix: &str) -> (String, HashMap<String, String>) {
11    let cleared_input = clear_css(input);
12    let (_, stylesheet) = parse_stylesheet(&cleared_input).unwrap();
13
14    let mapping: HashMap<String, String> = stylesheet.gen_mapping(prefix).into_iter().collect();
15    let updated_css = stylesheet.gen_css(prefix);
16
17    (updated_css, mapping)
18}
19
20#[cfg(test)]
21mod tests {
22    use std::collections::HashMap;
23
24    use crate::parser::process_css;
25
26    #[test]
27    fn process_css_returns_correct_values() {
28        let input = " 
29        .class { 
30            color: red; 
31            background-color: yellow; 
32        }
33
34        #id { 
35            color: green; 
36            background-color: white; 
37        }
38        ";
39        let prefix = "test-";
40
41        let mut expected_mapping = HashMap::<String, String>::new();
42        expected_mapping.insert("class".to_owned(), "test-class".to_owned());
43        expected_mapping.insert("id".to_owned(), "test-id".to_owned());
44
45        let expected_css = ".test-class { color: red; background-color: yellow; } #test-id { color: green; background-color: white; }".to_owned();
46
47        assert_eq!((expected_css, expected_mapping), process_css(input, prefix));
48    }
49}