easy-sql 0.101.1

Macro-first SQL toolkit with compile-time checked queries, optional migrations on top of sqlx.
Documentation
#[cfg(all(feature = "postgres", not(feature = "sqlite")))]
use crate::drivers::postgres::{Database, Postgres as ExampleDriver};

#[cfg(all(feature = "sqlite", not(feature = "postgres")))]
use crate::drivers::sqlite::{Database, Sqlite as ExampleDriver};

use crate::{DatabaseSetup, Table};
use easy_macros::{add_code, always_context};

#[always_context(skip(!))]
#[no_context]
#[add_code(after = {
    Database::setup_for_testing::<DocSchema>().await?;
    assert_eq!(
        <DocUsers as Table<ExampleDriver>>::table_name(),
        "doc_users"
    );
    assert_eq!(
        <DocPosts as Table<ExampleDriver>>::table_name(),
        "doc_posts"
    );
    Ok(())
})]
#[docify::export_content]
#[allow(dead_code)]
async fn database_setup_basic_example() -> anyhow::Result<()> {
    #[derive(Table)]
    struct DocUsers {
        #[sql(primary_key)]
        id: i32,
        email: String,
    }

    #[derive(Table)]
    struct DocPosts {
        #[sql(primary_key)]
        id: i32,
        title: String,
    }

    #[derive(DatabaseSetup)]
    struct DocSchema {
        users: DocUsers,
        posts: DocPosts,
    }
}

#[always_context(skip(!))]
#[no_context]
#[add_code(after = {
    let db = Database::setup_for_testing::<UserTables>().await?;
    let mut conn = db.transaction().await?;
    ContentTables::setup(&mut &mut conn).await?;
    assert_eq!(
        <DocComments as Table<ExampleDriver>>::table_name(),
        "doc_comments"
    );
    Ok(())
})]
#[allow(dead_code)]
#[docify::export_content]
async fn database_setup_nested_example() -> anyhow::Result<()> {
    #[derive(Table)]
    struct DocUsers {
        #[sql(primary_key)]
        id: i32,
        name: String,
    }

    #[derive(Table)]
    struct DocPosts {
        #[sql(primary_key)]
        id: i32,
        #[sql(foreign_key = DocUsers, cascade)]
        user_id: i32,
        title: String,
    }

    #[derive(Table)]
    struct DocComments {
        #[sql(primary_key)]
        id: i32,
        #[sql(foreign_key = DocPosts, cascade)]
        post_id: i32,
        body: String,
    }

    #[derive(DatabaseSetup)]
    #[sql(drivers = ExampleDriver)]
    struct UserTables {
        users: DocUsers,
    }

    #[derive(DatabaseSetup)]
    struct ContentTables {
        posts: DocPosts,
        comments: DocComments,
    }
}

#[always_context(skip(!))]
#[no_context]
#[tokio::test]
async fn test_database_setup_basic_example() -> anyhow::Result<()> {
    database_setup_basic_example().await
}

#[always_context(skip(!))]
#[no_context]
#[tokio::test]
async fn test_database_setup_nested_example() -> anyhow::Result<()> {
    database_setup_nested_example().await
}