Expand description
#[derive(Future, Stream, Sink, AsyncRead, AsyncWrite, AsyncSeek, AsyncBufRead)] for enums.
§Usage
Add this to your Cargo.toml:
[dependencies]
futures-enum = "0.1.16"
futures = "0.3"§Examples
use std::future::Future;
use futures_enum::{Future, Stream, Sink, AsyncRead, AsyncWrite, AsyncSeek, AsyncBufRead};
#[derive(Future, Stream, Sink, AsyncRead, AsyncWrite, AsyncSeek, AsyncBufRead)]
enum Either<A, B> {
A(A),
B(B),
}
fn foo(x: i32) -> impl Future<Output = i32> {
if x < 0 {
Either::A(async { 1 })
} else {
Either::B(async move { x })
}
}futures-enum works well even if the dependency contains only sub-crates such
as futures-core, futures-io, futures-sink, etc.
See auto_enums crate for how to automate patterns like this.
§Supported traits
Future- example | generated codeStream- example | generated codeSink- example | generated codeAsyncRead- example | generated codeAsyncWrite- example | generated codeAsyncSeek- example | generated codeAsyncBufRead- example | generated code
§Related Projects
- auto_enums: A library for to allow multiple return types by automatically generated enum.
- derive_utils: A procedural macro helper for easily writing derives macros for enums.
- io-enum: #[derive(Read, Write, Seek, BufRead)] for enums.
- iter-enum: #[derive(Iterator, DoubleEndedIterator, ExactSizeIterator, Extend)] for enums.