reddish/string/
kebab_case.rs1#![allow(dead_code)]
2
3pub fn kebab_case(str: &str) -> String {
4 let mut result = String::new();
5 let mut is_last_special_char = false;
6 let mut is_last_small_char = false;
7
8 for (_index, char) in str.chars().enumerate() {
9 if char.is_alphanumeric() {
10 if is_last_special_char {
11 if result.len() > 0 {
12 result.push('-');
13 }
14
15 is_last_special_char = false;
16 } else if is_last_small_char && char.is_uppercase() && result.len() > 0 {
17 result.push('-');
18 }
19
20 result.push(char.to_ascii_lowercase());
21
22 if char.is_lowercase() {
23 is_last_small_char = true;
24 } else {
25 is_last_small_char = false;
26 }
27 } else {
28 is_last_special_char = true;
29 }
30 }
31
32 return result;
33}