assert2/__assert2_impl/
maybe_debug.rs1use 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}