1use sha2::{Digest, Sha256};
2
3pub fn generate_class_name(css: &str) -> String {
5 let mut hasher = Sha256::new();
6 hasher.update(css.as_bytes());
7 let hash = hasher.finalize();
8 let hash_str = format!("{:x}", hash);
9 format!("rustyle-{}", &hash_str[..8])
10}
11
12pub fn scope_css(css: &str, scope_class: &str) -> String {
14 css.lines()
17 .map(|line| {
18 if line.trim().starts_with('.') {
19 format!("{}.{}", scope_class, line.trim_start_matches('.'))
20 } else {
21 line.to_string()
22 }
23 })
24 .collect::<Vec<_>>()
25 .join("\n")
26}
27
28#[cfg(test)]
29mod tests {
30 use super::*;
31
32 #[test]
33 fn test_generate_class_name() {
34 let name1 = generate_class_name("test css");
35 let name2 = generate_class_name("test css");
36 let name3 = generate_class_name("different css");
37
38 assert_eq!(name1, name2);
39 assert_ne!(name1, name3);
40 assert!(name1.starts_with("rustyle-"));
41 }
42}