Skip to main content

rohas_codegen/
templates.rs

1/// Convert snake_case to PascalCase
2pub 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
14/// Convert PascalCase to snake_case
15pub 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
33/// Convert PascalCase to kebab-case
34pub 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}