gremlin-orm-macro 0.6.0

A lightweight, ORM for PostgreSQL, built on top of SQLx.
Documentation
use proc_macro2::TokenStream;

use crate::EntityCtx;

pub(crate) fn generate_stream(args: &EntityCtx) -> TokenStream {
    let ident = args.ident.clone();
    let table = args.table.clone();

    let columns = args.columns().collect::<Vec<_>>().join(", ");

    let query = if let Some(soft_delete) = &args.soft_delete {
        format!("SELECT {columns} FROM {table} WHERE {soft_delete} IS NULL")
    } else {
        format!("SELECT {columns} FROM {table}")
    };

    let stream = quote::quote! {
        impl ::gremlin_orm::StreamableEntity for #ident {
            fn stream<'a>(executor: impl ::sqlx::PgExecutor<'a> + 'a) -> impl ::gremlin_orm::Stream<Item = Result<Self, ::sqlx::Error>> {
                ::sqlx::query_as!(Self, #query).fetch::<'_, 'a>(executor)
            }
        }
    };

    stream
}