1#![no_std]
13
14#[macro_export]
76macro_rules! replace_self_ty {
77 (
78 ($($new_self_ty:tt)*)
80
81 $($t:tt)*
83 ) => {
84 $crate::__replace_self_ty_inner! {
85 ($($new_self_ty)*)
86 ($($t)*)
87 ()
88
89 ($crate::__replace_self_ty_out)
90 }
91 };
92}
93
94#[doc(hidden)]
95#[macro_export]
96macro_rules! __replace_self_ty_inner {
97 (
99 ($($new_self_ty:tt)*)
100 ()
101 ($($parsed:tt)*)
102
103 ($($out_macro:tt)*)
104 $($out_args:tt)*
105 ) => {
106 $($out_macro)* ! {
108 $($out_args)*
109
110 ($($parsed)*)
111 }
112 };
113
114 (
116 ($($new_self_ty:tt)*)
117 (Self $($rest:tt)*)
118 ($($parsed:tt)*)
119
120 ($($out_macro:tt)*)
121 $($out_args:tt)*
122 ) => {
123 $crate::__replace_self_ty_inner! {
124 ($($new_self_ty)*)
125 ($($rest)*)
126 ($($parsed)* $($new_self_ty)*)
127
128 ($($out_macro)*)
129 $($out_args)*
130 }
131 };
132
133 (
137 ($($new_self_ty:tt)*)
138 (($($inner:tt)*) $($rest:tt)*)
139 ($($parsed:tt)*)
140
141 ($($out_macro:tt)*)
142 $($out_args:tt)*
143 ) => {
144 $crate::__replace_self_ty_inner! {
145 ($($new_self_ty)*)
146 ($($inner)*)
147 ()
148
149 ($crate::__replace_self_ty_in_parentheses)
150 ($($new_self_ty)*)
151 ($($rest)*)
152 ($($parsed)*)
153
154 ($($out_macro)*)
155 ($($out_args)*)
156 }
157 };
158
159 (
161 ($($new_self_ty:tt)*)
162 ([$($inner:tt)*] $($rest:tt)*)
163 ($($parsed:tt)*)
164
165 ($($out_macro:tt)*)
166 $($out_args:tt)*
167 ) => {
168 $crate::__replace_self_ty_inner! {
169 ($($new_self_ty)*)
170 ($($inner)*)
171 ()
172
173 ($crate::__replace_self_ty_in_square_brackets)
174 ($($new_self_ty)*)
175 ($($rest)*)
176 ($($parsed)*)
177
178 ($($out_macro)*)
179 ($($out_args)*)
180 }
181 };
182
183 (
185 ($($new_self_ty:tt)*)
186 ({$($inner:tt)*} $($rest:tt)*)
187 ($($parsed:tt)*)
188
189 ($($out_macro:tt)*)
190 $($out_args:tt)*
191 ) => {
192 $crate::__replace_self_ty_inner! {
193 ($($new_self_ty)*)
194 ($($inner)*)
195 ()
196
197 ($crate::__replace_self_ty_in_curly_brackets)
198 ($($new_self_ty)*)
199 ($($rest)*)
200 ($($parsed)*)
201
202 ($($out_macro)*)
203 ($($out_args)*)
204 }
205 };
206
207 (
209 ($($new_self_ty:tt)*)
210 ($token:tt $($rest:tt)*)
211 ($($parsed:tt)*)
212
213 ($($out_macro:tt)*)
214 $($out_args:tt)*
215 ) => {
216 $crate::__replace_self_ty_inner! {
217 ($($new_self_ty)*)
218 ($($rest)*)
219 ($($parsed)* $token)
220
221 ($($out_macro)*)
222 $($out_args)*
223 }
224 };
225}
226
227#[doc(hidden)]
228#[macro_export]
229macro_rules! __replace_self_ty_in_parentheses {
230 (
231 ($($new_self_ty:tt)*)
232 ($($rest:tt)*)
233 ($($parsed:tt)*)
234
235 ($($out_macro:tt)*)
236 ($($out_args:tt)*)
237
238 ($($parsed_group:tt)*)
239 ) => {
240 $crate::__replace_self_ty_inner! {
241 ($($new_self_ty)*)
242 ($($rest)*)
243 ($($parsed)* ($($parsed_group)*))
244
245 ($($out_macro)*)
246 $($out_args)*
247 }
248 };
249}
250
251#[doc(hidden)]
252#[macro_export]
253macro_rules! __replace_self_ty_in_square_brackets {
254 (
255 ($($new_self_ty:tt)*)
256 ($($rest:tt)*)
257 ($($parsed:tt)*)
258
259 ($($out_macro:tt)*)
260 ($($out_args:tt)*)
261
262 ($($parsed_group:tt)*)
263 ) => {
264 $crate::__replace_self_ty_inner! {
265 ($($new_self_ty)*)
266 ($($rest)*)
267 ($($parsed)* [$($parsed_group)*])
268
269 ($($out_macro)*)
270 $($out_args)*
271 }
272 };
273}
274
275#[doc(hidden)]
276#[macro_export]
277macro_rules! __replace_self_ty_in_curly_brackets {
278 (
279 ($($new_self_ty:tt)*)
280 ($($rest:tt)*)
281 ($($parsed:tt)*)
282
283 ($($out_macro:tt)*)
284 ($($out_args:tt)*)
285
286 ($($parsed_group:tt)*)
287 ) => {
288 $crate::__replace_self_ty_inner! {
289 ($($new_self_ty)*)
290 ($($rest)*)
291 ($($parsed)* {$($parsed_group)*})
292
293 ($($out_macro)*)
294 $($out_args)*
295 }
296 };
297}
298
299#[doc(hidden)]
300#[macro_export]
301macro_rules! __replace_self_ty_out {
302 (
303 ($($parsed:tt)*)
304 ) => {
305 $($parsed)*
306 };
307}