buup/transformers/
snake_to_camel.rs1use crate::{Transform, TransformError, TransformerCategory};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
5pub struct SnakeToCamel;
6
7pub const DEFAULT_TEST_INPUT: &str = "my_variable_name";
9
10impl Transform for SnakeToCamel {
11 fn name(&self) -> &'static str {
12 "Snake Case to CamelCase"
13 }
14
15 fn id(&self) -> &'static str {
16 "snaketocamel"
17 }
18
19 fn description(&self) -> &'static str {
20 "Converts snake_case to camelCase"
21 }
22
23 fn category(&self) -> TransformerCategory {
24 TransformerCategory::Other
25 }
26
27 fn transform(&self, input: &str) -> Result<String, TransformError> {
28 if input.is_empty() {
29 return Ok(String::new());
30 }
31
32 let mut result = String::with_capacity(input.len());
33 let mut capitalize_next = false;
34
35 for (i, c) in input.chars().enumerate() {
36 if c == '_' {
37 capitalize_next = true;
38 } else if capitalize_next {
39 result.push(c.to_ascii_uppercase());
40 capitalize_next = false;
41 } else if i == 0 {
42 result.push(c.to_ascii_lowercase());
43 } else {
44 result.push(c);
45 }
46 }
47
48 Ok(result)
49 }
50
51 fn default_test_input(&self) -> &'static str {
52 "convert_this_snake_case_string"
53 }
54}
55
56#[cfg(test)]
57mod tests {
58 use super::*;
59
60 #[test]
61 fn test_snake_to_camel() {
62 let transformer = SnakeToCamel;
63
64 assert_eq!(
66 transformer.transform(DEFAULT_TEST_INPUT).unwrap(),
67 "myVariableName"
68 );
69
70 assert_eq!(transformer.transform("hello_world").unwrap(), "helloWorld");
72 assert_eq!(
73 transformer
74 .transform("this_is_a_snake_case_string")
75 .unwrap(),
76 "thisIsASnakeCaseString"
77 );
78
79 assert_eq!(transformer.transform("").unwrap(), "");
81
82 assert_eq!(transformer.transform("hello").unwrap(), "hello");
84
85 assert_eq!(transformer.transform("get_2_items").unwrap(), "get2Items");
87 assert_eq!(
88 transformer.transform("find_item_42_in_list").unwrap(),
89 "findItem42InList"
90 );
91
92 assert_eq!(transformer.transform("hello__world").unwrap(), "helloWorld");
94
95 assert_eq!(transformer.transform("hello_").unwrap(), "hello");
97
98 assert_eq!(transformer.transform("_hello").unwrap(), "Hello");
100 }
101}