1#[macro_export]
33macro_rules! hash_trait_object {
34 ($($path:tt)+) => {
35 $crate::__internal_hash_trait_object!(begin $($path)+);
36 };
37}
38
39#[doc(hidden)]
40#[macro_export]
41macro_rules! __internal_hash_trait_object {
42 (begin < $($rest:tt)*) => {
44 $crate::__internal_hash_trait_object!(generics () () $($rest)*);
45 };
46
47 (begin $first:tt $($rest:tt)*) => {
49 $crate::__internal_hash_trait_object!(path () ($first) $($rest)*);
50 };
51
52 (generics ($($generics:tt)*) () > $($rest:tt)*) => {
54 $crate::__internal_hash_trait_object!(path ($($generics)*) () $($rest)*);
55 };
56
57 (generics ($($generics:tt)*) ($($brackets:tt)*) < $($rest:tt)*) => {
59 $crate::__internal_hash_trait_object!(generics ($($generics)* <) ($($brackets)* <) $($rest)*);
60 };
61
62 (generics ($($generics:tt)*) (< $($brackets:tt)*) > $($rest:tt)*) => {
64 $crate::__internal_hash_trait_object!(generics ($($generics)* >) ($($brackets)*) $($rest)*);
65 };
66
67 (generics ($($generics:tt)*) ($($brackets:tt)*) $first:tt $($rest:tt)*) => {
69 $crate::__internal_hash_trait_object!(generics ($($generics)* $first) ($($brackets)*) $($rest)*);
70 };
71
72 (path ($($generics:tt)*) ($($path:tt)*) where $($rest:tt)*) => {
74 $crate::__internal_hash_trait_object!(impl ($($generics)*) ($($path)*) ($($rest)*));
75 };
76
77 (path ($($generics:tt)*) ($($path:tt)*)) => {
79 $crate::__internal_hash_trait_object!(impl ($($generics)*) ($($path)*) ());
80 };
81
82 (path ($($generics:tt)*) ($($path:tt)*) $first:tt $($rest:tt)*) => {
84 $crate::__internal_hash_trait_object!(path ($($generics)*) ($($path)* $first) $($rest)*);
85 };
86
87 (impl ($($generics:tt)*) ($($path:tt)*) ($($bound:tt)*)) => {
89 impl<'hash, $($generics)*> $crate::__private::Hash for dyn $($path)* + 'hash where $($bound)* {
90 fn hash<H: $crate::__private::Hasher>(&self, state: &mut H) {
91 $crate::DynHash::dyn_hash(self, state);
92 }
93 }
94 impl<'hash, $($generics)*> $crate::__private::Hash for dyn $($path)* + $crate::__private::Send + 'hash where $($bound)* {
95 fn hash<H: $crate::__private::Hasher>(&self, state: &mut H) {
96 $crate::DynHash::dyn_hash(self, state);
97 }
98 }
99 impl<'hash, $($generics)*> $crate::__private::Hash for dyn $($path)* + $crate::__private::Sync + 'hash where $($bound)* {
100 fn hash<H: $crate::__private::Hasher>(&self, state: &mut H) {
101 $crate::DynHash::dyn_hash(self, state);
102 }
103 }
104 impl<'hash, $($generics)*> $crate::__private::Hash for dyn $($path)* + $crate::__private::Send + $crate::__private::Sync + 'hash where $($bound)* {
105 fn hash<H: $crate::__private::Hasher>(&self, state: &mut H) {
106 $crate::DynHash::dyn_hash(self, state);
107 }
108 }
109 };
110}