#channel #reader #read #byte #write #reader-writer #read-write

channel_io

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

#914 in Concurrency

Unlicense/MIT

11KB
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}.

Example

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]);
            tx.send(buffer).unwrap();
        }
    });
    sender_thread.join().unwrap();

    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.

Dependencies

~400KB