multi-readers 0.2.2

Combining multiple readers
Documentation
<p>
    <a href="https://crates.io/crates/multi-readers">
    	<img alt="Crate Info" src="https://img.shields.io/crates/v/multi-readers.svg"/>
    </a>
</p>

# Multiple Readers


`multiple-readers ` is a Rust library aimed at simplifying the process of combining multiple types that implement the [std::io::Read](https://doc.rust-lang.org/stable/std/io/trait.Read.html)  trait into a unified reader.

# Features


- Combines multiple types that implement the [std::io::Read]https://doc.rust-lang.org/stable/std/io/trait.Read.html trait into a unified reader.
- Provides [SliceReader]https://docs.rs/multi-readers/*/multi_readers/struct.SliceReader.html and [BytesReader]https://docs.rs/multi-readers/*/multi_readers/struct.BytesReader.html types, which respectively wrap `&[u8]` and `Vec<u8>`, implementing the [std::io::Read]https://doc.rust-lang.org/stable/std/io/trait.Read.html and
  [tokio::io::AsyncRead]https://docs.rs/tokio/*/tokio/io/trait.AsyncRead.html trait.
- Can read from data sources sequentially until all data sources are exhausted.
- Supports [tokio]https://crates.io/crates/tokio (` Unstable` )

# Example


```rust
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

```toml
tokio = { version = "*", features = ["full"]}
multi-readers = {version = "*", features = ["async"]}
```


```rust
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");
}
```