arcature 2026.2.1

Arcature application framework: a high-level Application facade over the certified Arcature subsystems, with the low-level Axum/Tower escape hatch preserved.
Documentation
//! Routing primitives re-exported through the Arcature facade.
//!
//! Normal application code routes through [`Routes`] (the certified Axum
//! router re-exported under the Arcature name) and the routing functions
//! below, so it never needs a direct `axum` import:
//!
//! ```
//! use arcature::prelude::*;
//!
//! # fn _r() -> Routes {
//! Routes::new().route("/", get(|| async { "ok" }))
//! # }
//! ```
//!
//! Expert code may still reach the raw types via [`crate::axum`].
//!
//! [`Routes`] is a re-export of [`axum::Router`] (not a wrapper): Arcature
//! does not implement a second router (engine spec §20). The re-export
//! preserves the upstream default `S = ()`, so `Routes::new()` infers the
//! stateless app just like `Router::new()`.

// `Routes<S>` is the certified `axum::Router`, re-exported under the Arcature
// name. The re-export (not a type alias) preserves `Router`'s built-in default
// type parameter `S = ()`, so `Routes::new()` resolves to `Router<()>` when the
// handler does not constrain `S` — exactly like the upstream `Router::new()`.
// A type alias would lose this default because alias defaults do not propagate
// to inherent methods.
pub use axum::Router as Routes;

// The Axum method-routing constructors, re-exported so normal code never
// names `axum::` directly. These are the canonical upstream functions,
// forwarded verbatim.
pub use axum::routing::{any, delete, get, head, options, patch, post, put};

// `from_fn` lets an application author Tower-style middleware against the
// matched request/response without a direct `axum::middleware` import. It is
// the same upstream adapter, forwarded.
pub use axum::middleware::from_fn;