pub(crate) fn to_pascal_case(s: &str) -> String {
s.split('_')
.map(|word| {
let mut chars = word.chars();
match chars.next() {
None => String::new(),
Some(first) => {
first.to_uppercase().collect::<String>() + &chars.as_str().to_lowercase()
}
}
})
.collect()
}
pub(crate) fn to_snake_case(s: &str) -> String {
let mut result = String::new();
let mut chars = s.chars().peekable();
while let Some(ch) = chars.next() {
if ch.is_uppercase() && !result.is_empty() {
if let Some(&next_ch) = chars.peek() {
if next_ch.is_lowercase() {
result.push('_');
}
}
}
result.push(ch.to_lowercase().next().unwrap_or(ch));
}
result
}