fen_parser/codegen/
name_transforms.rs1#[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}