rango-orm-derive 0.2.0

#[derive(Model)] proc-macro for Rango ORM
Documentation
/// Convert CamelCase to snake_case.
/// e.g. `UserProfile` → `user_profile`
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");
    }
}