rohas_codegen/
templates.rs1pub fn to_pascal_case(s: &str) -> String {
3 s.split('_')
4 .map(|word| {
5 let mut chars = word.chars();
6 match chars.next() {
7 None => String::new(),
8 Some(first) => first.to_uppercase().chain(chars).collect(),
9 }
10 })
11 .collect()
12}
13
14pub fn to_snake_case(s: &str) -> String {
16 let mut result = String::new();
17 let mut chars = s.chars().peekable();
18
19 while let Some(ch) = chars.next() {
20 if ch.is_uppercase() {
21 if !result.is_empty() {
22 result.push('_');
23 }
24 result.push(ch.to_lowercase().next().unwrap());
25 } else {
26 result.push(ch);
27 }
28 }
29
30 result
31}
32
33pub fn to_kebab_case(s: &str) -> String {
35 to_snake_case(s).replace('_', "-")
36}
37
38#[cfg(test)]
39mod tests {
40 use super::*;
41
42 #[test]
43 fn test_to_pascal_case() {
44 assert_eq!(to_pascal_case("hello_world"), "HelloWorld");
45 assert_eq!(to_pascal_case("user_created"), "UserCreated");
46 }
47
48 #[test]
49 fn test_to_snake_case() {
50 assert_eq!(to_snake_case("HelloWorld"), "hello_world");
51 assert_eq!(to_snake_case("UserCreated"), "user_created");
52 }
53
54 #[test]
55 fn test_to_kebab_case() {
56 assert_eq!(to_kebab_case("HelloWorld"), "hello-world");
57 assert_eq!(to_kebab_case("UserCreated"), "user-created");
58 }
59}