Skip to main content

radiate_utils/
fmt.rs

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}