cratestack-core
Core types, traits, and error handling shared across the CrateStack framework.
Overview
cratestack-core provides the foundational types that all other CrateStack crates depend on:
- Error handling:
CoolErrorwith typed HTTP status codes - Auth context:
CoolContext,PrincipalContext,AuthProvider - Schema AST:
Schema,Model,Field,Procedure, etc. - Audit:
AuditEvent,AuditSink,AuditOperation - Signed envelope:
HmacEnvelopefor request authentication - Decimal: Selectable backend (
rust_decimalorbigdecimal) - Event bus:
CoolEventBusfor model lifecycle events
Installation
[]
= "0.2"
[]
= ["decimal-rust-decimal"]
Error Handling
CoolError provides typed HTTP errors with safe public messages:
use CoolError;
use StatusCode;
// 4xx - message is returned to clients
let err = BadRequest;
assert_eq!;
assert_eq!;
// 5xx - only canned message returned, detail logged
let err = Database;
assert_eq!; // safe for clients
let detail = err.detail; // "connection refused" - operator only
Auth Context
CoolContext carries the authenticated principal:
use ;
use HeaderMap;
// Anonymous context
let ctx = anonymous;
// Authenticated from principal
let ctx = from_principal;
// Access claims
assert_eq!;
assert_eq!;
AuthProvider Trait
Host applications implement AuthProvider to resolve auth from HTTP requests:
use ;
;
Schema AST
Parsed .cstack representation:
use Schema;
let schema: Schema = /* parsed from cratestack-parser */;
for model in &schema.models
Audit Events
Record model mutations for compliance:
use ;
use Utc;
let event = AuditEvent ;
Decimal Backend
Select at compile time:
[]
= ["decimal-rust-decimal"] # 128-bit fixed precision
# decimal-bigdecimal = ["cratestack-core/decimal-bigdecimal"] # arbitrary precision
use Decimal;
let amount: Decimal = "123.45".parse?;
Transaction Isolation
PostgreSQL isolation levels for procedures:
use TransactionIsolation;
let isolation = parse?;
assert_eq!;
License
MIT