1#![doc = document_features::document_features!()]
30
31#![cfg_attr(not(feature = "std"), no_std)]
32
33pub use named_types_derive::Named;
35
36mod stdlib;
37use crate::stdlib::*;
38
39pub trait Named {
41 const NAME: Name = Name(Self::format_name);
43
44 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result;
46}
47
48#[derive(Copy, Clone)]
50pub struct Name(pub fn(&mut stdlib::fmt::Formatter<'_>) -> stdlib::fmt::Result);
51
52impl stdlib::fmt::Debug for Name {
53 #[inline]
54 fn fmt(&self, f: &mut stdlib::fmt::Formatter<'_>) -> stdlib::fmt::Result {
55 stdlib::fmt::Display::fmt(self, f)
56 }
57}
58
59impl stdlib::fmt::Display for Name {
60 #[inline]
61 fn fmt(&self, f: &mut stdlib::fmt::Formatter<'_>) -> stdlib::fmt::Result {
62 self.0(f)
63 }
64}
65
66macro_rules! simple_impl {
67 ($simple:ty => $name:expr) => {
68 impl $crate::Named for $simple {
69 #[inline]
70 fn format_name(
71 f: &mut $crate::stdlib::fmt::Formatter<'_>,
72 ) -> $crate::stdlib::fmt::Result {
73 write!(f, $name)
74 }
75 }
76 };
77}
78
79macro_rules! simple_trait_impl {
80 ($simple:ty => $name:expr) => {
81 impl $crate::Named for $simple {
82 #[inline]
83 fn format_name(
84 f: &mut $crate::stdlib::fmt::Formatter<'_>,
85 ) -> $crate::stdlib::fmt::Result {
86 write!(f, concat!("dyn ", $name))
87 }
88 }
89 };
90}
91
92macro_rules! simple_container_impl {
93 (impl<$ig:ident$(: $first_gd:ident$( + $gd:ident)*)?> $type:ty => $name:expr) => {
94 impl<$ig$(: $first_gd$( + $gd)*)?> $crate::Named for $type where $ig: $crate::Named {
95 #[inline]
96 fn format_name(f: &mut $crate::stdlib::fmt::Formatter<'_>) -> $crate::stdlib::fmt::Result {
97 write!(f, concat!($name, "<{}>"), $ig::NAME)
98 }
99 }
100 };
101}
102
103macro_rules! simple_map_impl {
104 (impl<$key_generic:ident$(: $first_key_gd:ident$( + $key_gd:ident)*)?, $value_generic:ident$(: $first_value_gd:ident$( + $value_gd:ident)*)?> $type:ty => $name:expr) => {
105 impl<$key_generic$(: $first_key_gd$( + $key_gd)*)?, $value_generic$(: $first_value_gd$( + $value_gd)*)?> $crate::Named for $type where $key_generic: $crate::Named, $value_generic: $crate::Named {
106 #[inline]
107 fn format_name(f: &mut $crate::stdlib::fmt::Formatter<'_>) -> $crate::stdlib::fmt::Result {
108 write!(f, concat!($name, "<{}, {}>"), $key_generic::NAME, $value_generic::NAME)
109 }
110 }
111 };
112}
113
114macro_rules! tuple_impl {
115 ($(($leading_name:ident$(, $name:ident)*))*$(,)?) => {
116 $(
117 impl<$leading_name: $crate::Named, $($name: $crate::Named), *> $crate::Named for ($leading_name, $($name), *) {
118 #[inline]
119 fn format_name(f: &mut $crate::stdlib::fmt::Formatter<'_>) -> $crate::stdlib::fmt::Result {
120 write!(f, "({}", $leading_name::NAME)?;
121 $(write!(f, ", {}", $name::NAME)?;)*
122 write!(f, ")")
123 }
124 }
125 )+
126 };
127}
128
129macro_rules! deref_impl {
130 (impl <$($desc:tt)+) => {
131 impl <$($desc)+ where T: $crate::Named {
132 const NAME: $crate::Name = T::NAME;
133
134 #[inline]
135 fn format_name(f: &mut $crate::stdlib::fmt::Formatter<'_>) -> $crate::stdlib::fmt::Result {
136 T::format_name(f)
137 }
138 }
139 };
140}
141
142macro_rules! simple_op_trait_impl {
143 ($type:ty = $type_assign:ty => $name:expr, $op:expr) => {
144 impl<Rhs, Output> Named for $type
145 where
146 Rhs: Named,
147 Output: Named,
148 {
149 #[inline]
150 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
151 write!(
152 f,
153 concat!("dyn ", $name, " ", $op, " {} = {}"),
154 Rhs::NAME,
155 Output::NAME
156 )
157 }
158 }
159
160 impl<Rhs> Named for $type_assign
161 where
162 Rhs: Named,
163 {
164 #[inline]
165 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
166 write!(f, concat!("dyn ", $name, "Assign ", $op, "= {}"), Rhs::NAME)
167 }
168 }
169 };
170}
171
172impl<T: Named, const N: usize> Named for [T; N] {
177 #[inline]
178 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
179 write!(f, "[{}; {}]", T::NAME, N)
180 }
181}
182
183simple_impl!(bool => "bool");
184simple_impl!(char => "char");
185simple_impl!(f32 => "f32");
186simple_impl!(f64 => "f64");
187simple_impl!(i8 => "i8");
188simple_impl!(i16 => "i16");
189simple_impl!(i32 => "i32");
190simple_impl!(i64 => "i64");
191simple_impl!(i128 => "i128");
192simple_impl!(isize => "isize");
193
194deref_impl!(impl<T: ?Sized> Named for *const T);
197deref_impl!(impl<T: ?Sized> Named for *mut T);
198
199deref_impl!(impl<'a, T: ?Sized> Named for &'a T);
202deref_impl!(impl<'a, T: ?Sized> Named for &'a mut T);
203
204impl<T: Named> Named for [T] {
207 #[inline]
208 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
209 write!(f, "[{}]", T::NAME)
210 }
211}
212
213simple_impl!(str => "str");
214
215tuple_impl!(
216 (T0)(T0, T1)(T0, T1, T2)(T0, T1, T2, T3)(T0, T1, T2, T3, T4)(T0, T1, T2, T3, T4, T5)(
217 T0, T1, T2, T3, T4, T5, T6
218 )(T0, T1, T2, T3, T4, T5, T6, T7)(T0, T1, T2, T3, T4, T5, T6, T7, T8)(
219 T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
220 )(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)(
221 T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
222 )(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)(
223 T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
224 )(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14)(
225 T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
226 )
227);
228
229simple_impl!(u8 => "u8");
230simple_impl!(u16 => "u16");
231simple_impl!(u32 => "u32");
232simple_impl!(u64 => "u64");
233simple_impl!(u128 => "u128");
234simple_impl!(() => "()");
235simple_impl!(usize => "usize");
236
237simple_impl!(alloc::Layout => "AllocLayout");
242simple_impl!(alloc::LayoutError => "AllocLayoutError");
243#[cfg(feature = "std")]
244simple_impl!(alloc::System => "SystemAlloc");
245
246simple_trait_impl!(dyn alloc::GlobalAlloc => "GlobalAlloc");
248
249simple_impl!(any::TypeId => "TypeId");
254
255simple_trait_impl!(dyn any::Any => "Any");
258
259impl<T, const N: usize> Named for array::IntoIter<T, N>
264where
265 T: Named,
266{
267 #[inline]
268 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
269 write!(f, "IntoIter<{}, {}>", T::NAME, N)
270 }
271}
272
273simple_impl!(ascii::EscapeDefault => "EscapeDefault");
278
279#[cfg(all(feature = "std", feature = "rust-1-65-0"))]
284simple_impl!(backtrace::Backtrace => "Backtrace");
285
286#[cfg(all(feature = "std", feature = "rust-1-65-0"))]
289simple_impl!(backtrace::BacktraceStatus => "BacktraceStatus");
290
291#[cfg(any(feature = "std", feature = "alloc"))]
296impl<B: borrow::ToOwned + ?Sized> Named for borrow::Cow<'_, B>
297where
298 B: Named,
299{
300 #[inline]
301 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
302 write!(f, "{}", B::NAME)
303 }
304}
305
306impl<Borrowed: ?Sized> Named for dyn borrow::Borrow<Borrowed>
309where
310 Borrowed: Named,
311{
312 #[inline]
313 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
314 write!(f, "{}", Borrowed::NAME)
315 }
316}
317
318impl<Borrowed: ?Sized> Named for dyn borrow::BorrowMut<Borrowed>
319where
320 Borrowed: Named,
321{
322 #[inline]
323 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
324 write!(f, "{}", Borrowed::NAME)
325 }
326}
327
328#[cfg(any(feature = "std", feature = "alloc"))]
333deref_impl!(impl<T: ?Sized> Named for boxed::Box<T>);
334
335simple_impl!(cell::BorrowError => "BorrowError");
340simple_impl!(cell::BorrowMutError => "BorrowMutError");
341deref_impl!(impl<T: ?Sized> Named for cell::Cell<T>);
342#[cfg(feature = "rust-1-70-0")]
343deref_impl!(impl<T> Named for cell::OnceCell<T>);
344deref_impl!(impl<'b, T: ?Sized> Named for cell::Ref<'b, T>);
345deref_impl!(impl<T: ?Sized> Named for cell::RefCell<T>);
346deref_impl!(impl<'b, T: ?Sized> Named for cell::RefMut<'b, T>);
347deref_impl!(impl<T: ?Sized> Named for cell::UnsafeCell<T>);
348
349simple_impl!(char::CharTryFromError => "CharTryFromError");
354
355impl<I: Iterator<Item = u16>> Named for char::DecodeUtf16<I>
356where
357 I: Named,
358{
359 #[inline]
360 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
361 write!(f, "DecodeUtf16<from {}>", I::NAME)
362 }
363}
364
365simple_impl!(char::DecodeUtf16Error => "DecodeUtf16Error");
366simple_impl!(char::EscapeDebug => "EscapeDebug");
367simple_impl!(char::EscapeDefault => "EscapeDefault");
368simple_impl!(char::EscapeUnicode => "EscapeUnicode");
369simple_impl!(char::ParseCharError => "ParseCharError");
370simple_impl!(char::ToLowercase => "ToLowercase");
371simple_impl!(char::ToUppercase => "ToUppercase");
372#[cfg(feature = "rust-1-59-0")]
373simple_impl!(char::TryFromCharError => "TryFromCharError");
374
375simple_container_impl!(impl<T> cmp::Reverse<T> => "Reverse");
380
381simple_impl!(cmp::Ordering => "Ordering");
384
385impl<Rhs: ?Sized> Named for dyn cmp::PartialEq<Rhs>
388where
389 Rhs: Named,
390{
391 #[inline]
392 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
393 write!(f, "dyn PartialEq<{}>", Rhs::NAME)
394 }
395}
396
397impl<Rhs: ?Sized> Named for dyn PartialOrd<Rhs>
398where
399 Rhs: Named,
400{
401 #[inline]
402 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
403 write!(f, "dyn PartialOrd<{}>", Rhs::NAME)
404 }
405}
406
407#[cfg(any(feature = "std", feature = "alloc"))]
412simple_container_impl!(impl<T: Ord> collections::binary_heap::BinaryHeap<T> => "BinaryHeap");
413#[cfg(any(feature = "std", feature = "alloc"))]
414simple_container_impl!(impl<T> collections::binary_heap::Drain<'_, T> => "Drain");
415#[cfg(any(feature = "std", feature = "alloc"))]
416simple_container_impl!(impl<T> collections::binary_heap::IntoIter<T> => "IntoIter");
417#[cfg(any(feature = "std", feature = "alloc"))]
418simple_container_impl!(impl<T> collections::binary_heap::Iter<'_, T> => "Iter");
419#[cfg(any(feature = "std", feature = "alloc"))]
420simple_container_impl!(impl<T: Ord> collections::binary_heap::PeekMut<'_, T> => "PeekMut");
421
422#[cfg(any(feature = "std", feature = "alloc"))]
423simple_map_impl!(impl<K, V> collections::btree_map::BTreeMap<K, V> => "BTreeMap");
424#[cfg(any(feature = "std", feature = "alloc"))]
425simple_map_impl!(impl<K, V> collections::btree_map::IntoIter<K, V> => "IntoIter");
426#[cfg(all(any(feature = "std", feature = "alloc"), feature = "rust-1-54-0"))]
427simple_map_impl!(impl<K, V> collections::btree_map::IntoKeys<K, V> => "IntoKeys");
428#[cfg(all(any(feature = "std", feature = "alloc"), feature = "rust-1-54-0"))]
429simple_map_impl!(impl<K, V> collections::btree_map::IntoValues<K, V> => "IntoValues");
430#[cfg(any(feature = "std", feature = "alloc"))]
431simple_map_impl!(impl<K, V> collections::btree_map::Iter<'_, K, V> => "Iter");
432#[cfg(any(feature = "std", feature = "alloc"))]
433simple_map_impl!(impl<K, V> collections::btree_map::IterMut<'_, K, V> => "IterMut");
434#[cfg(any(feature = "std", feature = "alloc"))]
435simple_map_impl!(impl<K, V> collections::btree_map::Keys<'_, K, V> => "Keys");
436#[cfg(any(feature = "std", feature = "alloc"))]
437simple_map_impl!(impl<K, V> collections::btree_map::OccupiedEntry<'_, K, V> => "OccupiedEntry");
438#[cfg(any(feature = "std", feature = "alloc"))]
439simple_map_impl!(impl<K, V> collections::btree_map::Range<'_, K, V> => "Range");
440#[cfg(any(feature = "std", feature = "alloc"))]
441simple_map_impl!(impl<K, V> collections::btree_map::RangeMut<'_, K, V> => "RangeMut");
442#[cfg(any(feature = "std", feature = "alloc"))]
443simple_map_impl!(impl<K, V> collections::btree_map::VacantEntry<'_, K, V> => "VacantEntry");
444#[cfg(any(feature = "std", feature = "alloc"))]
445simple_map_impl!(impl<K, V> collections::btree_map::Values<'_, K, V> => "Values");
446#[cfg(any(feature = "std", feature = "alloc"))]
447simple_map_impl!(impl<K, V> collections::btree_map::ValuesMut<'_, K, V> => "ValuesMut");
448
449#[cfg(any(feature = "std", feature = "alloc"))]
450simple_container_impl!(impl<T> collections::btree_set::BTreeSet<T> => "BTreeSet");
451#[cfg(any(feature = "std", feature = "alloc"))]
452simple_container_impl!(impl<T> collections::btree_set::Difference<'_, T> => "Difference");
453#[cfg(any(feature = "std", feature = "alloc"))]
454simple_container_impl!(impl<T> collections::btree_set::Intersection<'_, T> => "Intersection");
455#[cfg(any(feature = "std", feature = "alloc"))]
456simple_container_impl!(impl<T> collections::btree_set::IntoIter<T> => "IntoIter");
457#[cfg(any(feature = "std", feature = "alloc"))]
458simple_container_impl!(impl<T> collections::btree_set::Iter<'_, T> => "Iter");
459#[cfg(any(feature = "std", feature = "alloc"))]
460simple_container_impl!(impl<T> collections::btree_set::Range<'_, T> => "Range");
461#[cfg(any(feature = "std", feature = "alloc"))]
462simple_container_impl!(impl<T> collections::btree_set::SymmetricDifference<'_, T> => "SymmetricDifference");
463#[cfg(any(feature = "std", feature = "alloc"))]
464simple_container_impl!(impl<T> collections::btree_set::Union<'_, T> => "Union");
465
466#[cfg(feature = "std")]
467simple_map_impl!(impl<K, V> collections::hash_map::HashMap<K, V> => "HashMap");
468#[cfg(feature = "std")]
469simple_impl!(collections::hash_map::DefaultHasher => "DefaultHasher");
470#[cfg(feature = "std")]
471simple_map_impl!(impl<K, V> collections::hash_map::Drain<'_, K, V> => "Drain");
472#[cfg(feature = "std")]
473simple_map_impl!(impl<K, V> collections::hash_map::IntoIter<K, V> => "IntoIter");
474#[cfg(all(feature = "std", feature = "rust-1-54-0"))]
475simple_map_impl!(impl<K, V> collections::hash_map::IntoKeys<K, V> => "IntoKeys");
476#[cfg(all(feature = "std", feature = "rust-1-54-0"))]
477simple_map_impl!(impl<K, V> collections::hash_map::IntoValues<K, V> => "IntoValues");
478#[cfg(feature = "std")]
479simple_map_impl!(impl<K, V> collections::hash_map::Iter<'_, K, V> => "Iter");
480#[cfg(feature = "std")]
481simple_map_impl!(impl<K, V> collections::hash_map::IterMut<'_, K, V> => "IterMut");
482#[cfg(feature = "std")]
483simple_map_impl!(impl<K, V> collections::hash_map::Keys<'_, K, V> => "Keys");
484#[cfg(feature = "std")]
485simple_map_impl!(impl<K, V> collections::hash_map::OccupiedEntry<'_, K, V> => "OccupiedEntry");
486#[cfg(feature = "std")]
487simple_impl!(collections::hash_map::RandomState => "RandomState");
488#[cfg(feature = "std")]
489simple_map_impl!(impl<K, V> collections::hash_map::VacantEntry<'_, K, V> => "VacantEntry");
490#[cfg(feature = "std")]
491simple_map_impl!(impl<K, V> collections::hash_map::Values<'_, K, V> => "Values");
492#[cfg(feature = "std")]
493simple_map_impl!(impl<K, V> collections::hash_map::ValuesMut<'_, K, V> => "ValuesMut");
494
495#[cfg(feature = "std")]
496simple_container_impl!(impl<T> collections::hash_set::HashSet<T> => "HashSet");
497#[cfg(feature = "std")]
498simple_map_impl!(impl<T, S> collections::hash_set::Difference<'_, T, S> => "Difference");
499#[cfg(feature = "std")]
500simple_container_impl!(impl<K> collections::hash_set::Drain<'_, K> => "Drain");
501#[cfg(feature = "std")]
502simple_map_impl!(impl<T, S> collections::hash_set::Intersection<'_, T, S> => "Intersection");
503#[cfg(feature = "std")]
504simple_container_impl!(impl<K> collections::hash_set::IntoIter<K> => "IntoIter");
505#[cfg(feature = "std")]
506simple_container_impl!(impl<K> collections::hash_set::Iter<'_, K> => "Iter");
507#[cfg(feature = "std")]
508simple_map_impl!(impl<T, S> collections::hash_set::SymmetricDifference<'_, T, S> => "SymmetricDifference");
509#[cfg(feature = "std")]
510simple_map_impl!(impl<T, S> collections::hash_set::Union<'_, T, S> => "Union");
511
512#[cfg(any(feature = "std", feature = "alloc"))]
513simple_container_impl!(impl<T> collections::linked_list::LinkedList<T> => "LinkedList");
514#[cfg(any(feature = "std", feature = "alloc"))]
515simple_container_impl!(impl<T> collections::linked_list::IntoIter<T> => "IntoIter");
516#[cfg(any(feature = "std", feature = "alloc"))]
517simple_container_impl!(impl<T> collections::linked_list::Iter<'_, T> => "Iter");
518#[cfg(any(feature = "std", feature = "alloc"))]
519simple_container_impl!(impl<T> collections::linked_list::IterMut<'_, T> => "IterMut");
520
521#[cfg(any(feature = "std", feature = "alloc"))]
522simple_container_impl!(impl<T> collections::vec_deque::VecDeque<T> => "VecDeque");
523#[cfg(any(feature = "std", feature = "alloc"))]
524simple_container_impl!(impl<T> collections::vec_deque::Drain<'_, T> => "Drain");
525#[cfg(any(feature = "std", feature = "alloc"))]
526simple_container_impl!(impl<T> collections::vec_deque::IntoIter<T> => "IntoIter");
527#[cfg(any(feature = "std", feature = "alloc"))]
528simple_container_impl!(impl<T> collections::vec_deque::Iter<'_, T> => "Iter");
529#[cfg(any(feature = "std", feature = "alloc"))]
530simple_container_impl!(impl<T> collections::vec_deque::IterMut<'_, T> => "IterMut");
531
532#[cfg(any(feature = "std", feature = "alloc"))]
533#[cfg(feature = "rust-1-57-0")]
534simple_impl!(collections::TryReserveError => "TryReserveError");
535
536#[cfg(any(feature = "std", feature = "alloc"))]
539simple_map_impl!(impl<K, V> collections::btree_map::Entry<'_, K, V> => "Entry");
540#[cfg(feature = "std")]
541simple_map_impl!(impl<K, V> collections::hash_map::Entry<'_, K, V> => "Entry");
542
543simple_impl!(convert::Infallible => "Infallible");
548
549deref_impl!(impl<T: ?Sized> Named for dyn convert::AsMut<T>);
552deref_impl!(impl<T: ?Sized> Named for dyn convert::AsRef<T>);
553
554#[cfg(feature = "std")]
559simple_impl!(env::Args => "MainArgs");
560#[cfg(feature = "std")]
561simple_impl!(env::ArgsOs => "MainArgsOs");
562#[cfg(feature = "std")]
563simple_impl!(env::JoinPathsError => "JoinPathsError");
564
565#[cfg(feature = "std")]
566simple_impl!(env::SplitPaths<'_> => "SplitPaths");
567
568#[cfg(feature = "std")]
569simple_impl!(env::Vars => "EnvVars");
570#[cfg(feature = "std")]
571simple_impl!(env::VarsOs => "EnvVarsOs");
572
573#[cfg(feature = "std")]
576simple_impl!(env::VarError => "EnvVarError");
577
578#[cfg(feature = "std")]
583simple_trait_impl!(dyn error::Error => "Error");
584
585simple_impl!(ffi::CStr => "CStr");
590#[cfg(any(feature = "std", feature = "alloc"))]
591simple_impl!(ffi::CString => "CString");
592#[cfg(not(feature = "std"))]
593simple_impl!(ffi::FromBytesUntilNulError => "FromBytesUntilNullError");
594simple_impl!(ffi::FromBytesWithNulError => "FromBytesWithNulError");
595#[cfg(any(feature = "std", feature = "alloc"))]
596simple_impl!(ffi::FromVecWithNulError => "FromVecWithNulError");
597#[cfg(any(feature = "std", feature = "alloc"))]
598simple_impl!(ffi::IntoStringError => "IntoStringError");
599#[cfg(any(feature = "std", feature = "alloc"))]
600simple_impl!(ffi::NulError => "NulError");
601#[cfg(feature = "std")]
602simple_impl!(ffi::OsStr => "OsStr");
603#[cfg(feature = "std")]
604simple_impl!(ffi::OsString => "OsString");
605
606simple_impl!(ffi::c_void => "c_void");
609
610simple_impl!(fmt::Arguments<'_> => "FormatArguments");
615simple_impl!(fmt::DebugList<'_, '_> => "FormatDebugList");
616simple_impl!(fmt::DebugMap<'_, '_> => "FormatDebugMap");
617simple_impl!(fmt::DebugSet<'_, '_> => "FormatDebugSet");
618simple_impl!(fmt::DebugStruct<'_, '_> => "FormatDebugStruct");
619simple_impl!(fmt::DebugTuple<'_, '_> => "FormatDebugTuple");
620simple_impl!(fmt::Error => "FormatError");
621simple_impl!(fmt::Formatter<'_> => "FormatFormatter");
622
623simple_impl!(fmt::Alignment => "FormatAlignment");
626
627simple_trait_impl!(dyn fmt::Binary => "FormatAsBinary");
630simple_trait_impl!(dyn fmt::Debug => "Debug");
631simple_trait_impl!(dyn fmt::Display => "Display");
632simple_trait_impl!(dyn fmt::LowerExp => "FormatAsLowerExp");
633simple_trait_impl!(dyn fmt::LowerHex => "FormatAsLowerHex");
634simple_trait_impl!(dyn fmt::Octal => "FormatAsOctal");
635simple_trait_impl!(dyn fmt::Pointer => "FormatAsPointer");
636simple_trait_impl!(dyn fmt::UpperExp => "FormatAsUpperExp");
637simple_trait_impl!(dyn fmt::UpperHex => "FormatAsUpperHex");
638simple_trait_impl!(dyn fmt::Write => "FormatWrite");
639
640#[cfg(feature = "std")]
645simple_impl!(fs::DirBuilder => "DirBuilder");
646#[cfg(feature = "std")]
647simple_impl!(fs::DirEntry => "DirEntry");
648#[cfg(feature = "std")]
649simple_impl!(fs::File => "File");
650#[cfg(feature = "std")]
651simple_impl!(fs::FileType => "FileType");
652#[cfg(feature = "std")]
653simple_impl!(fs::Metadata => "FileMetadata");
654#[cfg(feature = "std")]
655simple_impl!(fs::OpenOptions => "FileOpenOptions");
656#[cfg(feature = "std")]
657simple_impl!(fs::Permissions => "FilePermissions");
658#[cfg(feature = "std")]
659simple_impl!(fs::ReadDir => "ReadDir");
660
661simple_container_impl!(impl<T> future::Pending<T> => "Pending");
666#[cfg(feature = "rust-1-64-0")]
667simple_container_impl!(impl<T> future::PollFn<T> => "PollFn");
668simple_container_impl!(impl<T> future::Ready<T> => "Ready");
669
670impl<Output> Named for dyn future::Future<Output = Output>
673where
674 Output: Named,
675{
676 #[inline]
677 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
678 write!(f, "dyn Future<Output = {}>", Output::NAME)
679 }
680}
681
682#[cfg(feature = "rust-1-64-0")]
683impl<Output, IntoFuture: future::Future<Output = Output>> Named
684 for dyn future::IntoFuture<Output = Output, IntoFuture = IntoFuture>
685where
686 Output: Named,
687 IntoFuture: Named,
688{
689 #[inline]
690 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
691 write!(
692 f,
693 "dyn IntoFuture<Output = {}, IntoFuture = {}>",
694 Output::NAME,
695 IntoFuture::NAME
696 )
697 }
698}
699
700simple_container_impl!(impl<H> hash::BuildHasherDefault<H> => "BuildHasherDefault");
705
706impl<H: hash::Hasher> Named for dyn hash::BuildHasher<Hasher = H>
709where
710 H: Named,
711{
712 #[inline]
713 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
714 write!(f, "dyn BuildHasher<Hasher = {}>", H::NAME)
715 }
716}
717
718simple_trait_impl!(dyn hash::Hasher => "Hasher");
719
720#[cfg(feature = "std")]
725simple_container_impl!(impl<R> io::BufReader<R> => "BufReader");
726
727#[cfg(feature = "std")]
728impl<R: io::Write> Named for io::BufWriter<R>
729where
730 R: Named,
731{
732 #[inline]
733 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
734 write!(f, concat!("BufWriter", "<{}>"), R::NAME)
735 }
736}
737
738#[cfg(feature = "std")]
739simple_container_impl!(impl<R> io::Bytes<R> => "Bytes");
740
741#[cfg(feature = "std")]
742simple_map_impl!(impl<T, U> io::Chain<T, U> => "Chain");
743
744#[cfg(feature = "std")]
745simple_container_impl!(impl<R> io::Cursor<R> => "Cursor");
746#[cfg(feature = "std")]
747simple_impl!(io::Empty => "Empty");
748#[cfg(feature = "std")]
749simple_impl!(io::Error => "IoError");
750#[cfg(feature = "std")]
751simple_container_impl!(impl<W> io::IntoInnerError<W> => "IntoInnerError");
752#[cfg(feature = "std")]
753simple_impl!(io::IoSlice<'_> => "IoSlice");
754#[cfg(feature = "std")]
755simple_impl!(io::IoSliceMut<'_> => "IoSliceMut");
756
757#[cfg(feature = "std")]
758impl<W: io::Write> Named for io::LineWriter<W>
759where
760 W: Named,
761{
762 #[inline]
763 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
764 write!(f, "LineWriter<{}>", W::NAME)
765 }
766}
767
768#[cfg(feature = "std")]
769simple_container_impl!(impl<B> io::Lines<B> => "Lines");
770#[cfg(feature = "std")]
771simple_impl!(io::Repeat => "Repeat");
772#[cfg(feature = "std")]
773simple_impl!(io::Sink => "Sink");
774#[cfg(feature = "std")]
775simple_container_impl!(impl<B> io::Split<B> => "Split");
776#[cfg(feature = "std")]
777simple_impl!(io::Stderr => "Stderr");
778#[cfg(feature = "std")]
779simple_impl!(io::StderrLock<'_> => "StderrLock");
780#[cfg(feature = "std")]
781simple_impl!(io::Stdin => "Stdin");
782#[cfg(feature = "std")]
783simple_impl!(io::StdinLock<'_> => "StdinLock");
784#[cfg(feature = "std")]
785simple_impl!(io::Stdout => "Stdout");
786#[cfg(feature = "std")]
787simple_impl!(io::StdoutLock<'_> => "StdoutLock");
788#[cfg(feature = "std")]
789simple_container_impl!(impl<T> io::Take<T> => "Take");
790#[cfg(all(feature = "std", feature = "rust-1-56-0"))]
791simple_impl!(io::WriterPanicked => "WriterPanicked");
792
793#[cfg(feature = "std")]
796simple_impl!(io::ErrorKind => "IoErrorKind");
797#[cfg(feature = "std")]
798simple_impl!(io::SeekFrom => "SeekFrom");
799
800#[cfg(feature = "std")]
803simple_trait_impl!(dyn io::BufRead => "BufRead");
804#[cfg(feature = "std")]
805simple_trait_impl!(dyn io::IsTerminal => "IsTerminal");
806#[cfg(feature = "std")]
807simple_trait_impl!(dyn io::Read => "Read");
808#[cfg(feature = "std")]
809simple_trait_impl!(dyn io::Seek => "Seek");
810#[cfg(feature = "std")]
811simple_trait_impl!(dyn io::Write => "Write");
812
813simple_map_impl!(impl<A, B> iter::Chain<A, B> => "Chain");
816simple_container_impl!(impl<I> iter::Cloned<I> => "Cloned");
817simple_container_impl!(impl<I> iter::Copied<I> => "Copied");
818simple_container_impl!(impl<I> iter::Cycle<I> => "Cycle");
819simple_container_impl!(impl<T> iter::Empty<T> => "Empty");
820simple_container_impl!(impl<I> iter::Enumerate<I> => "Enumerate");
821simple_map_impl!(impl<I, P> iter::Filter<I, P> => "Filter");
822simple_map_impl!(impl<I, P> iter::FilterMap<I, P> => "FilterMap");
823
824impl<I, U: IntoIterator, P> Named for iter::FlatMap<I, U, P>
825where
826 I: Named,
827 U: Named,
828 P: Named,
829{
830 #[inline]
831 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
832 write!(f, "FilterMap<{}, {}, {}>", I::NAME, U::NAME, P::NAME)
833 }
834}
835
836impl<Item: Iterator, I: Iterator<Item = Item>> Named for iter::Flatten<I>
837where
838 I: Named,
839{
840 #[inline]
841 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
842 write!(f, "Flatten<{}>", I::NAME)
843 }
844}
845
846simple_container_impl!(impl<F> iter::FromFn<F> => "iter::FromFn");
847simple_container_impl!(impl<I> iter::Fuse<I> => "iter::Fuse");
848
849impl<I, F> Named for iter::Inspect<I, F>
850where
851 I: Named,
852{
853 #[inline]
854 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
855 write!(f, "Inspect<{}>", I::NAME)
856 }
857}
858
859impl<I, F> Named for iter::Map<I, F>
860where
861 I: Named,
862{
863 #[inline]
864 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
865 write!(f, "Map<{}>", I::NAME)
866 }
867}
868
869#[cfg(feature = "rust-1-57-0")]
870impl<I, F> Named for iter::MapWhile<I, F>
871where
872 I: Named,
873{
874 #[inline]
875 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
876 write!(f, "MapWhile<{}>", I::NAME)
877 }
878}
879
880simple_container_impl!(impl<T> iter::Once<T> => "Once");
881simple_container_impl!(impl<T> iter::OnceWith<T> => "OnceWith");
882simple_container_impl!(impl<I: Iterator> iter::Peekable<I> => "Peekable");
883simple_container_impl!(impl<A> iter::Repeat<A> => "Repeat");
884
885impl<F> Named for iter::RepeatWith<F> {
886 #[inline]
887 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
888 write!(f, "RepeatWith")
889 }
890}
891
892simple_container_impl!(impl<T> iter::Rev<T> => "Rev");
893
894impl<I, St, F> Named for iter::Scan<I, St, F>
895where
896 I: Named,
897 St: Named,
898{
899 #[inline]
900 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
901 write!(f, "Scan<{}, {}>", I::NAME, St::NAME)
902 }
903}
904
905simple_container_impl!(impl<I> iter::Skip<I> => "Skip");
906
907impl<I, P> Named for iter::SkipWhile<I, P>
908where
909 I: Named,
910{
911 #[inline]
912 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
913 write!(f, "SkipWhile<{}>", I::NAME)
914 }
915}
916
917simple_container_impl!(impl<I> iter::StepBy<I> => "StepBy");
918
919impl<T, F> Named for iter::Successors<T, F>
920where
921 T: Named,
922{
923 #[inline]
924 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
925 write!(f, "Successors<{}>", T::NAME)
926 }
927}
928
929simple_container_impl!(impl<I> iter::Take<I> => "Take");
930
931impl<I, P> Named for iter::TakeWhile<I, P>
932where
933 I: Named,
934{
935 #[inline]
936 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
937 write!(f, "TakeWhile<{}>", I::NAME)
938 }
939}
940
941simple_map_impl!(impl<A, B> iter::Zip<A, B> => "Zip");
942
943impl<Item> Named for dyn iter::DoubleEndedIterator<Item = Item>
946where
947 Item: Named,
948{
949 #[inline]
950 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
951 write!(f, "dyn DoubleEndedIterator<Item = {}>", Item::NAME)
952 }
953}
954
955impl<Item> Named for dyn iter::ExactSizeIterator<Item = Item>
956where
957 Item: Named,
958{
959 #[inline]
960 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
961 write!(f, "dyn ExactSizeIterator<Item = {}>", Item::NAME)
962 }
963}
964
965impl<Item> Named for dyn iter::FusedIterator<Item = Item>
966where
967 Item: Named,
968{
969 #[inline]
970 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
971 write!(f, "FusedIterator<Item = {}>", Item::NAME)
972 }
973}
974
975impl<Item, IntoIter: Iterator<Item = Item>> Named
976 for dyn iter::IntoIterator<Item = Item, IntoIter = IntoIter>
977where
978 Item: Named,
979 IntoIter: Named,
980{
981 #[inline]
982 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
983 write!(
984 f,
985 "dyn IntoIterator<Item = {}, IntoIter = {}>",
986 Item::NAME,
987 IntoIter::NAME
988 )
989 }
990}
991
992impl<Item> Named for dyn iter::Iterator<Item = Item>
993where
994 Item: Named,
995{
996 #[inline]
997 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
998 write!(f, "Iterator<Item = {}>", Item::NAME)
999 }
1000}
1001
1002deref_impl!(impl<T> Named for marker::PhantomData<T>);
1007simple_impl!(marker::PhantomPinned => "PhantomPinned");
1008
1009simple_trait_impl!(dyn marker::Send => "Send");
1012simple_trait_impl!(dyn marker::Sync => "Sync");
1013simple_trait_impl!(dyn marker::Unpin => "Unpin");
1014
1015simple_container_impl!(impl<T> mem::Discriminant<T> => "Discriminant");
1020
1021impl<T: ?Sized> Named for mem::ManuallyDrop<T>
1022where
1023 T: Named,
1024{
1025 const NAME: Name = Name(T::format_name);
1026
1027 #[inline]
1028 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1029 T::format_name(f)
1030 }
1031}
1032
1033#[cfg(feature = "std")]
1038simple_impl!(net::AddrParseError => "AddrParseError");
1039#[cfg(feature = "std")]
1040simple_impl!(net::Incoming<'_> => "IncomingConnection");
1041#[cfg(feature = "std")]
1042simple_impl!(net::Ipv4Addr => "Ipv4Addr");
1043#[cfg(feature = "std")]
1044simple_impl!(net::Ipv6Addr => "Ipv6Addr");
1045#[cfg(feature = "std")]
1046simple_impl!(net::SocketAddrV4 => "SocketAddrV4");
1047#[cfg(feature = "std")]
1048simple_impl!(net::SocketAddrV6 => "SocketAddrV6");
1049#[cfg(feature = "std")]
1050simple_impl!(net::TcpListener => "TcpListener");
1051#[cfg(feature = "std")]
1052simple_impl!(net::TcpStream => "TcpStream");
1053#[cfg(feature = "std")]
1054simple_impl!(net::UdpSocket => "UdpSocket");
1055
1056#[cfg(feature = "std")]
1059simple_impl!(net::IpAddr => "IpAddr");
1060#[cfg(feature = "std")]
1061simple_impl!(net::Shutdown => "ShutdownConnectionDirection");
1062#[cfg(feature = "std")]
1063simple_impl!(net::SocketAddr => "SocketAddr");
1064
1065#[cfg(feature = "std")]
1068impl<Item, Iter: Iterator<Item = Item>> Named for dyn net::ToSocketAddrs<Iter = Iter>
1069where
1070 Iter: Named,
1071{
1072 #[inline]
1073 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1074 write!(f, "dyn ToSocketAddrs<Iter = {}>", Iter::NAME)
1075 }
1076}
1077
1078simple_impl!(num::NonZeroI8 => "i8!=0");
1083simple_impl!(num::NonZeroI16 => "i16!=0");
1084simple_impl!(num::NonZeroI32 => "i32!=0");
1085simple_impl!(num::NonZeroI64 => "i64!=0");
1086simple_impl!(num::NonZeroI128 => "i128!=0");
1087simple_impl!(num::NonZeroIsize => "isize!=0");
1088simple_impl!(num::NonZeroU8 => "u8!=0");
1089simple_impl!(num::NonZeroU16 => "u16!=0");
1090simple_impl!(num::NonZeroU32 => "u32!=0");
1091simple_impl!(num::NonZeroU64 => "u64!=0");
1092simple_impl!(num::NonZeroU128 => "u128!=0");
1093simple_impl!(num::NonZeroUsize => "usize!=0");
1094simple_impl!(num::ParseFloatError => "ParseFloatError");
1095simple_impl!(num::ParseIntError => "ParseIntError");
1096simple_impl!(num::TryFromIntError => "TryFromIntError");
1097simple_container_impl!(impl<T> num::Wrapping<T> => "Wrapping");
1098
1099simple_impl!(num::FpCategory => "FloatingPointCategory");
1102simple_impl!(num::IntErrorKind => "IntErrorKind");
1103
1104impl<Idx> Named for ops::Range<Idx>
1109where
1110 Idx: Named,
1111{
1112 #[inline]
1113 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1114 write!(f, "{0}..{0}", Idx::NAME)
1115 }
1116}
1117
1118impl<Idx> Named for ops::RangeFrom<Idx>
1119where
1120 Idx: Named,
1121{
1122 #[inline]
1123 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1124 write!(f, "{}..", Idx::NAME)
1125 }
1126}
1127
1128simple_impl!(ops::RangeFull => "..");
1129
1130impl<Idx> Named for ops::RangeInclusive<Idx>
1131where
1132 Idx: Named,
1133{
1134 #[inline]
1135 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1136 write!(f, "{0}..={0}", Idx::NAME)
1137 }
1138}
1139
1140impl<Idx> Named for ops::RangeTo<Idx>
1141where
1142 Idx: Named,
1143{
1144 #[inline]
1145 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1146 write!(f, "..{}", Idx::NAME)
1147 }
1148}
1149
1150impl<Idx> Named for ops::RangeToInclusive<Idx>
1151where
1152 Idx: Named,
1153{
1154 #[inline]
1155 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1156 write!(f, "..={}", Idx::NAME)
1157 }
1158}
1159
1160simple_container_impl!(impl<T> ops::Bound<T> => "Bound");
1163
1164#[cfg(feature = "rust-1-55-0")]
1165impl<B, C> Named for ops::ControlFlow<B, C>
1166where
1167 B: Named,
1168 C: Named,
1169{
1170 #[inline]
1171 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1172 write!(f, "ControlFlow<{}, {}>", B::NAME, C::NAME)
1173 }
1174}
1175
1176simple_op_trait_impl!(dyn ops::Add<Rhs, Output = Output> = dyn ops::AddAssign<Rhs> => "Add", "+");
1179simple_op_trait_impl!(dyn ops::BitAnd<Rhs, Output = Output> = dyn ops::BitAndAssign<Rhs> => "BitAnd", "&");
1180simple_op_trait_impl!(dyn ops::BitOr<Rhs, Output = Output> = dyn ops::BitOrAssign<Rhs> => "BitOr", "|");
1181simple_op_trait_impl!(dyn ops::BitXor<Rhs, Output = Output> = dyn ops::BitXorAssign<Rhs> => "BitXor", "^");
1182
1183impl<Target: ?Sized> Named for dyn ops::Deref<Target = Target>
1184where
1185 Target: Named,
1186{
1187 const NAME: Name = Name(Target::format_name);
1188
1189 #[inline]
1190 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1191 Target::format_name(f)
1192 }
1193}
1194
1195impl<Target: ?Sized> Named for dyn ops::DerefMut<Target = Target>
1196where
1197 Target: Named,
1198{
1199 const NAME: Name = Name(Target::format_name);
1200
1201 #[inline]
1202 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1203 Target::format_name(f)
1204 }
1205}
1206
1207simple_op_trait_impl!(dyn ops::Div<Rhs, Output = Output> = dyn ops::DivAssign<Rhs> => "Div", "/");
1208
1209#[allow(dyn_drop)]
1210impl Named for dyn ops::Drop {
1211 #[inline]
1212 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1213 write!(f, "dyn Drop")
1214 }
1215}
1216
1217impl<Idx, Output> Named for dyn ops::Index<Idx, Output = Output>
1218where
1219 Idx: Named,
1220 Output: Named,
1221{
1222 #[inline]
1223 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1224 write!(f, "dyn Index[{}] = {}", Idx::NAME, Output::NAME)
1225 }
1226}
1227
1228impl<Idx, Output> Named for dyn ops::IndexMut<Idx, Output = Output>
1229where
1230 Idx: Named,
1231 Output: Named,
1232{
1233 #[inline]
1234 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1235 write!(f, "dyn Index[{}] = {}", Idx::NAME, Output::NAME)
1236 }
1237}
1238
1239simple_op_trait_impl!(dyn ops::Mul<Rhs, Output = Output> = dyn ops::MulAssign<Rhs> => "Mul", "*");
1240
1241impl<Output> Named for dyn ops::Neg<Output = Output>
1242where
1243 Output: Named,
1244{
1245 #[inline]
1246 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1247 write!(f, "-dyn Neg = {}", Output::NAME)
1248 }
1249}
1250
1251impl<Output> Named for dyn ops::Not<Output = Output>
1252where
1253 Output: Named,
1254{
1255 #[inline]
1256 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1257 write!(f, "!dyn Neg = {}", Output::NAME)
1258 }
1259}
1260
1261simple_op_trait_impl!(dyn ops::Rem<Rhs, Output = Output> = dyn ops::RemAssign<Rhs> => "Rem", "%");
1262simple_op_trait_impl!(dyn ops::Shl<Rhs, Output = Output> = dyn ops::ShlAssign<Rhs> => "Shl", "<<");
1263simple_op_trait_impl!(dyn ops::Shr<Rhs, Output = Output> = dyn ops::ShrAssign<Rhs> => "Shr", ">>");
1264simple_op_trait_impl!(dyn ops::Sub<Rhs, Output = Output> = dyn ops::SubAssign<Rhs> => "Sub", "-");
1265
1266simple_container_impl!(impl<A> option::IntoIter<A> => "option::IntoIter");
1271simple_container_impl!(impl<A> option::Iter<'_, A> => "option::Iter");
1272simple_container_impl!(impl<A> option::IterMut<'_, A> => "option::IterMut");
1273
1274simple_container_impl!(impl<T> option::Option<T> => "Option");
1277
1278#[cfg(all(feeature = "std", feature = "rust-1-66-0", any(unix, target_os = "wasi")))]
1283simple_impl!(os::fd::BorrowedFd<'_> => "BorrowedFd");
1284#[cfg(all(feature = "std", feature = "rust-1-66-0", any(unix, target_os = "wasi")))]
1285simple_impl!(os::fd::OwnedFd => "OwnedFd");
1286
1287#[cfg(all(feature = "std", unix))]
1288simple_impl!(os::unix::net::Incoming<'_> => "ConnectionIncoming");
1289#[cfg(all(feature = "std", unix))]
1290simple_impl!(os::unix::net::SocketAddr => "SocketAddr");
1291#[cfg(all(feature = "std", unix))]
1292simple_impl!(os::unix::net::UnixDatagram => "Datagram");
1293#[cfg(all(feature = "std", unix))]
1294simple_impl!(os::unix::net::UnixListener => "Listener");
1295#[cfg(all(feature = "std", unix))]
1296simple_impl!(os::unix::net::UnixStream => "Stream");
1297
1298#[cfg(all(feature = "std", windows))]
1299simple_impl!(os::windows::ffi::EncodeWide<'_> => "EncodeWide");
1300
1301#[cfg(all(feature = "std", windows, feature = "rust-1-63-0"))]
1302simple_impl!(os::windows::io::BorrowedHandle<'_> => "BorrowedHandle");
1303#[cfg(all(feature = "std", windows, feature = "rust-1-63-0"))]
1304simple_impl!(os::windows::io::BorrowedSocket<'_> => "BorrowedSocket");
1305#[cfg(all(feature = "std", windows, feature = "rust-1-63-0"))]
1306simple_impl!(os::windows::io::HandleOrInvalid => "HandleOrInvalid");
1307#[cfg(all(feature = "std", windows, feature = "rust-1-63-0"))]
1308simple_impl!(os::windows::io::HandleOrNull => "HandleOrNull");
1309#[cfg(all(feature = "std", windows, feature = "rust-1-63-0"))]
1310simple_impl!(os::windows::io::InvalidHandleError => "InvalidHandleError");
1311#[cfg(all(feature = "std", windows, feature = "rust-1-63-0"))]
1312simple_impl!(os::windows::io::NullHandleError => "NullHandleError");
1313#[cfg(all(feature = "std", windows, feature = "rust-1-63-0"))]
1314simple_impl!(os::windows::io::OwnedHandle => "OwnedHandle");
1315#[cfg(all(feature = "std", windows, feature = "rust-1-63-0"))]
1316simple_impl!(os::windows::io::OwnedSocket => "OwnedSocket");
1317
1318#[cfg(all(feature = "std", any(unix, target_os = "wasi")))]
1321simple_trait_impl!(dyn os::fd::AsFd => "AsFd");
1322#[cfg(all(feature = "std", any(unix, target_os = "wasi")))]
1323simple_trait_impl!(dyn os::fd::AsRawFd => "AsRawFd");
1324#[cfg(all(feature = "std", any(unix, target_os = "wasi")))]
1325simple_trait_impl!(dyn os::fd::IntoRawFd => "IntoRawFd");
1326
1327#[cfg(all(feature = "std", target_os = "linux"))]
1328simple_trait_impl!(dyn os::linux::fs::MetadataExt => "FileMetadata");
1329
1330#[cfg(all(feature = "std", unix))]
1331simple_trait_impl!(dyn os::unix::fs::DirEntryExt => "DirEntry");
1332#[cfg(all(feature = "std", unix))]
1333simple_trait_impl!(dyn os::unix::fs::FileExt => "File");
1334#[cfg(all(feature = "std", unix))]
1335simple_trait_impl!(dyn os::unix::fs::FileTypeExt => "FileType");
1336#[cfg(all(feature = "std", unix))]
1337simple_trait_impl!(dyn os::unix::fs::MetadataExt => "FileMetadata");
1338
1339#[cfg(all(feature = "std", unix))]
1340simple_trait_impl!(dyn os::unix::thread::JoinHandleExt => "JoinHandle");
1341
1342#[cfg(all(feature = "std", windows))]
1343simple_trait_impl!(dyn os::windows::ffi::OsStrExt => "OsStr");
1344
1345#[cfg(all(feature = "std", windows))]
1346simple_trait_impl!(dyn os::windows::fs::FileExt => "File");
1347#[cfg(all(feature = "std", windows, feature = "rust-1-64-0"))]
1348simple_trait_impl!(dyn os::windows::fs::FileTypeExt => "FileType");
1349#[cfg(all(feature = "std", windows))]
1350simple_trait_impl!(dyn os::windows::fs::MetadataExt => "FileMetadata");
1351
1352#[cfg(all(feature = "std", windows, feature = "rust-1-63-0"))]
1353simple_trait_impl!(dyn os::windows::io::AsHandle => "AsHandle");
1354#[cfg(all(feature = "std", windows))]
1355simple_trait_impl!(dyn os::windows::io::AsRawHandle => "AsRawHandle");
1356#[cfg(all(feature = "std", windows))]
1357simple_trait_impl!(dyn os::windows::io::AsRawSocket => "AsRawSocket");
1358#[cfg(all(feature = "std", windows, feature = "rust-1-63-0"))]
1359simple_trait_impl!(dyn os::windows::io::AsSocket => "AsSocket");
1360#[cfg(all(feature = "std", windows))]
1361simple_trait_impl!(dyn os::windows::io::IntoRawHandle => "IntoRawHandle");
1362#[cfg(all(feature = "std", windows))]
1363simple_trait_impl!(dyn os::windows::io::IntoRawSocket => "IntoRawSocket");
1364
1365deref_impl!(impl<T> Named for panic::AssertUnwindSafe<T>);
1370simple_impl!(panic::Location<'_> => "PanicLocation");
1371simple_impl!(panic::PanicInfo<'_> => "PanicInfo");
1372
1373simple_trait_impl!(dyn panic::RefUnwindSafe => "RefUnwindSafe");
1376simple_trait_impl!(dyn panic::UnwindSafe => "UnwindSafe");
1377
1378#[cfg(feature = "std")]
1383simple_impl!(path::Ancestors<'_> => "PathAncestors");
1384#[cfg(feature = "std")]
1385simple_impl!(path::Components<'_> => "PathComponents");
1386#[cfg(feature = "std")]
1387simple_impl!(path::Display<'_> => "DisplayPath");
1388#[cfg(feature = "std")]
1389simple_impl!(path::Iter<'_> => "Iter");
1390#[cfg(feature = "std")]
1391simple_impl!(path::Path => "Path");
1392#[cfg(feature = "std")]
1393simple_impl!(path::PathBuf => "PathBuf");
1394#[cfg(feature = "std")]
1395simple_impl!(path::PrefixComponent<'_> => "PathPrefixComponent");
1396#[cfg(feature = "std")]
1397simple_impl!(path::StripPrefixError => "StripPrefixError");
1398
1399#[cfg(feature = "std")]
1402simple_impl!(path::Component<'_> => "PathComponent");
1403#[cfg(feature = "std")]
1404simple_impl!(path::Prefix<'_> => "PathPrefix");
1405
1406deref_impl!(impl<T> Named for pin::Pin<T>);
1411
1412#[cfg(feature = "std")]
1417simple_impl!(process::Child => "ProcessChild");
1418#[cfg(feature = "std")]
1419simple_impl!(process::ChildStderr => "ChildStderr");
1420#[cfg(feature = "std")]
1421simple_impl!(process::ChildStdin => "ChildStdin");
1422#[cfg(feature = "std")]
1423simple_impl!(process::ChildStdout => "ChildStdout");
1424#[cfg(feature = "std")]
1425simple_impl!(process::Command => "Command");
1426#[cfg(all(feature = "std", feature = "rust-1-57-0"))]
1427simple_impl!(process::CommandArgs<'_> => "CommandArgs");
1428#[cfg(all(feature = "std", feature = "rust-1-57-0"))]
1429simple_impl!(process::CommandEnvs<'_> => "CommandEnvs");
1430#[cfg(all(feature = "std", feature = "rust-1-61-0"))]
1431simple_impl!(process::ExitCode => "ExitCode");
1432#[cfg(feature = "std")]
1433simple_impl!(process::ExitStatus => "ExitStatus");
1434#[cfg(feature = "std")]
1435simple_impl!(process::Output => "ProcessOutput");
1436#[cfg(feature = "std")]
1437simple_impl!(process::Stdio => "Stdio");
1438
1439#[cfg(feature = "std")]
1442simple_trait_impl!(dyn process::Termination => "Termination");
1443
1444deref_impl!(impl<T> Named for ptr::NonNull<T>);
1449
1450#[cfg(any(feature = "std", feature = "alloc"))]
1455impl<T: ?Sized> Named for rc::Rc<T>
1456where
1457 T: Named,
1458{
1459 const NAME: Name = Name(T::format_name);
1460
1461 #[inline]
1462 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1463 T::format_name(f)
1464 }
1465}
1466
1467#[cfg(any(feature = "std", feature = "alloc"))]
1468impl<T: ?Sized> Named for rc::Weak<T>
1469where
1470 T: Named,
1471{
1472 #[inline]
1473 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1474 write!(f, "RcWeak<{}>", T::NAME)
1475 }
1476}
1477
1478simple_container_impl!(impl<T> result::IntoIter<T> => "IntoIter");
1483simple_container_impl!(impl<T> result::Iter<'_, T> => "Iter");
1484simple_container_impl!(impl<T> result::IterMut<'_, T> => "IterMut");
1485
1486simple_map_impl!(impl<T, E> result::Result<T, E> => "Result");
1489
1490simple_container_impl!(impl<T> slice::Chunks<'_, T> => "Chunks");
1495simple_container_impl!(impl<T> slice::ChunksExact<'_, T> => "ChunksExact");
1496simple_container_impl!(impl<T> slice::ChunksExactMut<'_, T> => "ChunksExactMut");
1497simple_container_impl!(impl<T> slice::ChunksMut<'_, T> => "ChunksMut");
1498#[cfg(feature = "rust-1-60-0")]
1499simple_impl!(slice::EscapeAscii<'_> => "EscapeAscii");
1500simple_container_impl!(impl<T> slice::Iter<'_, T> => "Iter");
1501simple_container_impl!(impl<T> slice::IterMut<'_, T> => "IterMut");
1502simple_container_impl!(impl<T> slice::RChunks<'_, T> => "RChunks");
1503simple_container_impl!(impl<T> slice::RChunksExact<'_, T> => "RChunksExact");
1504simple_container_impl!(impl<T> slice::RChunksExactMut<'_, T> => "RChunksExactMut");
1505simple_container_impl!(impl<T> slice::RChunksMut<'_, T> => "RChunksMut");
1506
1507impl<T, P: FnMut(&T) -> bool> Named for slice::RSplit<'_, T, P>
1508where
1509 T: Named,
1510{
1511 #[inline]
1512 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1513 write!(f, "RSplit<{}>", T::NAME)
1514 }
1515}
1516
1517impl<T, P: FnMut(&T) -> bool> Named for slice::RSplitMut<'_, T, P>
1518where
1519 T: Named,
1520{
1521 #[inline]
1522 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1523 write!(f, "RSplitMut<{}>", T::NAME)
1524 }
1525}
1526
1527impl<T, P: FnMut(&T) -> bool> Named for slice::RSplitN<'_, T, P>
1528where
1529 T: Named,
1530{
1531 #[inline]
1532 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1533 write!(f, "RSplitN<{}>", T::NAME)
1534 }
1535}
1536
1537impl<T, P: FnMut(&T) -> bool> Named for slice::RSplitNMut<'_, T, P>
1538where
1539 T: Named,
1540{
1541 #[inline]
1542 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1543 write!(f, "RSplitNMut<{}>", T::NAME)
1544 }
1545}
1546
1547impl<T, P: FnMut(&T) -> bool> Named for slice::Split<'_, T, P>
1548where
1549 T: Named,
1550{
1551 #[inline]
1552 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1553 write!(f, "Split<{}>", T::NAME)
1554 }
1555}
1556
1557impl<T, P: FnMut(&T) -> bool> Named for slice::SplitInclusive<'_, T, P>
1558where
1559 T: Named,
1560{
1561 #[inline]
1562 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1563 write!(f, "SplitInclusive<{}>", T::NAME)
1564 }
1565}
1566
1567impl<T, P: FnMut(&T) -> bool> Named for slice::SplitInclusiveMut<'_, T, P>
1568where
1569 T: Named,
1570{
1571 #[inline]
1572 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1573 write!(f, "SplitInclusiveMut<{}>", T::NAME)
1574 }
1575}
1576
1577impl<T, P: FnMut(&T) -> bool> Named for slice::SplitMut<'_, T, P>
1578where
1579 T: Named,
1580{
1581 #[inline]
1582 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1583 write!(f, "SplitMut<{}>", T::NAME)
1584 }
1585}
1586
1587impl<T, P: FnMut(&T) -> bool> Named for slice::SplitN<'_, T, P>
1588where
1589 T: Named,
1590{
1591 #[inline]
1592 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1593 write!(f, "SplitN<{}>", T::NAME)
1594 }
1595}
1596
1597impl<T, P: FnMut(&T) -> bool> Named for slice::SplitNMut<'_, T, P>
1598where
1599 T: Named,
1600{
1601 #[inline]
1602 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1603 write!(f, "SplitNMut<{}>", T::NAME)
1604 }
1605}
1606
1607simple_container_impl!(impl<T> slice::Windows<'_, T> => "Windows");
1608
1609impl<T: ?Sized, Output: ?Sized> Named for dyn slice::SliceIndex<T, Output = Output> where T: Named, Output: Named {
1612 #[inline]
1613 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1614 write!(f, "{}[dyn SliceIndex] = {}", T::NAME, Output::NAME)
1615 }
1616}
1617
1618simple_impl!(str::Bytes<'_> => "StrBytes");
1623simple_impl!(str::CharIndices<'_> => "CharIndices");
1624simple_impl!(str::Chars<'_> => "Chars");
1625simple_impl!(str::EncodeUtf16<'_> => "EncodeUtf16");
1626simple_impl!(str::EscapeDebug<'_> => "EscapeDebug");
1627simple_impl!(str::EscapeDefault<'_> => "EscapeDefault");
1628simple_impl!(str::EscapeUnicode<'_> => "EscapeUnicode");
1629simple_impl!(str::Lines<'_> => "StrLines");
1630simple_impl!(str::ParseBoolError => "ParseBoolError");
1631simple_impl!(str::SplitAsciiWhitespace<'_> => "SplitAsciiWhiteSpace");
1632simple_impl!(str::SplitWhitespace<'_> => "SplitWhiteSpace");
1633simple_impl!(str::Utf8Error => "Utf8Error");
1634
1635#[cfg(any(feature = "std", feature = "alloc"))]
1640simple_impl!(string::Drain<'_> => "Drain");
1641#[cfg(any(feature = "std", feature = "alloc"))]
1642simple_impl!(string::FromUtf8Error => "FromUtf8Error");
1643#[cfg(any(feature = "std", feature = "alloc"))]
1644simple_impl!(string::FromUtf16Error => "FromUtf16Error");
1645#[cfg(any(feature = "std", feature = "alloc"))]
1646simple_impl!(string::String => "String");
1647
1648#[cfg(any(feature = "std", feature = "alloc"))]
1651simple_trait_impl!(dyn string::ToString => "ToString");
1652
1653simple_impl!(sync::atomic::AtomicBool => "bool");
1658simple_impl!(sync::atomic::AtomicI8 => "i8");
1659simple_impl!(sync::atomic::AtomicI16 => "i16");
1660simple_impl!(sync::atomic::AtomicI32 => "i32");
1661simple_impl!(sync::atomic::AtomicI64 => "i64");
1662simple_impl!(sync::atomic::AtomicIsize => "isize");
1663deref_impl!(impl<T> Named for sync::atomic::AtomicPtr<T>);
1664simple_impl!(sync::atomic::AtomicU8 => "u8");
1665simple_impl!(sync::atomic::AtomicU16 => "u16");
1666simple_impl!(sync::atomic::AtomicU32 => "u32");
1667simple_impl!(sync::atomic::AtomicU64 => "u64");
1668simple_impl!(sync::atomic::AtomicUsize => "usize");
1669
1670#[cfg(feature = "std")]
1671simple_container_impl!(impl<T> sync::mpsc::IntoIter<T> => "IntoIter");
1672#[cfg(feature = "std")]
1673simple_container_impl!(impl<T> sync::mpsc::Iter<'_, T> => "Iter");
1674#[cfg(feature = "std")]
1675simple_container_impl!(impl<T> sync::mpsc::Receiver<T> => "Receiver");
1676#[cfg(feature = "std")]
1677simple_impl!(sync::mpsc::RecvError => "ReceiveError");
1678#[cfg(feature = "std")]
1679simple_container_impl!(impl<T> sync::mpsc::SendError<T> => "SendError");
1680#[cfg(feature = "std")]
1681simple_container_impl!(impl<T> sync::mpsc::Sender<T> => "Sender");
1682#[cfg(feature = "std")]
1683simple_container_impl!(impl<T> sync::mpsc::SyncSender<T> => "SyncSender");
1684#[cfg(feature = "std")]
1685simple_container_impl!(impl<T> sync::mpsc::TryIter<'_, T> => "TryIter");
1686
1687#[cfg(any(feature = "std", feature = "alloc"))]
1688impl<T: ?Sized> Named for sync::Arc<T> where T: Named {
1689 const NAME: Name = Name(T::format_name);
1690
1691 #[inline]
1692 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1693 T::format_name(f)
1694 }
1695}
1696
1697#[cfg(feature = "std")]
1698simple_impl!(sync::Barrier => "Barrier");
1699#[cfg(feature = "std")]
1700simple_impl!(sync::BarrierWaitResult => "BarrierWaitResult");
1701#[cfg(feature = "std")]
1702simple_impl!(sync::Condvar => "Condvar");
1703#[cfg(feature = "std")]
1704deref_impl!(impl<T: ?Sized> Named for sync::Mutex<T>);
1705
1706#[cfg(feature = "std")]
1707impl<T: ?Sized> Named for sync::MutexGuard<'_, T> where T: Named {
1708 const NAME: Name = Name(T::format_name);
1709
1710 #[inline]
1711 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1712 T::format_name(f)
1713 }
1714}
1715
1716#[cfg(feature = "std")]
1717simple_impl!(sync::Once => "Once");
1718#[cfg(all(feature = "std", feature = "rust-1-70-0"))]
1719deref_impl!(impl<T> Named for sync::OnceLock<T>);
1720#[cfg(feature = "std")]
1721simple_impl!(sync::OnceState => "OnceState");
1722#[cfg(feature = "std")]
1723simple_container_impl!(impl<T> sync::PoisonError<T> => "LockPoisonError");
1724#[cfg(feature = "std")]
1725deref_impl!(impl<T: ?Sized> Named for sync::RwLock<T>);
1726
1727#[cfg(feature = "std")]
1728impl<T: ?Sized> Named for sync::RwLockReadGuard<'_, T> where T: Named {
1729 const NAME: Name = Name(T::format_name);
1730
1731 #[inline]
1732 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1733 T::format_name(f)
1734 }
1735}
1736
1737#[cfg(feature = "std")]
1738impl<T: ?Sized> Named for sync::RwLockWriteGuard<'_, T> where T: Named {
1739 const NAME: Name = Name(T::format_name);
1740
1741 #[inline]
1742 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1743 T::format_name(f)
1744 }
1745}
1746
1747#[cfg(feature = "std")]
1748simple_impl!(sync::WaitTimeoutResult => "WaitTimeoutResult");
1749#[cfg(any(feature = "std", feature = "alloc"))]
1750impl<T: ?Sized> Named for sync::Weak<T> where T: Named {
1751 #[inline]
1752 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1753 write!(f, "ArcWeak<{}>", T::NAME)
1754 }
1755}
1756
1757simple_impl!(sync::atomic::Ordering => "AtomicOrdering");
1760
1761#[cfg(feature = "std")]
1762simple_impl!(sync::mpsc::RecvTimeoutError => "ReceiveTimeoutError");
1763#[cfg(feature = "std")]
1764simple_impl!(sync::mpsc::TryRecvError => "TryReceiveError");
1765#[cfg(feature = "std")]
1766simple_container_impl!(impl<T> sync::mpsc::TrySendError<T> => "TrySendError");
1767
1768#[cfg(feature = "std")]
1769simple_container_impl!(impl<T> sync::TryLockError<T> => "TryLockError");
1770
1771simple_impl!(task::Context<'_> => "TaskContext");
1776simple_impl!(task::RawWaker => "RawWaker");
1777simple_impl!(task::RawWakerVTable => "RawWakerVTable");
1778simple_impl!(task::Waker => "Waker");
1779
1780simple_container_impl!(impl<T> task::Poll<T> => "Poll");
1783
1784#[cfg(feature = "std")]
1789simple_impl!(thread::AccessError => "ThreadAccessError");
1790#[cfg(feature = "std")]
1791simple_impl!(thread::Builder => "ThreadBuilder");
1792#[cfg(feature = "std")]
1793simple_container_impl!(impl<T> thread::JoinHandle<T> => "JoinHandle");
1794
1795#[cfg(feature = "std")]
1796impl<T: 'static> Named for thread::LocalKey<T> where T: Named {
1797 const NAME: Name = Name(T::format_name);
1798
1799 #[inline]
1800 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1801 T::format_name(f)
1802 }
1803}
1804
1805#[cfg(all(feature = "std", feature = "rust-1-63-0"))]
1806impl<'scope, 'env: 'scope> Named for thread::Scope<'scope, 'env> {
1807 #[inline]
1808 fn format_name(f: &mut fmt::Formatter<'_>) -> fmt::Result {
1809 write!(f, "ThreadScope")
1810 }
1811}
1812
1813#[cfg(all(feature = "std", feature = "rust-1-63-0"))]
1814simple_container_impl!(impl<T> thread::ScopedJoinHandle<'_, T> => "ScopedJoinHandle");
1815#[cfg(feature = "std")]
1816simple_impl!(thread::Thread => "Thread");
1817#[cfg(feature = "std")]
1818simple_impl!(thread::ThreadId => "ThreadId");
1819
1820simple_impl!(time::Duration => "Duration");
1825#[cfg(feature = "std")]
1826simple_impl!(time::Instant => "Instant");
1827#[cfg(feature = "std")]
1828simple_impl!(time::SystemTime => "SystemTime");
1829#[cfg(feature = "std")]
1830simple_impl!(time::SystemTimeError => "SystemTimeError");
1831simple_impl!(time::TryFromFloatSecsError => "TryFromFloatSecsError");
1832
1833#[cfg(any(feature = "std", feature = "alloc"))]
1838simple_container_impl!(impl<T> vec::Drain<'_, T> => "Drain");
1839#[cfg(any(feature = "std", feature = "alloc"))]
1840simple_container_impl!(impl<T> vec::IntoIter<T> => "IntoIter");
1841#[cfg(any(feature = "std", feature = "alloc"))]
1842simple_container_impl!(impl<I: Iterator> vec::Splice<'_, I> => "Drain");
1843#[cfg(any(feature = "std", feature = "alloc"))]
1844simple_container_impl!(impl<T> vec::Vec<T> => "Vec");