2020-02-27 10:18:01 -08:00
|
|
|
#![doc(html_root_url = "https://docs.rs/tokio-macros/0.2.5")]
|
2019-12-21 00:54:43 +03:00
|
|
|
#![allow(clippy::needless_doctest_main)]
|
2019-08-11 04:28:52 +09:00
|
|
|
#![warn(
|
|
|
|
|
missing_debug_implementations,
|
|
|
|
|
missing_docs,
|
|
|
|
|
rust_2018_idioms,
|
|
|
|
|
unreachable_pub
|
|
|
|
|
)]
|
2019-09-13 06:46:19 -10:00
|
|
|
#![deny(intra_doc_link_resolution_failure)]
|
2019-09-19 15:50:12 +09:00
|
|
|
#![doc(test(
|
|
|
|
|
no_crate_inject,
|
|
|
|
|
attr(deny(warnings, rust_2018_idioms), allow(dead_code, unused_variables))
|
|
|
|
|
))]
|
2019-05-14 10:27:36 -07:00
|
|
|
|
|
|
|
|
//! Macros for use with Tokio
|
2019-04-25 19:22:32 -07:00
|
|
|
|
2020-01-26 21:54:14 -08:00
|
|
|
// This `extern` is required for older `rustc` versions but newer `rustc`
|
|
|
|
|
// versions warn about the unused `extern crate`.
|
|
|
|
|
#[allow(unused_extern_crates)]
|
2019-04-25 19:22:32 -07:00
|
|
|
extern crate proc_macro;
|
|
|
|
|
|
2020-01-22 18:59:22 -08:00
|
|
|
mod entry;
|
|
|
|
|
mod select;
|
|
|
|
|
|
2019-04-25 19:22:32 -07:00
|
|
|
use proc_macro::TokenStream;
|
2019-10-02 13:58:34 -04:00
|
|
|
|
2019-06-27 20:40:22 +03:00
|
|
|
/// Marks async function to be executed by selected runtime.
|
2019-04-25 19:22:32 -07:00
|
|
|
///
|
2019-06-27 20:40:22 +03:00
|
|
|
/// ## Options:
|
|
|
|
|
///
|
2020-02-26 10:38:54 -08:00
|
|
|
///
|
|
|
|
|
/// - `core_threads=n` - Sets core threads to `n` (requires `rt-threaded` feature).
|
|
|
|
|
/// - `max_threads=n` - Sets max threads to `n` (requires `rt-core` or `rt-threaded` feature).
|
2019-06-27 20:40:22 +03:00
|
|
|
///
|
2019-09-24 16:03:26 +02:00
|
|
|
/// ## Function arguments:
|
|
|
|
|
///
|
|
|
|
|
/// Arguments are allowed for any functions aside from `main` which is special
|
|
|
|
|
///
|
2019-06-27 20:40:22 +03:00
|
|
|
/// ## Usage
|
2019-04-25 19:22:32 -07:00
|
|
|
///
|
2019-11-16 07:19:45 -08:00
|
|
|
/// ### Using default
|
2019-06-27 20:40:22 +03:00
|
|
|
///
|
|
|
|
|
/// ```rust
|
2019-11-16 07:19:45 -08:00
|
|
|
/// #[tokio::main]
|
2019-06-27 20:40:22 +03:00
|
|
|
/// async fn main() {
|
|
|
|
|
/// println!("Hello world");
|
|
|
|
|
/// }
|
2019-04-25 19:22:32 -07:00
|
|
|
/// ```
|
2019-11-16 07:19:45 -08:00
|
|
|
///
|
2019-12-27 21:56:43 +03:00
|
|
|
/// ### Set number of core threads
|
|
|
|
|
///
|
|
|
|
|
/// ```rust
|
|
|
|
|
/// #[tokio::main(core_threads = 1)]
|
|
|
|
|
/// async fn main() {
|
|
|
|
|
/// println!("Hello world");
|
|
|
|
|
/// }
|
|
|
|
|
/// ```
|
2020-05-20 12:50:41 -07:00
|
|
|
///
|
|
|
|
|
/// ### NOTE:
|
|
|
|
|
///
|
|
|
|
|
/// If you rename the tokio crate in your dependencies this macro
|
|
|
|
|
/// will not work. If you must rename the 0.2 version of tokio because
|
|
|
|
|
/// you're also using the 0.1 version of tokio, you _must_ make the
|
|
|
|
|
/// tokio 0.2 crate available as `tokio` in the module where this
|
|
|
|
|
/// macro is expanded.
|
2019-12-27 21:56:43 +03:00
|
|
|
#[proc_macro_attribute]
|
|
|
|
|
#[cfg(not(test))] // Work around for rust-lang/rust#62127
|
|
|
|
|
pub fn main_threaded(args: TokenStream, item: TokenStream) -> TokenStream {
|
2020-01-21 10:46:32 -08:00
|
|
|
entry::main(args, item, true)
|
2020-01-07 14:29:44 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Marks async function to be executed by selected runtime.
|
|
|
|
|
///
|
|
|
|
|
/// ## Options:
|
|
|
|
|
///
|
|
|
|
|
/// - `basic_scheduler` - All tasks are executed on the current thread.
|
2020-02-26 10:38:54 -08:00
|
|
|
/// - `threaded_scheduler` - Uses the multi-threaded scheduler. Used by default (requires `rt-threaded` feature).
|
2020-01-07 14:29:44 -08:00
|
|
|
///
|
|
|
|
|
/// ## Function arguments:
|
|
|
|
|
///
|
|
|
|
|
/// Arguments are allowed for any functions aside from `main` which is special
|
|
|
|
|
///
|
|
|
|
|
/// ## Usage
|
|
|
|
|
///
|
|
|
|
|
/// ### Using default
|
|
|
|
|
///
|
|
|
|
|
/// ```rust
|
|
|
|
|
/// #[tokio::main]
|
|
|
|
|
/// async fn main() {
|
|
|
|
|
/// println!("Hello world");
|
|
|
|
|
/// }
|
|
|
|
|
/// ```
|
|
|
|
|
///
|
|
|
|
|
/// ### Select runtime
|
|
|
|
|
///
|
|
|
|
|
/// ```rust
|
|
|
|
|
/// #[tokio::main(basic_scheduler)]
|
|
|
|
|
/// async fn main() {
|
|
|
|
|
/// println!("Hello world");
|
|
|
|
|
/// }
|
|
|
|
|
/// ```
|
2020-05-20 12:50:41 -07:00
|
|
|
///
|
|
|
|
|
/// ### NOTE:
|
|
|
|
|
///
|
|
|
|
|
/// If you rename the tokio crate in your dependencies this macro
|
|
|
|
|
/// will not work. If you must rename the 0.2 version of tokio because
|
|
|
|
|
/// you're also using the 0.1 version of tokio, you _must_ make the
|
|
|
|
|
/// tokio 0.2 crate available as `tokio` in the module where this
|
|
|
|
|
/// macro is expanded.
|
2020-01-07 14:29:44 -08:00
|
|
|
#[proc_macro_attribute]
|
|
|
|
|
#[cfg(not(test))] // Work around for rust-lang/rust#62127
|
|
|
|
|
pub fn main(args: TokenStream, item: TokenStream) -> TokenStream {
|
2020-01-21 10:46:32 -08:00
|
|
|
entry::old::main(args, item)
|
2019-12-27 21:56:43 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Marks async function to be executed by selected runtime.
|
|
|
|
|
///
|
|
|
|
|
/// ## Options:
|
|
|
|
|
///
|
|
|
|
|
/// - `max_threads=n` - Sets max threads to `n`.
|
|
|
|
|
///
|
|
|
|
|
/// ## Function arguments:
|
|
|
|
|
///
|
|
|
|
|
/// Arguments are allowed for any functions aside from `main` which is special
|
|
|
|
|
///
|
|
|
|
|
/// ## Usage
|
|
|
|
|
///
|
|
|
|
|
/// ### Using default
|
2019-06-27 20:40:22 +03:00
|
|
|
///
|
|
|
|
|
/// ```rust
|
2019-12-27 21:56:43 +03:00
|
|
|
/// #[tokio::main]
|
2019-04-25 19:22:32 -07:00
|
|
|
/// async fn main() {
|
2019-06-27 20:40:22 +03:00
|
|
|
/// println!("Hello world");
|
2019-04-25 19:22:32 -07:00
|
|
|
/// }
|
2019-06-25 20:14:21 -07:00
|
|
|
/// ```
|
2020-05-20 12:50:41 -07:00
|
|
|
///
|
|
|
|
|
/// ### NOTE:
|
|
|
|
|
///
|
|
|
|
|
/// If you rename the tokio crate in your dependencies this macro
|
|
|
|
|
/// will not work. If you must rename the 0.2 version of tokio because
|
|
|
|
|
/// you're also using the 0.1 version of tokio, you _must_ make the
|
|
|
|
|
/// tokio 0.2 crate available as `tokio` in the module where this
|
|
|
|
|
/// macro is expanded.
|
2019-04-25 19:22:32 -07:00
|
|
|
#[proc_macro_attribute]
|
2019-06-25 20:14:21 -07:00
|
|
|
#[cfg(not(test))] // Work around for rust-lang/rust#62127
|
2019-12-27 21:56:43 +03:00
|
|
|
pub fn main_basic(args: TokenStream, item: TokenStream) -> TokenStream {
|
2020-01-21 10:46:32 -08:00
|
|
|
entry::main(args, item, false)
|
2019-04-25 19:22:32 -07:00
|
|
|
}
|
|
|
|
|
|
2020-02-11 16:09:40 -05:00
|
|
|
/// Marks async function to be executed by runtime, suitable to test environment
|
2020-01-07 14:29:44 -08:00
|
|
|
///
|
|
|
|
|
/// ## Options:
|
|
|
|
|
///
|
2020-02-26 10:38:54 -08:00
|
|
|
/// - `core_threads=n` - Sets core threads to `n` (requires `rt-threaded` feature).
|
|
|
|
|
/// - `max_threads=n` - Sets max threads to `n` (requires `rt-core` or `rt-threaded` feature).
|
2020-01-07 14:29:44 -08:00
|
|
|
///
|
|
|
|
|
/// ## Usage
|
|
|
|
|
///
|
|
|
|
|
/// ### Select runtime
|
|
|
|
|
///
|
|
|
|
|
/// ```no_run
|
2020-02-26 10:38:54 -08:00
|
|
|
/// #[tokio::test(core_threads = 1)]
|
2020-01-07 14:29:44 -08:00
|
|
|
/// async fn my_test() {
|
|
|
|
|
/// assert!(true);
|
|
|
|
|
/// }
|
|
|
|
|
/// ```
|
|
|
|
|
///
|
|
|
|
|
/// ### Using default
|
|
|
|
|
///
|
|
|
|
|
/// ```no_run
|
|
|
|
|
/// #[tokio::test]
|
|
|
|
|
/// async fn my_test() {
|
|
|
|
|
/// assert!(true);
|
|
|
|
|
/// }
|
|
|
|
|
/// ```
|
2020-05-20 12:50:41 -07:00
|
|
|
///
|
|
|
|
|
/// ### NOTE:
|
|
|
|
|
///
|
|
|
|
|
/// If you rename the tokio crate in your dependencies this macro
|
|
|
|
|
/// will not work. If you must rename the 0.2 version of tokio because
|
|
|
|
|
/// you're also using the 0.1 version of tokio, you _must_ make the
|
|
|
|
|
/// tokio 0.2 crate available as `tokio` in the module where this
|
|
|
|
|
/// macro is expanded.
|
2020-01-07 14:29:44 -08:00
|
|
|
#[proc_macro_attribute]
|
|
|
|
|
pub fn test_threaded(args: TokenStream, item: TokenStream) -> TokenStream {
|
2020-01-21 10:46:32 -08:00
|
|
|
entry::test(args, item, true)
|
2020-01-07 14:29:44 -08:00
|
|
|
}
|
|
|
|
|
|
2020-02-11 16:09:40 -05:00
|
|
|
/// Marks async function to be executed by runtime, suitable to test environment
|
2019-06-27 20:40:22 +03:00
|
|
|
///
|
2019-10-02 13:58:34 -04:00
|
|
|
/// ## Options:
|
|
|
|
|
///
|
2020-02-26 10:38:54 -08:00
|
|
|
/// - `basic_scheduler` - All tasks are executed on the current thread. Used by default.
|
|
|
|
|
/// - `threaded_scheduler` - Use multi-threaded scheduler (requires `rt-threaded` feature).
|
2019-10-02 13:58:34 -04:00
|
|
|
///
|
|
|
|
|
/// ## Usage
|
|
|
|
|
///
|
|
|
|
|
/// ### Select runtime
|
|
|
|
|
///
|
|
|
|
|
/// ```no_run
|
2020-02-26 10:38:54 -08:00
|
|
|
/// #[tokio::test(threaded_scheduler)]
|
2019-10-02 13:58:34 -04:00
|
|
|
/// async fn my_test() {
|
|
|
|
|
/// assert!(true);
|
|
|
|
|
/// }
|
|
|
|
|
/// ```
|
2019-04-25 19:22:32 -07:00
|
|
|
///
|
2019-10-02 13:58:34 -04:00
|
|
|
/// ### Using default
|
2019-04-25 19:22:32 -07:00
|
|
|
///
|
2019-08-09 17:04:41 +02:00
|
|
|
/// ```no_run
|
2019-04-25 19:22:32 -07:00
|
|
|
/// #[tokio::test]
|
|
|
|
|
/// async fn my_test() {
|
|
|
|
|
/// assert!(true);
|
|
|
|
|
/// }
|
|
|
|
|
/// ```
|
2020-05-20 12:50:41 -07:00
|
|
|
///
|
|
|
|
|
/// ### NOTE:
|
|
|
|
|
///
|
|
|
|
|
/// If you rename the tokio crate in your dependencies this macro
|
|
|
|
|
/// will not work. If you must rename the 0.2 version of tokio because
|
|
|
|
|
/// you're also using the 0.1 version of tokio, you _must_ make the
|
|
|
|
|
/// tokio 0.2 crate available as `tokio` in the module where this
|
|
|
|
|
/// macro is expanded.
|
2019-04-25 19:22:32 -07:00
|
|
|
#[proc_macro_attribute]
|
2020-01-07 14:29:44 -08:00
|
|
|
pub fn test(args: TokenStream, item: TokenStream) -> TokenStream {
|
2020-01-21 10:46:32 -08:00
|
|
|
entry::old::test(args, item)
|
2019-12-27 21:56:43 +03:00
|
|
|
}
|
|
|
|
|
|
2020-02-11 16:09:40 -05:00
|
|
|
/// Marks async function to be executed by runtime, suitable to test environment
|
2019-12-27 21:56:43 +03:00
|
|
|
///
|
|
|
|
|
/// ## Options:
|
|
|
|
|
///
|
|
|
|
|
/// - `max_threads=n` - Sets max threads to `n`.
|
|
|
|
|
///
|
|
|
|
|
/// ## Usage
|
|
|
|
|
///
|
|
|
|
|
/// ```no_run
|
|
|
|
|
/// #[tokio::test]
|
|
|
|
|
/// async fn my_test() {
|
|
|
|
|
/// assert!(true);
|
|
|
|
|
/// }
|
|
|
|
|
/// ```
|
2020-05-20 12:50:41 -07:00
|
|
|
///
|
|
|
|
|
/// ### NOTE:
|
|
|
|
|
///
|
|
|
|
|
/// If you rename the tokio crate in your dependencies this macro
|
|
|
|
|
/// will not work. If you must rename the 0.2 version of tokio because
|
|
|
|
|
/// you're also using the 0.1 version of tokio, you _must_ make the
|
|
|
|
|
/// tokio 0.2 crate available as `tokio` in the module where this
|
|
|
|
|
/// macro is expanded.
|
2019-12-27 21:56:43 +03:00
|
|
|
#[proc_macro_attribute]
|
|
|
|
|
pub fn test_basic(args: TokenStream, item: TokenStream) -> TokenStream {
|
2020-01-21 10:46:32 -08:00
|
|
|
entry::test(args, item, false)
|
2020-01-07 14:29:44 -08:00
|
|
|
}
|
2020-01-22 18:59:22 -08:00
|
|
|
|
|
|
|
|
/// Implementation detail of the `select!` macro. This macro is **not** intended
|
|
|
|
|
/// to be used as part of the public API and is permitted to change.
|
|
|
|
|
#[proc_macro]
|
|
|
|
|
#[doc(hidden)]
|
|
|
|
|
pub fn select_priv_declare_output_enum(input: TokenStream) -> TokenStream {
|
|
|
|
|
select::declare_output_enum(input)
|
|
|
|
|
}
|