Skip to main content

Crate raisfast_derive

Crate raisfast_derive 

Source
Expand description

§raisfast-derive

Proc-macro crate for the raisfast blog/CMS system.

Provides two categories of macros:

§1. Derive macros

  • #[derive(EventMeta)] — auto-generates name(), 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.

MacroSQL 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 WhereExprfetch_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 — parses schema.sqlite.sql + tenantable.sqlite.sql at compile time into a Schema struct. Used for table/column validation and for generating explicit column lists (replacing SELECT *).
  • 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 as crud_find! but uses fetch_all.
crud_find_one
crud_find_one!(...) — same as crud_find! but uses fetch_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§

EventMeta
Derive macro for event enums.