1

最终我需要一个ByteStreamfor rusoto。所以我想我可以从一个创建它futures::Stream

pub fn z_stream(r: impl Read) -> Result<ByteStream> {
  let outstream = stream::empty();

  // TODO, how do I wrap outstream
  process(r, &mut wrapped_outstream)?;

  Ok(ByteStream::new(outstream))
}

我有一个方法process,它需要 2 个参数,一个用于impl Read,另一个用于impl Write,其中 Read 和 Write 来自std::io

如何将outstream上述内容包装成允许我将其传递给的东西process?可能已经有一些东西了,我不必编写自己的包装器?

4

1 回答 1

0

您不能以与不能写入 aStream相同的方式写入 a Iterator,它们是只读接口。您必须写入其他内容,然后让其他内容实现该Stream特征,以便可以从中读取。在您的情况下,由于process是同步,您可以将其传递给要写入的缓冲区,然后使用implVec<u8>将该缓冲区转换为:ByteStreamFrom<Vec<u8>>

use std::io::Write;

pub fn z_stream(r: impl Read) -> Result<ByteStream> {
  let buffer: Vec<u8> = Vec::new();

  process(r, &mut buffer)?; // &mut Vec<u8> impls io::Write

  Ok(buffer.into()) // ByteStream has From<Vec<u8>> impl
}
于 2020-12-29T13:38:31.723 回答