私は先物の特性rusoto_core::ByteStream
を実装しています:Stream
let chunks = vec![b"1234".to_vec(), b"5678".to_vec()];
let stream = ByteStream::new(stream::iter_ok(chunks));
actix_webのHttpResponseBuilder::streaming
メソッドに渡したいです。
use actix_web::dev::HttpResponseBuilder; // 0.7.18
use rusoto_core::ByteStream; // 0.36.0
fn example(stream: ByteStream, builder: HttpResponseBuilder) {
builder.streaming(stream);
}
実行しようとすると、次のエラーが表示されます。
error[E0271]: type mismatch resolving `<rusoto_core::stream::ByteStream as futures::stream::Stream>::Item == bytes::bytes::Bytes`
--> src/main.rs:5:13
|
5 | builder.streaming(stream);
| ^^^^^^^^^ expected struct `std::vec::Vec`, found struct `bytes::bytes::Bytes`
|
= note: expected type `std::vec::Vec<u8>`
found type `bytes::bytes::Bytes`
その理由は、 (ie, ) をstreaming()
期待しているが、私は. どうすれば修正できますか?S: Stream<Item = Bytes, Error>
Item = Bytes
ByteStream
Item = Vec<u8>
解決策は何とかなると思いますがflatmap
、ストリームのような方法が見つかりませんでした。ByteStream
streaming()
使用方法の例を次に示します。
let text = "123";
let (tx, rx_body) = mpsc::unbounded();
let _ = tx.unbounded_send(Bytes::from(text.as_bytes()));
HttpResponse::Ok()
.streaming(rx_body.map_err(|e| error::ErrorBadRequest("bad request")))