protobuf_parse/
case_convert.rs
1#[doc(hidden)]
4pub fn camel_case(input: &str) -> String {
5 let mut capitalize_next = true;
6 let mut result = String::new();
7 result.reserve(input.len());
8
9 for c in input.chars() {
10 if c == '_' {
11 capitalize_next = true;
12 } else if capitalize_next {
13 result.push(c.to_ascii_uppercase());
14 capitalize_next = false;
15 } else {
16 result.push(c);
17 }
18 }
19
20 result
21}
22
23#[doc(hidden)]
24pub fn snake_case(input: &str) -> String {
25 let mut result = String::new();
26
27 let mut last_lower = false;
28
29 for c in input.chars() {
30 if c.is_ascii_uppercase() && last_lower {
31 result.push('_');
32 }
33 result.push(c.to_ascii_lowercase());
34 last_lower = c.is_lowercase();
35 }
36
37 result
38}
39
40#[cfg(test)]
41mod test {
42 use super::*;
43
44 #[test]
45 fn test_camel_case() {
46 assert_eq!("FooBarBazQuxQUUX", camel_case("foo_barBaz_QuxQUUX"));
47 assert_eq!("FooBarBazQuxQUUX", camel_case("Foo_barBaz_QuxQUUX"));
48 }
49
50 #[test]
51 fn test_snake_case() {
52 assert_eq!("foo_bar_baz_qux_quux", snake_case("foo_barBaz_QuxQUUX"));
53 assert_eq!("foo_bar_baz_qux_quux", snake_case("Foo_barBaz_QuxQUUX"));
54 }
55}