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].