seedgen 0.3.0

Zero-config database seed data generator with deterministic, constraint-safe fake data
Documentation
pub mod queries;
pub mod schema;

use sqlx::PgPool;

pub use schema::{
    Column, Constraint, ConstraintKind, DataType, EnumType, ForeignKey, SchemaGraph, Table,
};

#[derive(Debug, thiserror::Error)]
pub enum IntrospectionError {
    #[error("failed to connect to database: {0}")]
    ConnectionFailed(sqlx::Error),

    #[error("query `{query}` failed: {source}")]
    QueryFailed {
        query: String,
        #[source]
        source: sqlx::Error,
    },
}

pub async fn introspect(pool: &PgPool) -> Result<SchemaGraph, IntrospectionError> {
    let mut tables = queries::query_tables(pool).await?;

    for table in &mut tables {
        table.columns = queries::query_columns(pool, &table.name).await?;
        table.constraints = queries::query_constraints(pool, &table.name).await?;
    }

    let foreign_keys = queries::query_foreign_keys(pool).await?;
    let enums = queries::query_enums(pool).await?;

    Ok(SchemaGraph {
        tables,
        foreign_keys,
        enums,
    })
}