1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
//! General ergonomic improvements.
use std::io;
use bytes::Bytes;
use futures::{Stream, TryStreamExt};
use tokio::io::AsyncRead;
use tokio_util::codec;
/// Converts a struct implementing [`AsyncRead`] into a stream of `Result<`[`Bytes`]`, `[`io::Error`]`>`.
///
/// [`AsyncRead`]: tokio::io::AsyncRead
/// [`Bytes`]: bytes::Bytes
/// [`io::Error`]: std::io::Error
///
pub fn reader_to_iostream<R: AsyncRead>(reader: R) -> impl Stream<Item = Result<Bytes, io::Error>> {
codec::FramedRead::new(reader, codec::BytesCodec::new()).map_ok(|bytes| bytes.freeze())
}