use crate::blueprint::constructor::{Constructor, RegisteredConstructor};
use crate::blueprint::Blueprint;
use crate::f;
use crate::http::HeaderValue;
use std::fmt::Formatter;
use uuid::Uuid;
#[derive(Debug, Clone, Copy, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct ServerRequestId(Uuid);
impl ServerRequestId {
pub fn generate() -> Self {
Self(Uuid::now_v7())
}
pub fn inner(&self) -> Uuid {
self.0
}
pub fn header_value(&self) -> HeaderValue {
format!("{self}").try_into().unwrap()
}
}
impl From<Uuid> for ServerRequestId {
fn from(value: Uuid) -> Self {
Self(value)
}
}
impl std::fmt::Display for ServerRequestId {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", &self.0)
}
}
impl ServerRequestId {
pub fn register(bp: &mut Blueprint) -> RegisteredConstructor {
Self::default_constructor().register(bp)
}
pub fn default_constructor() -> Constructor {
Constructor::request_scoped(f!(super::ServerRequestId::generate))
}
}