1use crate::intern;
2
3#[inline]
4pub fn intern_name_as_snake_case(name: &'static str) -> &'static str {
5 crate::intern_snake_case!(name)
6}
7
8pub trait ToSnakeCase<O> {
9 fn to_snake_case(&self) -> O;
10}
11
12impl ToSnakeCase<String> for &'_ str {
13 fn to_snake_case(&self) -> String {
14 let mut snake_case = String::new();
15 for (i, c) in self.chars().enumerate() {
16 if c.is_uppercase() {
17 if i != 0 {
18 snake_case.push('_');
19 }
20 for lower_c in c.to_lowercase() {
21 snake_case.push(lower_c);
22 }
23 } else {
24 snake_case.push(c);
25 }
26 }
27 snake_case
28 }
29}
30
31impl ToSnakeCase<String> for String {
32 fn to_snake_case(&self) -> String {
33 let mut snake_case = String::new();
34 for (i, c) in self.chars().enumerate() {
35 if c.is_uppercase() {
36 if i != 0 {
37 snake_case.push('_');
38 }
39 for lower_c in c.to_lowercase() {
40 snake_case.push(lower_c);
41 }
42 } else {
43 snake_case.push(c);
44 }
45 }
46 snake_case
47 }
48}