Rust 中的 Stream 迭代

Dje*_*ent 6 rust

我正在尝试使用 crate 来迭代 docker 容器中的日志bollard

这是我的代码:

use std::default::Default;

use bollard::container::LogsOptions;
use bollard::Docker;

fn main() {
    let docker = Docker::connect_with_http_defaults().unwrap();

    let options = Some(LogsOptions::<String>{
        stdout: true,
        ..Default::default()
    });

    let data = docker.logs("2f6c52410d", options);
    // ...
}
Run Code Online (Sandbox Code Playgroud)

docker.logs()返回impl Stream<Item = Result<LogOutput, Error>>。我想迭代结果,但我不知道该怎么做。我设法找到了一个使用板条箱的示例try_collect::<Vec<LogOutput>>()future_utils但我想在 while 循环中迭代结果,而不是在向量中收集结果。我知道我可以迭代向量,但在循环中执行任务将更适合我的用例。

我尝试调用poll_next()流的方法,但它需要一个Context我不理解的神秘对象。在我在流上使用宏之前,该poll_next()方法不可用。pin_mut!()

如何迭代流?我应该读什么来了解这里发生了什么?我知道流与 相关Futures,但调用awaitornext()在这里不起作用。

小智 10

您通常会引入您选择的库的 StreamExt 特征,然后执行类似的操作

while let Some(foo) = stream.next().await {
    // ...
}
Run Code Online (Sandbox Code Playgroud)