tokio::task_local! {
pub static TRACEPARENT: Option<String>;
}
#[must_use]
pub fn current() -> Option<String> {
TRACEPARENT
.try_with(std::clone::Clone::clone)
.ok()
.flatten()
}
#[cfg(test)]
mod tests {
#[tokio::test]
async fn outbox_message_captures_scoped_traceparent() {
use crate::ids::{ConversationId, CorrelationId, EventId, ProcessId, StreamId, TenantId};
use crate::outbox::OutboxMessage;
let mk = || {
let tenant = TenantId::from_party_id("9900000000001");
let process = ProcessId::new();
OutboxMessage::new(
StreamId::for_process(tenant, &process),
process,
tenant,
CorrelationId::new(),
ConversationId::new(),
EventId::new(),
"APERAK",
"9900000000002",
serde_json::json!({}),
)
};
let tp = "00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01";
let inside = super::TRACEPARENT
.scope(Some(tp.to_owned()), async { mk() })
.await;
assert_eq!(inside.trace_context.as_deref(), Some(tp));
let outside = mk();
assert_eq!(outside.trace_context, None);
}
}