From 5eaa4fe1d3bfcda696122ba3d6b4914dba19ef96 Mon Sep 17 00:00:00 2001 From: Mica White Date: Sun, 10 Mar 2024 21:27:01 -0400 Subject: implement Debug --- src/mutex/mutex.rs | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'src/mutex/mutex.rs') diff --git a/src/mutex/mutex.rs b/src/mutex/mutex.rs index ce93cae..52a4848 100644 --- a/src/mutex/mutex.rs +++ b/src/mutex/mutex.rs @@ -26,9 +26,31 @@ impl Mutex { } } -impl Debug for Mutex { +impl Default for Mutex { + fn default() -> Self { + Self::new(T::default()) + } +} + +impl Debug for Mutex { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.write_str(&format!("Mutex<{}>", std::any::type_name::())) + // safety: this is just a try lock, and the value is dropped + // immediately after, so there's no risk of blocking ourselves + // or any other threads + if let Some(value) = unsafe { self.try_lock_no_key() } { + f.debug_struct("Mutex").field("data", &&*value).finish() + } else { + struct LockedPlaceholder; + impl Debug for LockedPlaceholder { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_str("") + } + } + + f.debug_struct("Mutex") + .field("data", &LockedPlaceholder) + .finish() + } } } -- cgit v1.2.3