#![feature(futures_api, await_macro, pin, arbitrary_self_types)] #![doc(html_root_url = "https://docs.rs/tokio-async-await/0.1.2")] #![deny(missing_docs, missing_debug_implementations)] #![cfg_attr(test, deny(warnings))] //! A preview of Tokio w/ `async` / `await` support. extern crate futures; extern crate futures_core; extern crate futures_util; // Re-export all of Tokio pub use tokio::{ // Modules clock, codec, executor, fs, io, net, reactor, runtime, timer, util, // Functions run, spawn, }; pub mod sync { //! Asynchronous aware synchronization pub use tokio_channel::{ mpsc, oneshot, }; } pub mod async_await; pub mod prelude { //! A "prelude" for users of the `tokio` crate. //! //! This prelude is similar to the standard library's prelude in that you'll //! almost always want to import its entire contents, but unlike the standard //! library's prelude you'll have to do so manually: //! //! ``` //! use tokio::prelude::*; //! ``` //! //! The prelude may grow over time as additional items see ubiquitous use. pub use tokio::prelude::*; #[doc(inline)] pub use crate::async_await::{ io::{ AsyncReadExt, AsyncWriteExt, }, sink::{ SinkExt, }, stream::{ StreamExt, }, }; } use futures_core::{ Future as Future03, }; // Rename the `await` macro in `std` #[doc(hidden)] #[macro_export] pub use std::await as std_await; /// Like `tokio::run`, but takes an `async` block pub fn run_async(future: F) where F: Future03 + Send + 'static, { use futures_util::future::FutureExt; use crate::async_await::compat::backward; let future = future.map(|_| Ok(())); run(backward::Compat::new(future)) } /// Like `tokio::spawn`, but takes an `async` block pub fn spawn_async(future: F) where F: Future03 + Send + 'static, { use futures_util::future::FutureExt; use crate::async_await::compat::backward; let future = future.map(|_| Ok(())); spawn(backward::Compat::new(future)); }