1个不稳定版本
使用旧Rust 2015
0.1.0 | 2019年1月28日 |
---|
#109 在 #enum
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