Skip to main content

assert2/__assert2_impl/
maybe_debug.rs

1use std::fmt::Debug;
2
3pub struct Wrap<'a, T: ?Sized>(pub &'a T);
4
5pub trait IsDebug {
6	fn __assert2_maybe_debug(&self) -> DebugTag {
7		DebugTag
8	}
9}
10
11pub trait IsMaybeNotDebug {
12	fn __assert2_maybe_debug(&self) -> MaybeNotDebugTag {
13		MaybeNotDebugTag
14	}
15}
16
17impl<T: Debug + ?Sized> IsDebug for &Wrap<'_, T> {}
18impl<T: ?Sized> IsMaybeNotDebug for Wrap<'_, T> {}
19
20pub struct DebugTag;
21pub struct MaybeNotDebugTag;
22
23impl DebugTag {
24	pub fn wrap<T: ?Sized>(self, v: &T) -> &T {
25		v
26	}
27}
28
29impl MaybeNotDebugTag {
30	pub fn wrap<'a, T: ?Sized>(self, v: &'a T) -> MaybeNotDebug<'a, T> {
31		MaybeNotDebug(v)
32	}
33}
34
35pub struct MaybeNotDebug<'a, T: ?Sized>(&'a T);
36
37impl<'a, T: ?Sized> std::fmt::Debug for MaybeNotDebug<'a, T> {
38	fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
39		write!(f, "<object of type {}>", std::any::type_name::<T>())
40	}
41}