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