scsys_util/str/
impl_alloc.rs1use alloc::string::{String, ToString};
6use core::str::Chars;
7
8pub fn fnl_remove(data: impl ToString) -> String {
10 let data = data.to_string();
11 let mut chars = data.chars();
12 chars.next();
13 chars.next_back();
14 chars.as_str().to_string()
15}
16pub fn to_camelcase<T: AsRef<str>>(s: T) -> String {
18 fn _camelcase<'a>(mut chars: Chars<'a>) -> String {
19 chars
20 .clone()
21 .enumerate()
22 .fold(String::new(), |mut acc, (i, c)| {
23 match i {
24 0 => acc.push(c.to_lowercase().next().unwrap()),
25 _ => {
26 if c == '_' {
27 if let Some(next) = chars.next() {
29 acc.push(next.to_uppercase().next().unwrap());
30 }
31 } else {
32 acc.push(c);
33 }
34 }
35 }
36 acc
37 })
38 }
39 _camelcase(s.as_ref().chars())
40}
41pub fn to_pascalcase<T: AsRef<str>>(s: T) -> String {
43 fn _pascalcase<'a>(chars: Chars<'a>) -> String {
44 chars.enumerate().fold(String::new(), |mut acc, (i, c)| {
45 match i {
46 0 => acc.push(c.to_uppercase().next().unwrap()),
47 _ => {
48 if c.is_uppercase() {
49 acc.push(c.to_lowercase().next().unwrap());
50 } else {
51 acc.push(c);
52 }
53 }
54 }
55 acc
56 })
57 }
58
59 _pascalcase(s.as_ref().chars())
60}
61pub fn to_kebabcase<T: AsRef<str>>(s: T) -> String {
63 fn _kebabcase<'a>(chars: Chars<'a>) -> String {
64 chars
65 .fold(String::new(), |mut acc, c| {
66 if c.is_uppercase() {
67 if !acc.is_empty() {
68 acc.push('-');
69 }
70 acc.push(c.to_lowercase().next().unwrap());
71 } else {
72 acc.push(c);
73 }
74 acc
75 })
76 .to_lowercase()
77 }
78 _kebabcase(s.as_ref().chars())
79}
80pub fn to_snakecase<T: AsRef<str>>(s: T) -> String {
82 fn _snakecase<'a>(chars: Chars<'a>) -> String {
83 chars
84 .fold(String::new(), |mut acc, c| {
85 if c.is_uppercase() {
86 if !acc.is_empty() {
87 acc.push('_');
88 }
89 acc.push(c.to_lowercase().next().unwrap());
90 } else {
91 acc.push(c);
92 }
93 acc
94 })
95 .to_lowercase()
96 }
97 _snakecase(s.as_ref().chars())
98}
99pub fn to_screaming_snakecase<T: AsRef<str>>(s: T) -> String {
101 fn _screaming_snakecase<'a>(chars: Chars<'a>) -> String {
102 chars.fold(String::new(), |mut acc, c| {
103 if c.is_uppercase() {
104 if !acc.is_empty() {
105 acc.push('_');
106 }
107 acc.push(c);
108 } else {
109 acc.push(c.to_uppercase().next().unwrap());
110 }
111 acc
112 })
113 }
114 _screaming_snakecase(s.as_ref().chars())
115}