Expand description
§raisfast-derive
Proc-macro crate for the raisfast blog/CMS system.
Provides two categories of macros:
§1. Derive macros
#[derive(EventMeta)]— auto-generatesname(),display_name(),table()methods on event enums, with per-variant#[event(table = "...", name = "...", dynamic)]attributes.
§2. Attribute macros
#[aspect_service(entity = "...", model = Type)]— generates a service struct with before/after hooks that delegate to the aspect engine, and auto-emits domain events.
§3. Bang macros (SQL CRUD helpers)
All macros use optional tenant: expr named section for tenant filtering.
When provided, the SQL includes AND tenant_id = ? at runtime.
| Macro | SQL operation |
|---|---|
crud_delete! | DELETE FROM ... WHERE WhereExpr |
crud_insert! | INSERT INTO ... (...) VALUES (...) |
crud_scalar! | SELECT scalar ... |
crud_query! | SELECT ... via query_as |
crud_find! | SELECT cols FROM ... WHERE WhereExpr → fetch_optional |
crud_find_one! | same → fetch_one |
crud_find_all! | same → fetch_all |
crud_list! | SELECT cols FROM ... → fetch_all (no WHERE) |
crud_update! | UPDATE ... SET ... WHERE WhereExpr |
crud_count! | SELECT COUNT(*) FROM ... WHERE WhereExpr |
crud_exists! | SELECT EXISTS(SELECT 1 ... WHERE WhereExpr) |
crud_query_paged! | paginated data + COUNT |
crud_join_paged! | paginated JOIN + COUNT |
crud_resolve_id! | SELECT id FROM table WHERE id = ? → Option<i64> |
crud_resolve_ids! | SELECT id FROM table WHERE id IN (...) → Vec<i64> (validates all exist) |
§Schema validation
check_schema!("table", "col1", "col2", ...)— compile-time validation only; expands to nothing. Emits a compile error if the table or any column is missing.
§Architecture notes
schema.rs— parsesschema.sqlite.sql+tenantable.sqlite.sqlat compile time into aSchemastruct. Used for table/column validation and for generating explicit column lists (replacingSELECT *).crud.rs— all CRUD macro implementations + input parsing structs.event_meta.rs—#[derive(EventMeta)].aspect_service.rs—#[aspect_service].
Macros§
- check_
schema check_schema!("table", "col1", "col2", ...)- crud_
count crud_count!(pool, "table", where: WhereExpr [, tenant: expr])- crud_
delete crud_delete!(pool, "table", where: WhereExpr [, tenant: expr])- crud_
exists crud_exists!(pool, "table", where: WhereExpr [, tenant: expr])- crud_
find crud_find!(pool, "table", Type, where: WhereExpr [, tenant: expr, order_by: "expr"])- crud_
find_ all crud_find_all!(...)— same ascrud_find!but usesfetch_all.- crud_
find_ one crud_find_one!(...)— same ascrud_find!but usesfetch_one.- crud_
insert crud_insert!(pool, "table", ["col1" => val1, "col2" => val2] [, tenant: expr])- crud_
join crud_join!(pool, Type, select: [...], from: "...", joins: [...], where: WhereExpr [, tenant: expr, method: fetch_all, order_by: "...", limit: expr, offset: expr])- crud_
join_ paged crud_join_paged!(pool, Type, select: [...], from: "...", joins: [...], tenant_alias: "...", tenant: tid, order_by: "...", page: page, page_size: page_size)- crud_
list crud_list!(pool, "table", Type)- crud_
query crud_query!(pool, Type, sql, [vals], method [, tenant: expr])- crud_
query_ paged crud_query_paged!(pool, Type, data_sql: "...", count_sql: "...", binds: [...], where: ["col" => opt_val, ...], tenant: tid, page: page, page_size: page_size)- crud_
resolve_ id crud_resolve_id!(pool, table, id [, tenant: expr])- crud_
resolve_ ids crud_resolve_ids!(pool, table, ids)- crud_
scalar crud_scalar!(pool, Type, sql, [vals], method [, tenant: expr])- crud_
select crud_select!(pool, "table", ["col1", "col2"], where: WhereExpr [, tenant: expr])- crud_
update crud_update!(pool, "table", bind: [...], optional: [...], raw: [...], where: WhereExpr [, tenant: tid])- crud_
upsert crud_upsert!(pool, "table", key: ["conflict_col"], bind: ["col" => val, ...], update: ["col1", "col2"] [, tenant: expr])
Attribute Macros§
- aspect_
service #[aspect_service(entity = "posts", model = Post)]
Derive Macros§
- Event
Meta - Derive macro for event enums.