6 releases

0.1.6 May 12, 2024
0.1.5 May 3, 2024
0.1.4 Apr 26, 2024
0.1.3 Mar 31, 2024
0.1.0 Dec 4, 2023

#20 in #data-source

Download history 7/week @ 2024-02-13 16/week @ 2024-02-20 16/week @ 2024-02-27 3/week @ 2024-03-12 222/week @ 2024-03-26 34/week @ 2024-04-02 2/week @ 2024-04-09 137/week @ 2024-04-23 154/week @ 2024-04-30 122/week @ 2024-05-07 21/week @ 2024-05-14 6/week @ 2024-05-21

149 downloads per month

MIT license

16KB
253 lines

Crate Info

Multiple Readers

multiple-readers is a Rust library aimed at simplifying the process of combining multiple types that implement the std::io::Read trait into a unified reader.

Features

Example

use multi_readers::{BytesReader, SliceReader, join_readers};
use std::{fs::File, io::Read};
fn main() -> std::io::Result<()> {
    let slice = SliceReader::new(b"First-");
    let bytes = BytesReader::new(b"Second-".to_vec()); 
    std::fs::write("test.txt", b"Third")?;
    let f = File::open("test.txt")?;
    let mut reader = join_readers!(slice, bytes, f);
    let mut buf = String::new();
    reader.read_to_string(&mut buf)?;
    assert_eq!(buf.as_str(), "First-Second-Third");
    Ok(())
}

Async Example

  • dependencies
tokio = { version = "*", features = ["full"]}
multi-readers = {version = "*", features = ["async"]}
use multi_readers::*;
use tokio::io::AsyncReadExt;
#[tokio::main]
async fn main() {
    let slice1 = SliceReader::new(b"12345");
    let slice2 = SliceReader::new(b"2346");
    let mut reader = join_async_readers!(slice1, slice2);
    let mut buf = [0; 4];
    let len = reader.read(&mut buf).await.unwrap();
    assert_eq!(&buf[..len], b"1234");
    let len = reader.read(&mut buf).await.unwrap();
    assert_eq!(&buf[..len], b"5234");
    let len = reader.read(&mut buf).await.unwrap();
    assert_eq!(&buf[..len], b"6");
}

Dependencies

~0–1.1MB
~19K SLoC