reddish/string/
kebab_case.rs

1#![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}