7 个版本 (4 个破坏性更新)
0.5.0 | 2024 年 5 月 21 日 |
---|---|
0.4.0 | 2023 年 3 月 21 日 |
0.3.1 | 2022 年 12 月 24 日 |
0.3.0 | 2022 年 8 月 31 日 |
0.1.1 | 2022 年 8 月 26 日 |
#30 在 #yield
每月 95 次下载
在 3 个 crate 中使用 (通过 stream-future)
9KB
118 行
stream-future
这是一个与 no_std
兼容的库,用于编写具有 Stream
实现的 Future
。您可以使用 await
和 yield
简单地编写。
需要 nightly 特性 coroutines
。
#![feature(coroutines)]
use stream_future::stream;
#[derive(Debug)]
enum Prog {
Stage1,
Stage2,
}
#[stream(Prog)]
async fn foo() -> Result<i32> {
yield Prog::Stage1;
// some works...
yield Prog::Stage2;
// some other works...
Ok(0)
}
use tokio_stream::StreamExt;
let bar = foo();
tokio::pin!(bar);
while let Some(prog) = bar.next().await {
println!("{:?}", prog);
}
let bar = bar.await?;
assert_eq!(bar, 0);
#![feature(coroutines)]
use stream_future::try_stream;
#[derive(Debug)]
enum Prog {
Stage1,
Stage2,
}
#[try_stream(Prog)]
async fn foo() -> Result<()> {
yield Prog::Stage1;
// some works...
yield Prog::Stage2;
// some other works...
Ok(())
}
let bar = foo();
tokio::pin!(bar);
while let Some(prog) = bar.try_next().await? {
println!("{:?}", prog);
}
您可以在属性中指定返回类型。返回类型可以是 ()
。您可以简单地 await
其他 future,宏将处理它。
与 async-stream
进行比较
您可以返回任何您喜欢的值!调用者可以简单地 await
并获取值,而无需遍历流。
根据我们的基准测试,此库比 async-stream
快 7 倍。
依赖关系
~285–740KB
~18K SLoC