Skip to main content

cratestack_axum/
lib.rs

1//! Axum-bound runtime helpers for cratestack.
2//!
3//! The crate is organized into themed modules; see each for details:
4//!
5//! - [`codec`]: codec-bound encode/decode and the [`CodecSet`] pairing.
6//! - [`transport`]: the [`HttpTransport`] trait and the
7//!   `encode_transport_*` response family.
8//! - [`headers`]: request-header helpers (ETag, traceparent, client IP).
9//! - [`query`]: URL query parsing and the filter expression grammar.
10//! - [`rpc`]: the RPC binding (`POST /rpc/{op_id}` and
11//!   `POST /rpc/batch`).
12//! - [`idempotency`]: idempotency-key middleware and storage trait.
13//! - [`ratelimit`]: token-bucket rate-limit middleware and storage trait.
14
15pub use axum;
16
17pub mod codec;
18pub mod headers;
19pub mod idempotency;
20pub mod query;
21pub mod ratelimit;
22pub mod rpc;
23pub mod transport;
24
25// -----------------------------------------------------------------------------
26// Crate-root re-exports — every item the `cratestack-macros` crate references
27// from `cratestack_axum::*` must remain importable from the crate root. The
28// list below is explicit (not `pub use module::*;`) so the public surface is
29// greppable from this file.
30// -----------------------------------------------------------------------------
31
32pub use codec::{
33    CodecSet, decode_codec_request, encode_codec_response, encode_codec_result,
34    encode_codec_result_with_status, validate_codec_request_headers,
35    validate_codec_response_headers,
36};
37
38pub use transport::{
39    CBOR_SEQUENCE_CONTENT_TYPE, HttpTransport, decode_transport_request_for,
40    encode_transport_result, encode_transport_result_with_status,
41    encode_transport_result_with_status_for, encode_transport_sequence_result,
42    encode_transport_sequence_result_with_status, encode_transport_sequence_result_with_status_for,
43    validate_transport_request_headers, validate_transport_request_headers_for,
44    validate_transport_response_headers, validate_transport_response_headers_for,
45};
46
47pub use headers::{
48    enrich_context_from_headers, parse_client_ip, parse_if_match_version, parse_traceparent,
49    set_version_etag,
50};
51
52pub use query::{QueryExpr, parse_filter_expression, parse_query_pairs};