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