dyn_clone/
macros.rs
1use crate::DynClone;
2
3#[macro_export]
35macro_rules! clone_trait_object {
36 ($($path:tt)+) => {
37 $crate::__internal_clone_trait_object!(begin $($path)+);
38 };
39}
40
41#[doc(hidden)]
42#[macro_export]
43macro_rules! __internal_clone_trait_object {
44 (begin < $($rest:tt)*) => {
46 $crate::__internal_clone_trait_object!(generics () () $($rest)*);
47 };
48
49 (begin $first:tt $($rest:tt)*) => {
51 $crate::__internal_clone_trait_object!(path () ($first) $($rest)*);
52 };
53
54 (generics ($($generics:tt)*) () > $($rest:tt)*) => {
56 $crate::__internal_clone_trait_object!(path ($($generics)*) () $($rest)*);
57 };
58
59 (generics ($($generics:tt)*) ($($brackets:tt)*) < $($rest:tt)*) => {
61 $crate::__internal_clone_trait_object!(generics ($($generics)* <) ($($brackets)* <) $($rest)*);
62 };
63
64 (generics ($($generics:tt)*) (< $($brackets:tt)*) > $($rest:tt)*) => {
66 $crate::__internal_clone_trait_object!(generics ($($generics)* >) ($($brackets)*) $($rest)*);
67 };
68
69 (generics ($($generics:tt)*) ($($brackets:tt)*) $first:tt $($rest:tt)*) => {
71 $crate::__internal_clone_trait_object!(generics ($($generics)* $first) ($($brackets)*) $($rest)*);
72 };
73
74 (path ($($generics:tt)*) ($($path:tt)*) where $($rest:tt)*) => {
76 $crate::__internal_clone_trait_object!(impl ($($generics)*) ($($path)*) ($($rest)*));
77 };
78
79 (path ($($generics:tt)*) ($($path:tt)*)) => {
81 $crate::__internal_clone_trait_object!(impl ($($generics)*) ($($path)*) ());
82 };
83
84 (path ($($generics:tt)*) ($($path:tt)*) $first:tt $($rest:tt)*) => {
86 $crate::__internal_clone_trait_object!(path ($($generics)*) ($($path)* $first) $($rest)*);
87 };
88
89 (impl ($($generics:tt)*) ($($path:tt)*) ($($bound:tt)*)) => {
91 #[allow(unknown_lints, non_local_definitions)] impl<'clone, $($generics)*> $crate::__private::Clone for $crate::__private::Box<dyn $($path)* + 'clone> where $($bound)* {
93 fn clone(&self) -> Self {
94 $crate::clone_box(&**self)
95 }
96 }
97
98 #[allow(unknown_lints, non_local_definitions)]
99 impl<'clone, $($generics)*> $crate::__private::Clone for $crate::__private::Box<dyn $($path)* + $crate::__private::Send + 'clone> where $($bound)* {
100 fn clone(&self) -> Self {
101 $crate::clone_box(&**self)
102 }
103 }
104
105 #[allow(unknown_lints, non_local_definitions)]
106 impl<'clone, $($generics)*> $crate::__private::Clone for $crate::__private::Box<dyn $($path)* + $crate::__private::Sync + 'clone> where $($bound)* {
107 fn clone(&self) -> Self {
108 $crate::clone_box(&**self)
109 }
110 }
111
112 #[allow(unknown_lints, non_local_definitions)]
113 impl<'clone, $($generics)*> $crate::__private::Clone for $crate::__private::Box<dyn $($path)* + $crate::__private::Send + $crate::__private::Sync + 'clone> where $($bound)* {
114 fn clone(&self) -> Self {
115 $crate::clone_box(&**self)
116 }
117 }
118 };
119}
120
121clone_trait_object!(DynClone);