diff --git a/tracing/src/span.rs b/tracing/src/span.rs index 18fe79b5c6..1053d2f8ae 100644 --- a/tracing/src/span.rs +++ b/tracing/src/span.rs @@ -1318,6 +1318,18 @@ impl From for Option { } } +impl<'a> From<&'a EnteredSpan> for Option<&'a Id> { + fn from(span: &'a EnteredSpan) -> Self { + span.inner.as_ref().map(|inner| &inner.id) + } +} + +impl<'a> From<&'a EnteredSpan> for Option { + fn from(span: &'a EnteredSpan) -> Self { + span.inner.as_ref().map(Inner::id) + } +} + impl Drop for Span { fn drop(&mut self) { if let Some(Inner { @@ -1403,6 +1415,11 @@ impl Clone for Inner { // ===== impl Entered ===== impl EnteredSpan { + /// Returns this span's `Id`, if it is enabled. + pub fn id(&self) -> Option { + self.inner.as_ref().map(Inner::id) + } + /// Exits this span, returning the underlying [`Span`]. #[inline] pub fn exit(mut self) -> Span { @@ -1454,6 +1471,7 @@ impl Drop for EnteredSpan { struct PhantomNotSend { ghost: PhantomData<*mut ()>, } + #[allow(non_upper_case_globals)] const PhantomNotSend: PhantomNotSend = PhantomNotSend { ghost: PhantomData };