rust_orm_gen 0.2.0

A comprehensive Rust ORM generator with schema visualization, real-time monitoring, and multiple output formats
Documentation
use tokio_postgres::Client;
use crate::error::OrmError;

pub async fn get_tables(client: &Client) -> Result<Vec<String>, OrmError> {
    let rows = client
        .query("SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'", &[])
        .await?;
    Ok(rows.iter().map(|row| row.get(0)).collect())
}

pub async fn get_columns(client: &Client, table_name: &str) -> Result<Vec<(String, String)>, OrmError> {
    let query = format!(
        "SELECT column_name, data_type FROM information_schema.columns WHERE table_name = $1"
    );
    let rows = client.query(&query, &[&table_name]).await?;
    Ok(rows.iter().map(|row| (row.get(0), row.get(1))).collect())
}

#[cfg(test)]
mod tests {
    use super::*;
    use tokio;
    use dotenv::dotenv;
    use std::env;
    use crate::db::PostgresConnectionManager;

    #[tokio::test]
    async fn test_get_tables() {
        dotenv().ok();
        let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");
        let manager = PostgresConnectionManager::new(database_url);
        let client = manager.connect().await.expect("Failed to connect to database");

        let tables = get_tables(&client).await;
        assert!(tables.is_ok(), "Failed to get tables: {:?}", tables.err());
    }

    #[tokio::test]
    async fn test_get_columns() {
        dotenv().ok();
        let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");
        let manager = PostgresConnectionManager::new(database_url);
        let client = manager.connect().await.expect("Failed to connect to database");

        let columns = get_columns(&client, "your_table_name").await;
        assert!(columns.is_ok(), "Failed to get columns: {:?}", columns.err());
    }
}