#![doc = include_str!("readme.md")]
mod compression;
mod cors;
mod request_id;
mod tracing;
pub use compression::{Compression, CompressionAlgorithm, CompressionBuilder, CompressionConfig};
pub use cors::{CorsConfig, cors_permissive, cors_strict};
pub use request_id::RequestIdLayer;
pub use tracing::TracingLayer;
pub use tower_http::cors::CorsLayer;
pub use tower_http::{
catch_panic::CatchPanicLayer, normalize_path::NormalizePathLayer, request_id::MakeRequestUuid,
set_header::SetRequestHeaderLayer, set_header::SetResponseHeaderLayer, timeout::TimeoutLayer,
};
use std::time::Duration;
pub struct TimeoutBuilder {
timeout: Duration,
}
impl TimeoutBuilder {
pub fn new() -> Self {
Self { timeout: Duration::from_secs(30) }
}
pub fn timeout(mut self, timeout: Duration) -> Self {
self.timeout = timeout;
self
}
pub fn build(self) -> TimeoutLayer {
TimeoutLayer::with_status_code(http::StatusCode::REQUEST_TIMEOUT, self.timeout)
}
}
impl Default for TimeoutBuilder {
fn default() -> Self {
Self::new()
}
}
pub struct NormalizePathConfig;
impl NormalizePathConfig {
#[allow(clippy::new_ret_no_self)]
pub fn new() -> NormalizePathLayer {
NormalizePathLayer::trim_trailing_slash()
}
}