#future #enums #derive #async #async-stream #async-io

futures-enum

#[derive(Future, Stream, Sink, AsyncRead, AsyncWrite, AsyncSeek, AsyncBufRead)] for 枚举

18 个版本

0.1.17 2021 年 1 月 5 日
0.1.16 2020 年 12 月 29 日
0.1.15 2020 年 11 月 6 日
0.1.13 2020 年 6 月 2 日
0.1.5 2019 年 3 月 4 日

异步 中排名第 2015

Download history 14305/week @ 2024-03-14 12878/week @ 2024-03-21 9764/week @ 2024-03-28 8179/week @ 2024-04-04 9978/week @ 2024-04-11 7799/week @ 2024-04-18 9279/week @ 2024-04-25 6877/week @ 2024-05-02 8661/week @ 2024-05-09 8484/week @ 2024-05-16 8019/week @ 2024-05-23 7695/week @ 2024-05-30 7898/week @ 2024-06-06 7258/week @ 2024-06-13 6121/week @ 2024-06-20 3926/week @ 2024-06-27

每月下载量 26,719
用于 67 crate(直接使用 4 个)

Apache-2.0 OR MIT

17KB
227

futures-enum

crates.io docs.rs license rustc build status

#[derive(Future, Stream, Sink, AsyncRead, AsyncWrite, AsyncSeek, AsyncBufRead)] for 枚举。

用法

将以下内容添加到您的 Cargo.toml

[dependencies]
futures-enum = "0.1.16"
futures = "0.3"

编译器支持:需要 rustc 1.36+

示例

use futures_enum::*;
use std::future::Future;

#[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 即使依赖项中只包含子 crate,如 futures-corefutures-iofutures-sink 等,也能很好地工作。

有关如何自动化此类模式的更多信息,请参阅 auto_enums crate。

支持的特质

  • auto_enums:一个允许通过自动生成的枚举实现多种返回类型的库。
  • derive_utils:一个过程宏助手,用于轻松编写[derives宏][proc-macro-derive]用于枚举。
  • io-enum:为枚举提供 #[derive(Read, Write, Seek, BufRead)]。
  • iter-enum:为枚举提供 #[derive(Iterator, DoubleEndedIterator, ExactSizeIterator, Extend)]。

许可证

您可以选择在Apache License, Version 2.0MIT许可证下使用。

除非您明确表示,否则根据Apache-2.0许可证定义,您提交给作品以供包含的任何贡献将根据上述条款双重许可,没有任何附加条款或条件。

依赖项

~1.5MB
~38K SLoC