api_tools/server/axum/layers/
request_id.rs

1//! Request ID middleware
2
3use axum::http::{HeaderName, Request};
4use std::sync::LazyLock;
5use tower_http::request_id::{MakeRequestId, RequestId};
6use uuid::Uuid;
7
8#[derive(Clone, Copy)]
9pub struct MakeRequestUuid;
10
11/// Request ID header
12pub static REQUEST_ID_HEADER: LazyLock<HeaderName> = LazyLock::new(|| HeaderName::from_static("x-request-id"));
13
14impl MakeRequestId for MakeRequestUuid {
15    fn make_request_id<B>(&mut self, _request: &Request<B>) -> Option<RequestId> {
16        let id = Uuid::new_v4().to_string().parse();
17        match id {
18            Ok(id) => Some(RequestId::new(id)),
19            _ => None,
20        }
21    }
22}