pub fn to_snake_case(s: &str) -> String {
let mut out = String::new();
for (i, ch) in s.chars().enumerate() {
if ch.is_uppercase() && i > 0 {
out.push('_');
}
out.push(ch.to_lowercase().next().unwrap());
}
out
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_snake_case() {
assert_eq!(to_snake_case("User"), "user");
assert_eq!(to_snake_case("UserProfile"), "user_profile");
assert_eq!(to_snake_case("HTTPSRequest"), "h_t_t_p_s_request");
assert_eq!(to_snake_case("Article"), "article");
}
}