cratestack-macros
Procedural macros for compile-time schema processing.
Overview
cratestack-macros provides the include_schema! and include_client_macro! macros that process .cstack files at compile time and generate typed Rust code.
Installation
The macros are re-exported through the main crate:
[]
= "0.2"
include_schema!
Generate delegates, routes, and client types from a schema:
use include_schema;
include_schema!;
// Generated:
// - cratestack_schema module with Model types, CreateInput, UpdateInput
// - cratestack_schema::CrateStack runtime builder
// - ModelDelegate implementations for each model
// - cratestack_schema::axum::model_router for Axum
// - cratestack_schema::client::Client for HTTP client
What gets generated
- Model structs:
User,Post, etc. withSerialize/Deserialize - Input structs:
CreateUserInput,UpdateUserInput - Selection builders:
User::select(),Post::include_selection() - Filter builders:
post::id().eq(...),post::author().email().like(...) - Delegates:
ModelDelegatefor CRUD operations - Axum router:
cratestack_schema::axum::model_router(...) - Client types: For
cratestack-client-rust
include_client_macro!
Generate only the client surface (useful for separate client packages):
use include_client_macro;
include_client_macro!;
// Generates a minimal cratestack_schema module with:
// - Model types
// - Client surface for HTTP requests
// - No server-side delegates
Generated Selectors
Field selectors for partial updates and projections:
// Projection
let selection = select
.id
.email
.include_posts;
// Filter expression
let filter = published.is_true
.and;
// Ordering
let order = createdAt.desc;
Decimal Backend
The macros respect workspace features:
[]
= ["decimal-rust-decimal"]
= ["cratestack-core/decimal-bigdecimal"]
Generated code uses cratestack::Decimal which resolves to the selected backend.
License
MIT