azalea_inventory_macros/
utils.rs1pub fn to_pascal_case(s: &str) -> String {
2 if s.is_empty() {
5 return String::new();
6 }
7
8 let mut result = String::new();
9 let mut prev_was_underscore = true; if s.chars().next().unwrap().is_numeric() {
11 result.push('_');
12 }
13 for c in s.chars() {
14 if c == '_' {
15 prev_was_underscore = true;
16 } else if prev_was_underscore {
17 result.push(c.to_ascii_uppercase());
18 prev_was_underscore = false;
19 } else {
20 result.push(c);
21 }
22 }
23 result
24}
25
26pub fn to_snake_case(s: &str) -> String {
27 let mut result = String::new();
28 let mut prev_was_uppercase = true;
29 for c in s.chars() {
30 if c.is_ascii_uppercase() {
31 if !prev_was_uppercase {
32 result.push('_');
33 }
34 result.push(c.to_ascii_lowercase());
35 prev_was_uppercase = true;
36 } else {
37 result.push(c);
38 prev_was_uppercase = false;
39 }
40 }
41 result
42}
43
44#[cfg(test)]
45mod tests {
46 use super::*;
47
48 #[test]
49 fn test_snake_case() {
50 assert_eq!(to_snake_case("HelloWorld"), "hello_world");
51 assert_eq!(to_snake_case("helloWorld"), "hello_world");
52 assert_eq!(to_snake_case("hello_world"), "hello_world");
53 }
54}