diff options
Diffstat (limited to 'crates/warden/src/server/middleware.rs')
-rw-r--r-- | crates/warden/src/server/middleware.rs | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/crates/warden/src/server/middleware.rs b/crates/warden/src/server/middleware.rs new file mode 100644 index 0000000..2118fcf --- /dev/null +++ b/crates/warden/src/server/middleware.rs @@ -0,0 +1,22 @@ +mod metrics; +mod trace_layer; + +pub use metrics::*; +pub use trace_layer::*; + +use axum::{Router, http::HeaderName, middleware}; +use tower_http::request_id::{MakeRequestUuid, PropagateRequestIdLayer, SetRequestIdLayer}; + +use crate::server::middleware::apply_metrics_middleware; + +pub const REQUEST_ID_HEADER: &str = "x-request-id"; + +pub fn apply<T: Clone + Send + Sync + 'static>(router: Router<T>) -> Router<T> { + let x_request_id = HeaderName::from_static(REQUEST_ID_HEADER); + + let router = router.layer(PropagateRequestIdLayer::new(x_request_id.clone())); + + apply_trace_context_middleware(router) + .layer(SetRequestIdLayer::new(x_request_id, MakeRequestUuid)) + .route_layer(middleware::from_fn(apply_metrics_middleware)) +} |