1 | #![allow (unused_macros)] |
2 | |
3 | macro_rules! feature { |
4 | ( |
5 | #![$meta:meta] |
6 | $($item:item)* |
7 | ) => { |
8 | $( |
9 | #[cfg($meta)] |
10 | #[cfg_attr(docsrs, doc(cfg($meta)))] |
11 | $item |
12 | )* |
13 | } |
14 | } |
15 | |
16 | /// Enables Windows-specific code. |
17 | /// Use this macro instead of `cfg(windows)` to generate docs properly. |
18 | macro_rules! cfg_windows { |
19 | ($($item:item)*) => { |
20 | $( |
21 | #[cfg(any(all(doc, docsrs), windows))] |
22 | #[cfg_attr(docsrs, doc(cfg(windows)))] |
23 | $item |
24 | )* |
25 | } |
26 | } |
27 | |
28 | /// Enables unstable Windows-specific code. |
29 | /// Use this macro instead of `cfg(windows)` to generate docs properly. |
30 | macro_rules! cfg_unstable_windows { |
31 | ($($item:item)*) => { |
32 | $( |
33 | #[cfg(all(any(all(doc, docsrs), windows), tokio_unstable))] |
34 | #[cfg_attr(docsrs, doc(cfg(all(windows, tokio_unstable))))] |
35 | $item |
36 | )* |
37 | } |
38 | } |
39 | |
40 | /// Enables enter::block_on. |
41 | macro_rules! cfg_block_on { |
42 | ($($item:item)*) => { |
43 | $( |
44 | #[cfg(any( |
45 | feature = "fs" , |
46 | feature = "net" , |
47 | feature = "io-std" , |
48 | feature = "rt" , |
49 | ))] |
50 | $item |
51 | )* |
52 | } |
53 | } |
54 | |
55 | /// Enables internal `AtomicWaker` impl. |
56 | macro_rules! cfg_atomic_waker_impl { |
57 | ($($item:item)*) => { |
58 | $( |
59 | #[cfg(any( |
60 | feature = "net" , |
61 | feature = "process" , |
62 | feature = "rt" , |
63 | feature = "signal" , |
64 | feature = "time" , |
65 | ))] |
66 | #[cfg(not(loom))] |
67 | $item |
68 | )* |
69 | } |
70 | } |
71 | |
72 | macro_rules! cfg_aio { |
73 | ($($item:item)*) => { |
74 | $( |
75 | #[cfg(all(any(docsrs, target_os = "freebsd" ), feature = "net" ))] |
76 | #[cfg_attr(docsrs, |
77 | doc(cfg(all(target_os = "freebsd" , feature = "net" ))) |
78 | )] |
79 | $item |
80 | )* |
81 | } |
82 | } |
83 | |
84 | macro_rules! cfg_fs { |
85 | ($($item:item)*) => { |
86 | $( |
87 | #[cfg(feature = "fs" )] |
88 | #[cfg(not(target_os = "wasi" ))] |
89 | #[cfg_attr(docsrs, doc(cfg(feature = "fs" )))] |
90 | $item |
91 | )* |
92 | } |
93 | } |
94 | |
95 | macro_rules! cfg_io_blocking { |
96 | ($($item:item)*) => { |
97 | $( #[cfg(any( |
98 | feature = "io-std" , |
99 | feature = "fs" , |
100 | all(windows, feature = "process" ), |
101 | ))] $item )* |
102 | } |
103 | } |
104 | |
105 | macro_rules! cfg_io_driver { |
106 | ($($item:item)*) => { |
107 | $( |
108 | #[cfg(any( |
109 | feature = "net" , |
110 | all(unix, feature = "process" ), |
111 | all(unix, feature = "signal" ), |
112 | ))] |
113 | #[cfg_attr(docsrs, doc(cfg(any( |
114 | feature = "net" , |
115 | all(unix, feature = "process" ), |
116 | all(unix, feature = "signal" ), |
117 | ))))] |
118 | $item |
119 | )* |
120 | } |
121 | } |
122 | |
123 | macro_rules! cfg_io_driver_impl { |
124 | ( $( $item:item )* ) => { |
125 | $( |
126 | #[cfg(any( |
127 | feature = "net" , |
128 | all(unix, feature = "process" ), |
129 | all(unix, feature = "signal" ), |
130 | ))] |
131 | $item |
132 | )* |
133 | } |
134 | } |
135 | |
136 | macro_rules! cfg_not_io_driver { |
137 | ($($item:item)*) => { |
138 | $( |
139 | #[cfg(not(any( |
140 | feature = "net" , |
141 | all(unix, feature = "process" ), |
142 | all(unix, feature = "signal" ), |
143 | )))] |
144 | $item |
145 | )* |
146 | } |
147 | } |
148 | |
149 | macro_rules! cfg_io_readiness { |
150 | ($($item:item)*) => { |
151 | $( |
152 | #[cfg(feature = "net" )] |
153 | $item |
154 | )* |
155 | } |
156 | } |
157 | |
158 | macro_rules! cfg_io_std { |
159 | ($($item:item)*) => { |
160 | $( |
161 | #[cfg(feature = "io-std" )] |
162 | #[cfg_attr(docsrs, doc(cfg(feature = "io-std" )))] |
163 | $item |
164 | )* |
165 | } |
166 | } |
167 | |
168 | macro_rules! cfg_io_util { |
169 | ($($item:item)*) => { |
170 | $( |
171 | #[cfg(feature = "io-util" )] |
172 | #[cfg_attr(docsrs, doc(cfg(feature = "io-util" )))] |
173 | $item |
174 | )* |
175 | } |
176 | } |
177 | |
178 | macro_rules! cfg_not_io_util { |
179 | ($($item:item)*) => { |
180 | $( #[cfg(not(feature = "io-util" ))] $item )* |
181 | } |
182 | } |
183 | |
184 | macro_rules! cfg_loom { |
185 | ($($item:item)*) => { |
186 | $( #[cfg(loom)] $item )* |
187 | } |
188 | } |
189 | |
190 | macro_rules! cfg_not_loom { |
191 | ($($item:item)*) => { |
192 | $( #[cfg(not(loom))] $item )* |
193 | } |
194 | } |
195 | |
196 | macro_rules! cfg_macros { |
197 | ($($item:item)*) => { |
198 | $( |
199 | #[cfg(feature = "macros" )] |
200 | #[cfg_attr(docsrs, doc(cfg(feature = "macros" )))] |
201 | $item |
202 | )* |
203 | } |
204 | } |
205 | |
206 | macro_rules! cfg_metrics { |
207 | ($($item:item)*) => { |
208 | $( |
209 | // For now, metrics is only disabled in loom tests. |
210 | // When stabilized, it might have a dedicated feature flag. |
211 | #[cfg(all(tokio_unstable, not(loom)))] |
212 | #[cfg_attr(docsrs, doc(cfg(tokio_unstable)))] |
213 | $item |
214 | )* |
215 | } |
216 | } |
217 | |
218 | macro_rules! cfg_not_metrics { |
219 | ($($item:item)*) => { |
220 | $( |
221 | #[cfg(not(all(tokio_unstable, not(loom))))] |
222 | $item |
223 | )* |
224 | } |
225 | } |
226 | |
227 | macro_rules! cfg_not_rt_and_metrics_and_net { |
228 | ($($item:item)*) => { |
229 | $( #[cfg(not(all(feature = "net" , feature = "rt" , all(tokio_unstable, not(loom)))))]$item )* |
230 | } |
231 | } |
232 | |
233 | macro_rules! cfg_net_or_process { |
234 | ($($item:item)*) => { |
235 | $( |
236 | #[cfg(any(feature = "net" , feature = "process" ))] |
237 | #[cfg_attr(docsrs, doc(cfg(any(feature = "net" , feature = "process" ))))] |
238 | $item |
239 | )* |
240 | } |
241 | } |
242 | |
243 | macro_rules! cfg_net { |
244 | ($($item:item)*) => { |
245 | $( |
246 | #[cfg(feature = "net" )] |
247 | #[cfg_attr(docsrs, doc(cfg(feature = "net" )))] |
248 | $item |
249 | )* |
250 | } |
251 | } |
252 | |
253 | macro_rules! cfg_net_unix { |
254 | ($($item:item)*) => { |
255 | $( |
256 | #[cfg(all(unix, feature = "net" ))] |
257 | #[cfg_attr(docsrs, doc(cfg(all(unix, feature = "net" ))))] |
258 | $item |
259 | )* |
260 | } |
261 | } |
262 | |
263 | macro_rules! cfg_net_windows { |
264 | ($($item:item)*) => { |
265 | $( |
266 | #[cfg(all(any(all(doc, docsrs), windows), feature = "net" ))] |
267 | #[cfg_attr(docsrs, doc(cfg(all(windows, feature = "net" ))))] |
268 | $item |
269 | )* |
270 | } |
271 | } |
272 | |
273 | macro_rules! cfg_process { |
274 | ($($item:item)*) => { |
275 | $( |
276 | #[cfg(feature = "process" )] |
277 | #[cfg_attr(docsrs, doc(cfg(feature = "process" )))] |
278 | #[cfg(not(loom))] |
279 | #[cfg(not(target_os = "wasi" ))] |
280 | $item |
281 | )* |
282 | } |
283 | } |
284 | |
285 | macro_rules! cfg_process_driver { |
286 | ($($item:item)*) => { |
287 | #[cfg(unix)] |
288 | #[cfg(not(loom))] |
289 | cfg_process! { $($item)* } |
290 | } |
291 | } |
292 | |
293 | macro_rules! cfg_not_process_driver { |
294 | ($($item:item)*) => { |
295 | $( |
296 | #[cfg(not(all(unix, not(loom), feature = "process" )))] |
297 | $item |
298 | )* |
299 | } |
300 | } |
301 | |
302 | macro_rules! cfg_signal { |
303 | ($($item:item)*) => { |
304 | $( |
305 | #[cfg(feature = "signal" )] |
306 | #[cfg_attr(docsrs, doc(cfg(feature = "signal" )))] |
307 | #[cfg(not(loom))] |
308 | #[cfg(not(target_os = "wasi" ))] |
309 | $item |
310 | )* |
311 | } |
312 | } |
313 | |
314 | macro_rules! cfg_signal_internal { |
315 | ($($item:item)*) => { |
316 | $( |
317 | #[cfg(any(feature = "signal" , all(unix, feature = "process" )))] |
318 | #[cfg(not(loom))] |
319 | $item |
320 | )* |
321 | } |
322 | } |
323 | |
324 | macro_rules! cfg_signal_internal_and_unix { |
325 | ($($item:item)*) => { |
326 | #[cfg(unix)] |
327 | cfg_signal_internal! { $($item)* } |
328 | } |
329 | } |
330 | |
331 | macro_rules! cfg_not_signal_internal { |
332 | ($($item:item)*) => { |
333 | $( |
334 | #[cfg(any(loom, not(unix), not(any(feature = "signal" , all(unix, feature = "process" )))))] |
335 | $item |
336 | )* |
337 | } |
338 | } |
339 | |
340 | macro_rules! cfg_sync { |
341 | ($($item:item)*) => { |
342 | $( |
343 | #[cfg(feature = "sync" )] |
344 | #[cfg_attr(docsrs, doc(cfg(feature = "sync" )))] |
345 | $item |
346 | )* |
347 | } |
348 | } |
349 | |
350 | macro_rules! cfg_not_sync { |
351 | ($($item:item)*) => { |
352 | $( #[cfg(not(feature = "sync" ))] $item )* |
353 | } |
354 | } |
355 | |
356 | macro_rules! cfg_rt { |
357 | ($($item:item)*) => { |
358 | $( |
359 | #[cfg(feature = "rt" )] |
360 | #[cfg_attr(docsrs, doc(cfg(feature = "rt" )))] |
361 | $item |
362 | )* |
363 | } |
364 | } |
365 | |
366 | macro_rules! cfg_not_rt { |
367 | ($($item:item)*) => { |
368 | $( #[cfg(not(feature = "rt" ))] $item )* |
369 | } |
370 | } |
371 | |
372 | macro_rules! cfg_rt_multi_thread { |
373 | ($($item:item)*) => { |
374 | $( |
375 | #[cfg(all(feature = "rt-multi-thread" , not(target_os = "wasi" )))] |
376 | #[cfg_attr(docsrs, doc(cfg(feature = "rt-multi-thread" )))] |
377 | $item |
378 | )* |
379 | } |
380 | } |
381 | |
382 | macro_rules! cfg_not_rt_multi_thread { |
383 | ($($item:item)*) => { |
384 | $( #[cfg(not(feature = "rt-multi-thread" ))] $item )* |
385 | } |
386 | } |
387 | |
388 | macro_rules! cfg_taskdump { |
389 | ($($item:item)*) => { |
390 | $( |
391 | #[cfg(all( |
392 | tokio_unstable, |
393 | tokio_taskdump, |
394 | feature = "rt" , |
395 | target_os = "linux" , |
396 | any( |
397 | target_arch = "aarch64" , |
398 | target_arch = "x86" , |
399 | target_arch = "x86_64" |
400 | ) |
401 | ))] |
402 | $item |
403 | )* |
404 | }; |
405 | } |
406 | |
407 | macro_rules! cfg_not_taskdump { |
408 | ($($item:item)*) => { |
409 | $( |
410 | #[cfg(not(all( |
411 | tokio_unstable, |
412 | tokio_taskdump, |
413 | feature = "rt" , |
414 | target_os = "linux" , |
415 | any( |
416 | target_arch = "aarch64" , |
417 | target_arch = "x86" , |
418 | target_arch = "x86_64" |
419 | ) |
420 | )))] |
421 | $item |
422 | )* |
423 | }; |
424 | } |
425 | |
426 | macro_rules! cfg_test_util { |
427 | ($($item:item)*) => { |
428 | $( |
429 | #[cfg(feature = "test-util" )] |
430 | #[cfg_attr(docsrs, doc(cfg(feature = "test-util" )))] |
431 | $item |
432 | )* |
433 | } |
434 | } |
435 | |
436 | macro_rules! cfg_not_test_util { |
437 | ($($item:item)*) => { |
438 | $( #[cfg(not(feature = "test-util" ))] $item )* |
439 | } |
440 | } |
441 | |
442 | macro_rules! cfg_time { |
443 | ($($item:item)*) => { |
444 | $( |
445 | #[cfg(feature = "time" )] |
446 | #[cfg_attr(docsrs, doc(cfg(feature = "time" )))] |
447 | $item |
448 | )* |
449 | } |
450 | } |
451 | |
452 | macro_rules! cfg_not_time { |
453 | ($($item:item)*) => { |
454 | $( #[cfg(not(feature = "time" ))] $item )* |
455 | } |
456 | } |
457 | |
458 | macro_rules! cfg_trace { |
459 | ($($item:item)*) => { |
460 | $( |
461 | #[cfg(all(tokio_unstable, feature = "tracing" ))] |
462 | #[cfg_attr(docsrs, doc(cfg(all(tokio_unstable, feature = "tracing" ))))] |
463 | $item |
464 | )* |
465 | }; |
466 | } |
467 | |
468 | macro_rules! cfg_unstable { |
469 | ($($item:item)*) => { |
470 | $( |
471 | #[cfg(tokio_unstable)] |
472 | #[cfg_attr(docsrs, doc(cfg(tokio_unstable)))] |
473 | $item |
474 | )* |
475 | }; |
476 | } |
477 | |
478 | macro_rules! cfg_not_trace { |
479 | ($($item:item)*) => { |
480 | $( |
481 | #[cfg(any(not(tokio_unstable), not(feature = "tracing" )))] |
482 | $item |
483 | )* |
484 | } |
485 | } |
486 | |
487 | macro_rules! cfg_coop { |
488 | ($($item:item)*) => { |
489 | $( |
490 | #[cfg(any( |
491 | feature = "fs" , |
492 | feature = "io-std" , |
493 | feature = "net" , |
494 | feature = "process" , |
495 | feature = "rt" , |
496 | feature = "signal" , |
497 | feature = "sync" , |
498 | feature = "time" , |
499 | ))] |
500 | $item |
501 | )* |
502 | } |
503 | } |
504 | |
505 | macro_rules! cfg_not_coop { |
506 | ($($item:item)*) => { |
507 | $( |
508 | #[cfg(not(any( |
509 | feature = "fs" , |
510 | feature = "io-std" , |
511 | feature = "net" , |
512 | feature = "process" , |
513 | feature = "rt" , |
514 | feature = "signal" , |
515 | feature = "sync" , |
516 | feature = "time" , |
517 | )))] |
518 | $item |
519 | )* |
520 | } |
521 | } |
522 | |
523 | macro_rules! cfg_has_atomic_u64 { |
524 | ($($item:item)*) => { |
525 | $( |
526 | #[cfg(target_has_atomic = "64" )] |
527 | $item |
528 | )* |
529 | } |
530 | } |
531 | |
532 | macro_rules! cfg_not_has_atomic_u64 { |
533 | ($($item:item)*) => { |
534 | $( |
535 | #[cfg(not(target_has_atomic = "64" ))] |
536 | $item |
537 | )* |
538 | } |
539 | } |
540 | |
541 | macro_rules! cfg_has_const_mutex_new { |
542 | ($($item:item)*) => { |
543 | $( |
544 | #[cfg(not(all(loom, test)))] |
545 | $item |
546 | )* |
547 | } |
548 | } |
549 | |
550 | macro_rules! cfg_not_has_const_mutex_new { |
551 | ($($item:item)*) => { |
552 | $( |
553 | #[cfg(all(loom, test))] |
554 | $item |
555 | )* |
556 | } |
557 | } |
558 | |
559 | macro_rules! cfg_not_wasi { |
560 | ($($item:item)*) => { |
561 | $( |
562 | #[cfg(not(target_os = "wasi" ))] |
563 | $item |
564 | )* |
565 | } |
566 | } |
567 | |
568 | macro_rules! cfg_is_wasm_not_wasi { |
569 | ($($item:item)*) => { |
570 | $( |
571 | #[cfg(all(target_family = "wasm" , not(target_os = "wasi" )))] |
572 | $item |
573 | )* |
574 | } |
575 | } |
576 | |