1#![allow(unused_macros)]
2
3macro_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.
18macro_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.
30macro_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.
41macro_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.
56macro_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
72macro_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
84macro_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
95macro_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
105macro_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
123macro_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
136macro_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
149macro_rules! cfg_io_readiness {
150 ($($item:item)*) => {
151 $(
152 #[cfg(feature = "net")]
153 $item
154 )*
155 }
156}
157
158macro_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
168macro_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
178macro_rules! cfg_not_io_util {
179 ($($item:item)*) => {
180 $( #[cfg(not(feature = "io-util"))] $item )*
181 }
182}
183
184macro_rules! cfg_loom {
185 ($($item:item)*) => {
186 $( #[cfg(loom)] $item )*
187 }
188}
189
190macro_rules! cfg_not_loom {
191 ($($item:item)*) => {
192 $( #[cfg(not(loom))] $item )*
193 }
194}
195
196macro_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
206macro_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
218macro_rules! cfg_not_metrics {
219 ($($item:item)*) => {
220 $(
221 #[cfg(not(all(tokio_unstable, not(loom))))]
222 $item
223 )*
224 }
225}
226
227macro_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
233macro_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
243macro_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
253macro_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
263macro_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
273macro_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
285macro_rules! cfg_process_driver {
286 ($($item:item)*) => {
287 #[cfg(unix)]
288 #[cfg(not(loom))]
289 cfg_process! { $($item)* }
290 }
291}
292
293macro_rules! cfg_not_process_driver {
294 ($($item:item)*) => {
295 $(
296 #[cfg(not(all(unix, not(loom), feature = "process")))]
297 $item
298 )*
299 }
300}
301
302macro_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
314macro_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
324macro_rules! cfg_signal_internal_and_unix {
325 ($($item:item)*) => {
326 #[cfg(unix)]
327 cfg_signal_internal! { $($item)* }
328 }
329}
330
331macro_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
340macro_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
350macro_rules! cfg_not_sync {
351 ($($item:item)*) => {
352 $( #[cfg(not(feature = "sync"))] $item )*
353 }
354}
355
356macro_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
366macro_rules! cfg_not_rt {
367 ($($item:item)*) => {
368 $( #[cfg(not(feature = "rt"))] $item )*
369 }
370}
371
372macro_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
382macro_rules! cfg_not_rt_multi_thread {
383 ($($item:item)*) => {
384 $( #[cfg(not(feature = "rt-multi-thread"))] $item )*
385 }
386}
387
388macro_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
407macro_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
426macro_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
436macro_rules! cfg_not_test_util {
437 ($($item:item)*) => {
438 $( #[cfg(not(feature = "test-util"))] $item )*
439 }
440}
441
442macro_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
452macro_rules! cfg_not_time {
453 ($($item:item)*) => {
454 $( #[cfg(not(feature = "time"))] $item )*
455 }
456}
457
458macro_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
468macro_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
478macro_rules! cfg_not_trace {
479 ($($item:item)*) => {
480 $(
481 #[cfg(any(not(tokio_unstable), not(feature = "tracing")))]
482 $item
483 )*
484 }
485}
486
487macro_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
505macro_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
523macro_rules! cfg_has_atomic_u64 {
524 ($($item:item)*) => {
525 $(
526 #[cfg(target_has_atomic = "64")]
527 $item
528 )*
529 }
530}
531
532macro_rules! cfg_not_has_atomic_u64 {
533 ($($item:item)*) => {
534 $(
535 #[cfg(not(target_has_atomic = "64"))]
536 $item
537 )*
538 }
539}
540
541macro_rules! cfg_has_const_mutex_new {
542 ($($item:item)*) => {
543 $(
544 #[cfg(not(all(loom, test)))]
545 $item
546 )*
547 }
548}
549
550macro_rules! cfg_not_has_const_mutex_new {
551 ($($item:item)*) => {
552 $(
553 #[cfg(all(loom, test))]
554 $item
555 )*
556 }
557}
558
559macro_rules! cfg_not_wasi {
560 ($($item:item)*) => {
561 $(
562 #[cfg(not(target_os = "wasi"))]
563 $item
564 )*
565 }
566}
567
568macro_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