1pub mod audit;
13pub mod batch;
14pub mod codec;
15pub mod context;
16pub mod envelope;
17pub mod error;
18pub mod events;
19pub mod find_many;
20pub mod idempotency_record;
21pub mod json;
22pub mod page;
23pub mod projection;
24pub mod route_naming;
25pub mod rpc;
26pub mod rust_keywords;
27pub mod schema;
28pub mod store;
29pub mod transport;
30pub mod validators;
31pub mod value;
32
33#[cfg(not(feature = "decimal-rust-decimal"))]
42compile_error!("cratestack: enable the `decimal-rust-decimal` backend feature");
43
44#[cfg(feature = "decimal-rust-decimal")]
45pub type Decimal = rust_decimal::Decimal;
46
47pub type CoolBody = bytes::Bytes;
49
50pub use audit::{
54 AuditActor, AuditEvent, AuditOperation, AuditSink, MulticastAuditSink, NoopAuditSink,
55 TransactionIsolation,
56};
57pub use batch::{
58 BATCH_MAX_ITEMS, BatchItemError, BatchItemResult, BatchItemStatus, BatchRequest, BatchResponse,
59 BatchSummary, find_duplicate_position,
60};
61pub use codec::{CoolCodec, CoolEnvelope, NoEnvelope};
62pub use context::{
63 AuthProvider, CoolAuthIdentity, CoolContext, PrincipalContext, PrincipalFacet, RequestContext,
64};
65pub use envelope::{
66 HmacEnvelope, InMemoryNonceStore, KeyProvider, NonceStore, SealedEnvelope, StaticKeyProvider,
67};
68pub use error::{CoolError, CoolErrorResponse, DbErrorInfo, parse_cuid};
69pub use events::{
70 CoolEventBus, CoolEventEnvelope, CoolEventFuture, ModelEvent, ModelEventKind,
71 SubscriptionGuard, SubscriptionHandle, event_topic, parse_emit_attribute,
72};
73pub use find_many::FieldFilterInput;
74pub use idempotency_record::{IdempotencyRecord, ReservationOutcome};
75pub use json::Json;
76pub use page::{MAX_LIST_LIMIT, Page, PageInfo, PageInput};
77pub use projection::ProjectionDecoder;
78pub use schema::{
79 Attribute, AuthBlock, ConfigBlock, ConfigEntry, Datasource, EnumDecl, EnumVariant,
80 ExtensionKind, Field, MixinDecl, Model, OwnedSchemaSummary, ParsedIndexAttribute, Procedure,
81 ProcedureArg, ProcedureKind, Schema, SchemaSummary, SelectionQuery, SourceSpan, TransportStyle,
82 TypeArity, TypeDecl, TypeRef, View, ViewSource, parse_composite_id_attribute,
83 parse_composite_unique_attribute, parse_index_attribute,
84};
85pub use store::{IdempotencyStore, RateLimitConfig, RateLimitDecision, RateLimitStore};
86pub use transport::{
87 OpDescriptor, OpKind, RouteTransportCapabilities, RouteTransportDescriptor,
88 canonical_request_string,
89};
90pub use validators::{
91 validate_email, validate_iso4217, validate_length, validate_range_decimal, validate_range_i64,
92 validate_uri,
93};
94pub use value::Value;
95
96#[cfg(test)]
97mod tests {
98 use super::*;
99
100 #[test]
101 fn decimal_rust_decimal_is_available() {
102 let d = Decimal::from(42);
104 assert_eq!(d.to_string(), "42");
105 }
106
107 #[test]
108 fn decimal_type_serialization() {
109 let d1 = Decimal::from(10);
111 let d2 = Decimal::from(20);
112 let _ = d1 + d2;
114 }
115}