#channel #reader


Reader implementation on channel of bytes

3 releases

0.1.3 Oct 15, 2021
0.1.2 Oct 15, 2021
0.1.1 Oct 15, 2021

#686 in Concurrency


153 lines

📖 channel_io

Build Status license Version info

A small helper library to convert a flume channel of Bytes into a Channel{Reader,Writer} that implements {Read,Write}.


use std::io::Read;

use bytes::Bytes;
use channel_reader::ChannelReader;
use flume::bounded;

fn main() {
    let (tx, rx) = bounded(10);
    let sender_thread = std::thread::spawn(move || {
        for i in 0..10 {
            let buffer = Bytes::from(vec![i; 10]);

    let mut reader = ChannelReader::new(rx);
    let mut buffer = vec![];
    reader.read_to_end(&mut buffer).unwrap();
    assert_eq!(buffer.len(), 100);

Why flume?

The goal is to bridge an async reader-like-thing (in this case a DmaStreamReader in Glommio) into a synchronous reader.

Why bytes?

I like the API, and in theory as chunks are dropped on the sync side of the sender depending on how the caller is doing things the memory can be reused.