fen_parser/codegen/
name_transforms.rs

1#[must_use]
2pub fn snake_to_camel(s: &str) -> String {
3    let mut result = String::new();
4    let mut capitalize = false;
5
6    for c in s.chars() {
7        if c == '_' {
8            capitalize = true;
9        } else if capitalize {
10            result.push(c.to_ascii_uppercase());
11            capitalize = false;
12        } else {
13            result.push(c);
14        }
15    }
16
17    result
18}
19
20#[must_use]
21pub fn snake_to_pascal(s: &str) -> String {
22    let mut result = String::new();
23    let mut capitalize = true;
24
25    for c in s.chars() {
26        if c == '_' {
27            capitalize = true;
28        } else if capitalize {
29            result.push(c.to_ascii_uppercase());
30            capitalize = false;
31        } else {
32            result.push(c);
33        }
34    }
35
36    result
37}
38
39#[must_use]
40pub fn pascal_to_camel(s: &str) -> String {
41    let mut result = String::new();
42
43    for (i, c) in s.chars().enumerate() {
44        if i == 0 {
45            result.push(c.to_ascii_lowercase());
46        } else {
47            result.push(c);
48        }
49    }
50
51    result
52}
53
54#[must_use]
55pub fn pascal_to_kebab(s: &str) -> String {
56    let mut result = String::new();
57
58    for (i, c) in s.chars().enumerate() {
59        if i > 0 && c.is_ascii_uppercase() {
60            result.push('-');
61        }
62        result.push(c.to_ascii_lowercase());
63    }
64
65    result
66}
67
68#[must_use]
69pub fn pascal_to_snake(s: &str) -> String {
70    let mut result = String::new();
71
72    for (i, c) in s.chars().enumerate() {
73        if i > 0 && c.is_ascii_uppercase() {
74            result.push('_');
75        }
76        result.push(c.to_ascii_lowercase());
77    }
78
79    result
80}
81
82#[cfg(test)]
83mod tests {
84    #[test]
85    fn test_snake_to_camel() {
86        assert_eq!(super::snake_to_camel("hello_world"), "helloWorld");
87        assert_eq!(super::snake_to_camel("foo_bar_baz"), "fooBarBaz");
88        assert_eq!(super::snake_to_camel("foo"), "foo");
89        assert_eq!(super::snake_to_camel("foo_bar"), "fooBar");
90        assert_eq!(super::snake_to_camel("foo_bar_baz_qux"), "fooBarBazQux");
91    }
92
93    #[test]
94    fn test_snake_to_pascal() {
95        assert_eq!(super::snake_to_pascal("hello_world"), "HelloWorld");
96        assert_eq!(super::snake_to_pascal("foo_bar_baz"), "FooBarBaz");
97        assert_eq!(super::snake_to_pascal("foo"), "Foo");
98        assert_eq!(super::snake_to_pascal("foo_bar"), "FooBar");
99        assert_eq!(super::snake_to_pascal("foo_bar_baz_qux"), "FooBarBazQux");
100    }
101
102    #[test]
103    fn test_pascal_to_camel() {
104        assert_eq!(super::pascal_to_camel("HelloWorld"), "helloWorld");
105        assert_eq!(super::pascal_to_camel("FooBarBaz"), "fooBarBaz");
106        assert_eq!(super::pascal_to_camel("Foo"), "foo");
107        assert_eq!(super::pascal_to_camel("FooBar"), "fooBar");
108        assert_eq!(super::pascal_to_camel("FooBarBazQux"), "fooBarBazQux");
109    }
110
111    #[test]
112    fn test_pascal_to_kebab() {
113        assert_eq!(super::pascal_to_kebab("HelloWorld"), "hello-world");
114        assert_eq!(super::pascal_to_kebab("FooBarBaz"), "foo-bar-baz");
115        assert_eq!(super::pascal_to_kebab("Foo"), "foo");
116        assert_eq!(super::pascal_to_kebab("FooBar"), "foo-bar");
117        assert_eq!(super::pascal_to_kebab("FooBarBazQux"), "foo-bar-baz-qux");
118    }
119
120    #[test]
121    fn test_pascal_to_snake() {
122        assert_eq!(super::pascal_to_snake("HelloWorld"), "hello_world");
123        assert_eq!(super::pascal_to_snake("FooBarBaz"), "foo_bar_baz");
124        assert_eq!(super::pascal_to_snake("Foo"), "foo");
125        assert_eq!(super::pascal_to_snake("FooBar"), "foo_bar");
126        assert_eq!(super::pascal_to_snake("FooBarBazQux"), "foo_bar_baz_qux");
127    }
128}