use-database 0.1.0

Feature-gated facade crate for RustUse database primitives
Documentation
use use_database::{
    ColumnName, DatabaseName, ForeignKey, KeyColumn, PageRequest, PrimaryKey, SchemaName,
    SortDirection, TransactionIsolation, prelude::*,
};

#[test]
fn facade_root_reexports_common_database_workflow() -> Result<(), Box<dyn std::error::Error>> {
    let database = DatabaseName::new("app")?;
    let schema = SchemaName::new("public")?;
    let table = TableName::new("users")?;
    let column = ColumnName::new("id")?;

    let primary_key = PrimaryKey::new(table.clone(), column.clone());
    let foreign_key = ForeignKey::from_columns(
        TableName::new("posts")?,
        ColumnName::new("user_id")?,
        table.clone(),
        column.clone(),
    );
    let page = PageRequest::new(1, 50);
    let isolation = TransactionIsolation::Serializable;

    assert_eq!(database.as_str(), "app");
    assert_eq!(schema.as_str(), "public");
    assert_eq!(primary_key.table(), &table);
    assert_eq!(foreign_key.target().column(), &column);
    assert_eq!(page.per_page(), 50);
    assert_eq!(SortDirection::Ascending.as_str(), "ascending");
    assert_eq!(isolation.as_str(), "serializable");

    Ok(())
}

#[test]
fn facade_namespaces_and_prelude_are_available() -> Result<(), Box<dyn std::error::Error>> {
    let table = use_database::name::TableName::new("users")?;
    let column = use_database::name::ColumnName::new("id")?;
    let key_column = KeyColumn::new(column.clone()).with_table(table.clone());
    let prelude_table: TableName = table;

    assert_eq!(use_database::query::PageRequest::new(2, 25).page(), 2);
    assert_eq!(key_column.table().expect("table"), &prelude_table);
    assert_eq!(column.as_str(), "id");

    Ok(())
}