diff options
author | Joel Galenson <jgalenson@google.com> | 2020-10-23 08:06:02 -0700 |
---|---|---|
committer | Joel Galenson <jgalenson@google.com> | 2020-10-23 08:06:02 -0700 |
commit | ea9e45442ba989080fa45464078d8bd8d99991e3 (patch) | |
tree | 945168256ae499a842348b28699a47653d6d8eb3 /src/lib.rs | |
parent | 7c7c291d8ea8d5c68a1e5b7ef8c43d51773ae38b (diff) | |
download | tokio-macros-ea9e45442ba989080fa45464078d8bd8d99991e3.tar.gz |
Import tokio-macros-0.2.5
Test: None
Change-Id: I0f800de3d0a0557ee29aa9d4a07c571cda1835bb
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 213 |
1 files changed, 213 insertions, 0 deletions
diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..9fdfb5b --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,213 @@ +#![doc(html_root_url = "https://docs.rs/tokio-macros/0.2.5")] +#![allow(clippy::needless_doctest_main)] +#![warn( + missing_debug_implementations, + missing_docs, + rust_2018_idioms, + unreachable_pub +)] +#![deny(intra_doc_link_resolution_failure)] +#![doc(test( + no_crate_inject, + attr(deny(warnings, rust_2018_idioms), allow(dead_code, unused_variables)) +))] + +//! Macros for use with Tokio + +// This `extern` is required for older `rustc` versions but newer `rustc` +// versions warn about the unused `extern crate`. +#[allow(unused_extern_crates)] +extern crate proc_macro; + +mod entry; +mod select; + +use proc_macro::TokenStream; + +/// Marks async function to be executed by selected runtime. +/// +/// ## Options: +/// +/// +/// - `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). +/// +/// ## 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"); +/// } +/// ``` +/// +/// ### Set number of core threads +/// +/// ```rust +/// #[tokio::main(core_threads = 1)] +/// async fn main() { +/// println!("Hello world"); +/// } +/// ``` +#[proc_macro_attribute] +#[cfg(not(test))] // Work around for rust-lang/rust#62127 +pub fn main_threaded(args: TokenStream, item: TokenStream) -> TokenStream { + entry::main(args, item, true) +} + +/// Marks async function to be executed by selected runtime. +/// +/// ## Options: +/// +/// - `basic_scheduler` - All tasks are executed on the current thread. +/// - `threaded_scheduler` - Uses the multi-threaded scheduler. Used by default (requires `rt-threaded` feature). +/// +/// ## 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"); +/// } +/// ``` +#[proc_macro_attribute] +#[cfg(not(test))] // Work around for rust-lang/rust#62127 +pub fn main(args: TokenStream, item: TokenStream) -> TokenStream { + entry::old::main(args, item) +} + +/// 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 +/// +/// ```rust +/// #[tokio::main] +/// async fn main() { +/// println!("Hello world"); +/// } +/// ``` +#[proc_macro_attribute] +#[cfg(not(test))] // Work around for rust-lang/rust#62127 +pub fn main_basic(args: TokenStream, item: TokenStream) -> TokenStream { + entry::main(args, item, false) +} + +/// Marks async function to be executed by runtime, suitable to test environment +/// +/// ## Options: +/// +/// - `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). +/// +/// ## Usage +/// +/// ### Select runtime +/// +/// ```no_run +/// #[tokio::test(core_threads = 1)] +/// async fn my_test() { +/// assert!(true); +/// } +/// ``` +/// +/// ### Using default +/// +/// ```no_run +/// #[tokio::test] +/// async fn my_test() { +/// assert!(true); +/// } +/// ``` +#[proc_macro_attribute] +pub fn test_threaded(args: TokenStream, item: TokenStream) -> TokenStream { + entry::test(args, item, true) +} + +/// Marks async function to be executed by runtime, suitable to test environment +/// +/// ## Options: +/// +/// - `basic_scheduler` - All tasks are executed on the current thread. Used by default. +/// - `threaded_scheduler` - Use multi-threaded scheduler (requires `rt-threaded` feature). +/// +/// ## Usage +/// +/// ### Select runtime +/// +/// ```no_run +/// #[tokio::test(threaded_scheduler)] +/// async fn my_test() { +/// assert!(true); +/// } +/// ``` +/// +/// ### Using default +/// +/// ```no_run +/// #[tokio::test] +/// async fn my_test() { +/// assert!(true); +/// } +/// ``` +#[proc_macro_attribute] +pub fn test(args: TokenStream, item: TokenStream) -> TokenStream { + entry::old::test(args, item) +} + +/// Marks async function to be executed by runtime, suitable to test environment +/// +/// ## Options: +/// +/// - `max_threads=n` - Sets max threads to `n`. +/// +/// ## Usage +/// +/// ```no_run +/// #[tokio::test] +/// async fn my_test() { +/// assert!(true); +/// } +/// ``` +#[proc_macro_attribute] +pub fn test_basic(args: TokenStream, item: TokenStream) -> TokenStream { + entry::test(args, item, false) +} + +/// 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) +} |