1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
#![cfg(feature = "async-await-preview")] #![feature(rust_2018_preview, async_await, await_macro, futures_api)] #![doc(html_root_url = "https://docs.rs/tokio-async-await/0.1.6")] #![deny(missing_docs, missing_debug_implementations)] #![cfg_attr(test, deny(warnings))] //! A preview of Tokio w/ `async` / `await` support. extern crate futures; extern crate tokio_io; /// Extracts the successful type of a `Poll<Result<T, E>>`. /// /// This macro bakes in propagation of `Pending` and `Err` signals by returning early. macro_rules! try_ready { ($x:expr) => { match $x { std::task::Poll::Ready(Ok(x)) => x, std::task::Poll::Ready(Err(e)) => return std::task::Poll::Ready(Err(e.into())), std::task::Poll::Pending => return std::task::Poll::Pending, } }; } #[macro_use] mod await; pub mod compat; pub mod io; pub mod sink; pub mod stream; /* 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_main::prelude::*; #[doc(inline)] pub use crate::async_await::{ io::{ AsyncReadExt, AsyncWriteExt, }, sink::{ SinkExt, }, stream::{ StreamExt, }, }; } */ // Rename the `await` macro in `std`. This is used by the redefined // `await` macro in this crate. #[doc(hidden)] pub use std::await as std_await; /* use std::future::{Future as StdFuture}; fn run<T: futures::Future<Item = (), Error = ()>>(t: T) { drop(t); } async fn map_ok<T: StdFuture>(future: T) -> Result<(), ()> { let _ = await!(future); Ok(()) } /// Like `tokio::run`, but takes an `async` block pub fn run_async<F>(future: F) where F: StdFuture<Output = ()> + Send + 'static, { use async_await::compat::backward; let future = backward::Compat::new(map_ok(future)); run(future); unimplemented!(); } */ /* /// Like `tokio::spawn`, but takes an `async` block pub fn spawn_async<F>(future: F) where F: StdFuture<Output = ()> + Send + 'static, { use crate::async_await::compat::backward; spawn(backward::Compat::new(async || { let _ = await!(future); Ok(()) })); } */