From 1fc27ff203c796773a130e8588151fb852c91da5 Mon Sep 17 00:00:00 2001 From: CAD97 Date: Thu, 17 Mar 2022 22:05:45 -0500 Subject: [PATCH] Add valuable capture to __tracing_capture_value! --- tracing/src/lib.rs | 42 ++++++++++++++++++++++++++++++++++++++++-- tracing/src/macros.rs | 28 ++-------------------------- 2 files changed, 42 insertions(+), 28 deletions(-) diff --git a/tracing/src/lib.rs b/tracing/src/lib.rs index 7cf47999c8..e7332020ad 100644 --- a/tracing/src/lib.rs +++ b/tracing/src/lib.rs @@ -964,8 +964,7 @@ pub use self::span::Span; pub use tracing_attributes::instrument; #[macro_use] -#[doc(hidden)] -pub mod macros; +mod macros; pub mod collect; pub mod dispatch; @@ -1110,6 +1109,45 @@ pub mod __macro_support { .finish() } } + + pub mod __tracing_capture_value_by { + // autoref specialization level 0 + #[cfg(all(tracing_unstable, feature = "valuable"))] + pub trait TracingCaptureValueByValuable { + fn __tracing_capture_value(&self) -> &dyn crate::field::Value; + } + + #[cfg(all(tracing_unstable, feature = "valuable"))] + impl TracingCaptureValueByValuable for T { + fn __tracing_capture_value(&self) -> valuable::Value<'_> { + crate::field::valuable(self) + } + } + + // autoref specialization level 1 + #[cfg(not(all(tracing_unstable, feature = "valuable")))] + pub trait TracingCaptureValueByValue { + fn __tracing_capture_value(&self) -> &dyn crate::field::Value; + } + + #[cfg(not(all(tracing_unstable, feature = "valuable")))] + impl TracingCaptureValueByValue for &T { + fn __tracing_capture_value(&self) -> &dyn crate::field::Value { + self + } + } + + // autoref specialization level 2 + pub trait TracingCaptureValueByDebug { + fn __tracing_capture_value(&self) -> &dyn crate::field::Value; + } + + impl TracingCaptureValueByDebug for &&T { + fn __tracing_capture_value(&self) -> &dyn crate::field::Value { + crate::field::debug_ref(self) + } + } + } } mod sealed { diff --git a/tracing/src/macros.rs b/tracing/src/macros.rs index 78ec1e06b3..6df8633712 100644 --- a/tracing/src/macros.rs +++ b/tracing/src/macros.rs @@ -2134,37 +2134,13 @@ macro_rules! fieldset { } -// autoref specialization level 0 -#[doc(hidden)] -pub trait TracingCaptureValueByValue { - fn __tracing_capture_value(&self) -> &dyn crate::field::Value; -} - -impl TracingCaptureValueByValue for T { - fn __tracing_capture_value(&self) -> &dyn crate::field::Value { - self - } -} - -// autoref specialization level 1 -#[doc(hidden)] -pub trait TracingCaptureValueByDebug { - fn __tracing_capture_value(&self) -> &dyn crate::field::Value; -} - -impl TracingCaptureValueByDebug for &T { - fn __tracing_capture_value(&self) -> &dyn crate::field::Value { - crate::field::debug_ref(self) - } -} - #[doc(hidden)] #[macro_export] macro_rules! __tracing_capture_value { ($e:expr) => {{ #[allow(unused_imports)] - use $crate::macros::{TracingCaptureValueByDebug, TracingCaptureValueByValue}; - (&$e).__tracing_capture_value() + use $crate::__macro_support::__tracing_capture_value_by::*; + (&&$e).__tracing_capture_value() }}; }