grace_cli/core/case/
string.rs1use recase::ReCase;
2use regex::Regex;
3
4#[derive(PartialEq, Debug)]
6pub enum Case {
7 Alternating,
8 Snake,
9 Camel,
10 Kebab,
11 Dot,
12 Header,
13 Normal,
14 Original,
15 Pascal,
16 Path,
17 Sentence,
18 Title,
19 UpperSnake,
20 WindowsPath,
21}
22
23fn new_case<T>(string_to_recase: T) -> ReCase
24where
25 T: Into<String>,
26{
27 recase::ReCase::new(string_to_recase)
28}
29
30pub fn recase<T>(string_to_recase: T, into: Case) -> String
32where
33 T: Into<String>,
34{
35 let recase = new_case(string_to_recase);
36
37 match into {
38 Case::Alternating => recase.alternating_case(),
39 Case::Snake => recase.snake_case(),
40 Case::Camel => recase.camel_case(),
41 Case::Kebab => recase.kebab_case(),
42 Case::Dot => recase.dot_case(),
43 Case::Header => recase.header_case(),
44 Case::Normal => recase.normal_case(),
45 Case::Original => recase.original_case(),
46 Case::Pascal => recase.pascal_case(),
47 Case::Path => recase.path_case(),
48 Case::Sentence => recase.sentence_case(),
49 Case::Title => recase.title_case(),
50 Case::UpperSnake => recase.upper_snake_case(),
51 Case::WindowsPath => recase.windows_path_case(),
52 }
53}
54
55pub fn sanitize(str_to_sanitize: &str) -> String {
59 let pattern = r"[\(\)’@#<>+«»~&%^—,!\.\[\]{}\?:;`·']";
60 let regex = Regex::new(pattern).unwrap();
61 let replaced_text = regex.replace_all(str_to_sanitize, "");
62
63 replaced_text.to_string()
64}
65
66#[cfg(test)]
67mod tests {
68 use super::*;
69
70 #[test]
71 fn new_case_test() {
72 let test_string = "Example String";
73
74 let new_from_str = new_case(test_string);
75 let new_from_string = new_case(test_string.to_string());
76
77 assert!(new_from_str.original_case() == "Example String");
78 assert!(new_from_string.original_case() == "Example String");
79 }
80}