#future #enums #macro #derive #implement #data-structurs

no-std enum_future

一个用于创建包含futures的Future实现的枚举的简单宏

1个不稳定版本

使用旧Rust 2015

0.1.0 2019年1月28日

#109#enum

MITNFA 许可证

7KB

enum future

一个用于创建包含futures的Future实现的枚举的简单宏。

关于

当需要超过两种变体或希望给予它们更有意义的名称时,可以使用enum_future宏作为futures::Either的替代品。该枚举是泛型的,以便允许与复杂或不可命名的类型(组合子、闭包、实现Future)一起使用。

此宏不允许创建pub枚举、记录它们或推导任何其他特质。在大多数情况下,这应该是可以的,因为它主要用于在match表达式中返回不同的futures。

推导宏当然会提供更多的灵活性,但它也会更加复杂,而这个简单的宏解决了我的问题。如果有人对贡献过程宏版本感兴趣,我将非常高兴合并一个PR!

此crate是no_std并且与2018版兼容,因为它不需要从std或2018版获取任何特别的功能。

示例

#[macro_use]
extern crate enum_future;

use enum_future::futures::future::{Future, ok, err};

fn make_future(input: u64) -> impl Future<Item=bool, Error=&'static str> {
    enum_future!(Ret, Zero, One, Other);

    match input {
        0 => Ret::Zero(ok(false)),
        1 => Ret::One(ok(true)),
        _ => Ret::Other(err("Invalid input")),
    }
}

fn main() {
    assert_eq!(make_future(42).wait(), Err("Invalid input"));
}

许可证

MITNFA

依赖项

~53KB