首页 > 解决方案 > StreamExt::forward 失败,错误为 `expected integer, found enum`std::result::Result`

问题描述

我正在尝试将 rust 期货流(重复)连接到接收器(排水管)。第一种方法工作正常(检查下面),但第二种.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"),
        };
    });
}

相关文档

标签: rustfuture

解决方案


我猜你想要更像这样的东西?

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参数。


推荐阅读