orm_rs/methods/
table_name.rs

1use std::any::type_name;
2use inflector::{string::{demodulize, pluralize}, cases::snakecase};
3
4pub fn table_name<T>() -> String where T: ?Sized {
5    // eg: arel::UserTable
6    let full_namespace = type_name::<T>();
7    // eg: UserTable
8    let struct_name = demodulize::demodulize(&full_namespace);
9    // eg: user_table
10    let snake_struct_name = snakecase::to_snake_case(&struct_name);
11    // eg: user_tables
12    pluralize::to_plural(&snake_struct_name)
13}
14
15#[cfg(test)]
16mod tests {
17    use super::*;
18    #[test]
19    fn it_works() {
20        // User
21        struct User {}
22        assert_eq!(table_name::<User>(), "users");
23        // UserRole
24        struct UserRole {}
25        assert_eq!(table_name::<UserRole>(), "user_roles");
26    }
27}