Skip to main content

wae_https/middleware/
mod.rs

1#![doc = include_str!("readme.md")]
2
3mod compression;
4mod cors;
5mod request_id;
6mod tracing;
7
8pub use compression::{Compression, CompressionAlgorithm, CompressionBuilder, CompressionConfig};
9pub use cors::{CorsConfig, cors_permissive, cors_strict};
10pub use request_id::RequestIdLayer;
11pub use tracing::TracingLayer;
12
13pub use tower_http::cors::CorsLayer;
14
15/// 重新导出 tower-http 的常用中间件
16pub use tower_http::{
17    catch_panic::CatchPanicLayer, normalize_path::NormalizePathLayer, request_id::MakeRequestUuid,
18    set_header::SetRequestHeaderLayer, set_header::SetResponseHeaderLayer, timeout::TimeoutLayer,
19};
20
21use std::time::Duration;
22
23/// 超时中间件构建器
24pub struct TimeoutBuilder {
25    timeout: Duration,
26}
27
28impl TimeoutBuilder {
29    /// 创建新的超时构建器
30    pub fn new() -> Self {
31        Self { timeout: Duration::from_secs(30) }
32    }
33
34    /// 设置超时时间
35    pub fn timeout(mut self, timeout: Duration) -> Self {
36        self.timeout = timeout;
37        self
38    }
39
40    /// 构建超时中间件
41    pub fn build(self) -> TimeoutLayer {
42        TimeoutLayer::with_status_code(http::StatusCode::REQUEST_TIMEOUT, self.timeout)
43    }
44}
45
46impl Default for TimeoutBuilder {
47    fn default() -> Self {
48        Self::new()
49    }
50}
51
52/// 路径归一化配置
53pub struct NormalizePathConfig;
54
55impl NormalizePathConfig {
56    /// 创建默认的路径归一化中间件
57    pub fn new() -> NormalizePathLayer {
58        NormalizePathLayer::trim_trailing_slash()
59    }
60}