Skip to main content

Crate futures_enum

Crate futures_enum 

Source
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

  • 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.

Derive Macros§

AsyncBufRead
AsyncRead
AsyncSeek
AsyncWrite
Future
Sink
Stream