headless_lms_server/domain/
request_id.rs1use actix_http::HttpMessage;
2use actix_web::FromRequest;
3
4use crate::prelude::*;
5use std::{
6 convert::Infallible,
7 future::{Ready, ready},
8};
9
10#[derive(Debug, Clone, Copy, Serialize)]
13#[cfg_attr(feature = "ts_rs", derive(TS))]
14pub struct RequestId(pub Uuid);
15
16impl FromRequest for RequestId {
17 type Error = Infallible;
18 type Future = Ready<Result<Self, Self::Error>>;
19
20 fn from_request(
21 req: &actix_web::HttpRequest,
22 _payload: &mut actix_http::Payload,
23 ) -> Self::Future {
24 let id = req.extensions().get::<Self>().copied().unwrap_or_else(|| {
25 let new_id = RequestId(Uuid::new_v4());
26 req.extensions_mut().insert(new_id);
27 new_id
28 });
29 ready(Ok(id))
30 }
31}