zvariant_utils/
case.rs
1pub fn pascal_or_camel_case(s: &str, is_pascal_case: bool) -> String {
7 let mut result = String::new();
8 let mut capitalize = is_pascal_case;
9 let mut first = true;
10 for ch in s.chars() {
11 if ch == '_' || ch == '-' {
12 capitalize = true;
13 } else if capitalize {
14 result.push(ch.to_ascii_uppercase());
15 capitalize = false;
16 } else if first && !is_pascal_case {
17 result.push(ch.to_ascii_lowercase());
18 } else {
19 result.push(ch);
20 }
21
22 if first {
23 first = false;
24 }
25 }
26 result
27}
28
29pub fn snake_or_kebab_case(s: &str, is_snake_case: bool) -> String {
33 let mut result = String::new();
34 for ch in s.chars() {
35 if ch.is_ascii_uppercase() && !result.is_empty() {
36 if is_snake_case {
37 result.push('_');
38 } else {
39 result.push('-');
40 }
41 };
42
43 if ch == '_' || ch == '-' {
44 if is_snake_case {
45 result.push('_');
46 } else {
47 result.push('-');
48 }
49 } else {
50 result.push(ch.to_ascii_lowercase());
51 }
52 }
53 result
54}
55
56#[cfg(test)]
57mod tests {
58 use super::*;
59
60 #[test]
61 fn test_pascal_case() {
62 assert_eq!("FooBar", pascal_or_camel_case("foo_bar", true));
63 assert_eq!("FooBar", pascal_or_camel_case("fooBar", true));
64 assert_eq!("FooBar", pascal_or_camel_case("foo-bar", true));
65 assert_eq!("FooBar", pascal_or_camel_case("FooBar", true));
66 }
67
68 #[test]
69 fn test_camel_case() {
70 assert_eq!("fooBar", pascal_or_camel_case("foo_bar", false));
71 assert_eq!("fooBar", pascal_or_camel_case("fooBar", false));
72 assert_eq!("fooBar", pascal_or_camel_case("foo-bar", false));
73 assert_eq!("fooBar", pascal_or_camel_case("FooBar", false));
74 }
75
76 #[test]
77 fn test_snake_case() {
78 assert_eq!("foo_bar", snake_or_kebab_case("foo_bar", true));
79 assert_eq!("foo_bar", snake_or_kebab_case("fooBar", true));
80 assert_eq!("foo_bar", snake_or_kebab_case("foo-bar", true));
81 assert_eq!("foo_bar", snake_or_kebab_case("FooBar", true));
82 }
83
84 #[test]
85 fn test_kebab_case() {
86 assert_eq!("foo-bar", snake_or_kebab_case("foo_bar", false));
87 assert_eq!("foo-bar", snake_or_kebab_case("fooBar", false));
88 assert_eq!("foo-bar", snake_or_kebab_case("foo-bar", false));
89 assert_eq!("foo-bar", snake_or_kebab_case("FooBar", false));
90 }
91}