StreamExt::forward 失败,出现错误"预期整数,找到枚举"std::result::



我正在尝试将生锈期货流(重复(连接到接收器(排水(。 第一种方法工作正常(检查下面(,但第二种方法.forward编译失败(错误以内联方式显示(。关于我做错了什么的任何指示?

use futures::stream::StreamExt;
use futures::sink::SinkExt;
use futures::executor;
fn main() {
executor::block_on( async {
// works
let mut work = futures::stream::repeat(5);
let mut drain = futures::sink::drain();
match drain.send(work.next()).await {
Ok(_r) => println!("Done"),
Err(_e) => println!("Error"),
};
// works
let res: Vec<i32> = futures::stream::repeat(5).take(3).collect::<Vec<i32>>().await;
println!("{:?}", res);
// doesn't work
// futures::stream::repeat(5).forward(futures::sink::drain());
//                            ^^^^^^^ expected integer, found enum `std::result::Result`
//  error[E0271]: type mismatch resolving `<futures_util::stream::repeat::Repeat<{integer}> as futures_core::stream::Stream>::Item == std::result::Result<_, _>`
// Fixed above with repeat(Ok(5)) but not repeat(5)
match futures::stream::repeat(Ok(5)).take(3).forward(futures::sink::drain()).await {
Ok(_r) => println!("Done"),
Err(_e) => println!("Error"),
};
});
}

相关文档

  • https://docs.rs/futures/0.3.1/futures/stream/fn.repeat.html
  • https://docs.rs/futures/0.3.1/futures/sink/fn.drain.html
  • https://docs.rs/futures/0.3.1/futures/stream/trait.StreamExt.html#method.forward

我想你想要更多这样的东西吗?

use futures::stream::StreamExt;
use futures::sink::SinkExt;
#[tokio::main]
async fn main() {
// works
let mut work = futures::stream::repeat(5);
let mut drain = futures::sink::drain();
match drain.send(work.next()).await {
Ok(_r) => println!("Done"),
Err(_e) => println!("Error"),
};
// doesn't work
futures::stream::repeat(Ok(5)).forward(futures::sink::drain());
}

正如错误(有点混乱(所示,在这种情况下,重复调用必须采用Result参数。

最新更新