#![no_std]
#![doc(html_root_url = "https://docs.rs/futures/0.2.0-beta")]
#![cfg_attr(feature = "nightly", feature(cfg_target_has_atomic))]
extern crate futures_core;
extern crate futures_channel;
extern crate futures_executor;
extern crate futures_io;
extern crate futures_sink;
extern crate futures_stable;
extern crate futures_util;
pub use futures_core::future::{Future, IntoFuture};
pub use futures_util::future::FutureExt;
pub use futures_core::stream::Stream;
pub use futures_util::stream::StreamExt;
pub use futures_sink::Sink;
pub use futures_util::sink::SinkExt;
#[macro_export]
macro_rules! try_ready {
($e:expr) => (match $e {
Ok($crate::prelude::Async::Ready(t)) => t,
Ok($crate::prelude::Async::Pending) => return Ok($crate::prelude::Async::Pending),
Err(e) => return Err(From::from(e)),
})
}
#[macro_export]
macro_rules! task_local {
(static $NAME:ident: $t:ty = $e:expr) => (
static $NAME: $crate::task::LocalKey<$t> = {
fn __init() -> $t { $e }
fn __key() -> ::std::any::TypeId {
struct __A;
::std::any::TypeId::of::<__A>()
}
$crate::task::LocalKey {
__init: __init,
__key: __key,
}
};
)
}
pub use futures_core::{Async, Poll, Never};
#[cfg(feature = "std")]
pub mod channel {
pub use futures_channel::{oneshot, mpsc};
}
#[cfg(feature = "std")]
pub mod executor {
pub use futures_executor::{
Enter, EnterError, LocalExecutor, LocalPool, Spawn, SpawnWithHandle, ThreadPool,
ThreadPoolBuilder, JoinHandle, block_on, enter, spawn, spawn_with_handle
};
pub use futures_core::executor::{SpawnError, Executor};
}
pub mod future {
pub use futures_core::future::{
FutureOption, FutureResult, Future, IntoFuture, err, ok, result
};
pub use futures_util::future::{
AndThen, Empty, Flatten, FlattenStream, ErrInto, Fuse,
Inspect, IntoStream, Join, Join3, Join4, Join5, Lazy, LoopFn,
Map, MapErr, OrElse, PollFn, Select, Then, Either, Loop, FutureExt, empty,
lazy, loop_fn, poll_fn
};
#[cfg(feature = "std")]
pub use futures_util::future::{
CatchUnwind, JoinAll, SelectAll, SelectOk, Shared, SharedError, SharedItem,
join_all, select_all, select_ok
};
}
#[cfg(feature = "std")]
pub mod io {
pub use futures_io::{
Error, Initializer, IoVec, ErrorKind, AsyncRead, AsyncWrite, Result
};
pub use futures_util::io::{
AsyncReadExt, AsyncWriteExt, AllowStdIo, Close, CopyInto, Flush,
Read, ReadExact, ReadHalf, ReadToEnd, Window, WriteAll, WriteHalf,
};
}
#[cfg(feature = "std")]
pub mod never {
pub use futures_core::never::*;
}
pub mod prelude {
pub use futures_core::{
Future,
IntoFuture,
Stream,
Async,
Poll,
Never,
task,
};
#[cfg(feature = "std")]
pub use futures_core::executor::Executor;
pub use futures_sink::Sink;
#[cfg(feature = "std")]
pub use futures_io::{
AsyncRead,
AsyncWrite,
};
pub use futures_util::{
FutureExt,
StreamExt,
SinkExt,
};
#[cfg(feature = "std")]
pub use futures_util::{
AsyncReadExt,
AsyncWriteExt,
};
}
pub mod sink {
pub use futures_sink::Sink;
pub use futures_util::sink::{
Close, Fanout, Flush, Send, SendAll, SinkErrInto, SinkMapErr, With,
WithFlatMap, SinkExt, close, flush,
};
#[cfg(feature = "std")]
pub use futures_util::sink::Buffer;
}
pub mod stream {
pub use futures_core::stream::Stream;
pub use futures_util::stream::{
AndThen, Chain, Concat, Empty, Filter, FilterMap, Flatten, Fold,
ForEach, Forward, ErrInto, Fuse, Inspect, InspectErr, IterOk,
IterResult, Map, MapErr, Once, OrElse, Peekable, PollFn, Repeat, Select,
Skip, SkipWhile, StreamFuture, Take, TakeWhile, Then, Unfold, Zip,
StreamExt, empty, iter_ok, iter_result, once, poll_fn, repeat, unfold,
};
#[cfg(feature = "std")]
pub use futures_util::stream::{
futures_unordered, BufferUnordered, Buffered, CatchUnwind, Chunks, Collect,
FuturesUnordered, FuturesOrdered, ReuniteError, SelectAll, SplitSink, SplitStream,
futures_ordered,
};
}
pub mod task {
pub use futures_core::task::{
Context, LocalMap, Waker, UnsafeWake,
};
#[cfg_attr(feature = "nightly", cfg(target_has_atomic = "ptr"))]
pub use futures_core::task::AtomicWaker;
#[cfg(feature = "std")]
pub use futures_core::task::{LocalKey, Wake};
}
#[cfg(feature = "nightly")]
pub mod stable {
pub use futures_stable::{StableFuture, StableStream};
#[cfg(feature = "std")]
pub use futures_stable::{StableExecutor, block_on_stable};
}