modo/middleware/compression.rs
1use tower_http::compression::CompressionLayer;
2
3/// Returns a compression layer that automatically compresses response bodies.
4///
5/// Supports gzip, deflate, brotli, and zstd, selected from the client's
6/// `Accept-Encoding` header. If the client offers no supported encoding
7/// the response body is passed through unchanged.
8///
9/// # Layer ordering
10///
11/// Install `compression()` **inside** [`tracing`](super::tracing) and
12/// [`request_id`](super::request_id) so the compressed bytes are never
13/// observed by those layers, but **outside** (i.e. wrapping) the handler
14/// so the handler always writes a plain body.
15///
16/// # Example
17///
18/// ```rust,no_run
19/// use axum::{Router, routing::get};
20/// use modo::middleware::compression;
21///
22/// let app: Router = Router::new()
23/// .route("/", get(|| async { "hello" }))
24/// .layer(compression());
25/// ```
26pub fn compression() -> CompressionLayer {
27 CompressionLayer::new()
28}