9 个版本

0.2.1 2024 年 8 月 11 日
0.2.0 2024 年 7 月 1 日
0.2.0-fixed2024 年 8 月 11 日
0.1.6 2024 年 5 月 12 日
0.1.0 2023 年 12 月 4 日

#23 in #io-read

Download history 135/week @ 2024-04-27 29/week @ 2024-05-04 136/week @ 2024-05-11 12/week @ 2024-05-18 1/week @ 2024-05-25 3/week @ 2024-06-08 1/week @ 2024-06-15 171/week @ 2024-06-29 5/week @ 2024-07-06 1/week @ 2024-07-27 191/week @ 2024-08-10

192 个月下载量

MIT 许可证

15KB
275

Crate Info

多读取器

multiple-readers 是一个 Rust 库,旨在简化将实现 std::io::Read 特质的多种类型组合成一个统一读取器的过程。

特性

示例

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(())
}

异步示例

  • 依赖项
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");
}

依赖项

~0–1.1MB
~19K SLoC