use wyrd_spec::request_id::RequestId;
pub const REQUEST_ID_HEADER: &str = "x-request-id";
#[must_use]
pub fn mint() -> RequestId {
let raw = uuid::Uuid::now_v7().to_string();
RequestId::parse(&raw)
.unwrap_or_else(|error| panic!("generated UUIDv7 did not validate as RequestId: {error}"))
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct RequestIdPropagation {
pub request_id: Option<RequestId>,
pub should_generate: bool,
}
#[must_use]
pub fn inspect_header(value: Option<&str>) -> RequestIdPropagation {
match value.and_then(|value| RequestId::parse(value).ok()) {
Some(request_id) => RequestIdPropagation {
request_id: Some(request_id),
should_generate: false,
},
None => RequestIdPropagation {
request_id: None,
should_generate: true,
},
}
}