如何将 `futures::Stream` 包装到任何实现 `Write` 的东西中?
How to wrap a `futures::Stream` into anything that implements `Write`?
最终我需要一个 ByteStream
for 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
,其中读取和写入来自 std::io
。
如何将上面的 outstream
包装成允许我将其传递给 process
的内容?可能已经有一些东西了,我不必编写自己的包装器?
您不能像不能写入 Iterator
一样写入 Stream
,它们是只读接口。您必须写入其他内容,然后让其他内容实现 Stream
特征,以便可以读取它。在您的情况下,由于 process
是同步的,您可以将 Vec<u8>
缓冲区传递给它进行写入,然后使用 From<Vec<u8>>
实现将该缓冲区转换为 ByteStream
:
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
}
最终我需要一个 ByteStream
for 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
,其中读取和写入来自 std::io
。
如何将上面的 outstream
包装成允许我将其传递给 process
的内容?可能已经有一些东西了,我不必编写自己的包装器?
您不能像不能写入 Iterator
一样写入 Stream
,它们是只读接口。您必须写入其他内容,然后让其他内容实现 Stream
特征,以便可以读取它。在您的情况下,由于 process
是同步的,您可以将 Vec<u8>
缓冲区传递给它进行写入,然后使用 From<Vec<u8>>
实现将该缓冲区转换为 ByteStream
:
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
}