2个版本

0.1.1 2021年8月1日
0.1.0 2021年8月1日

#10 in #peek

Download history 55/week @ 2024-01-01 88/week @ 2024-01-08 42/week @ 2024-01-15 56/week @ 2024-01-22 89/week @ 2024-01-29 52/week @ 2024-02-05 119/week @ 2024-02-12 100/week @ 2024-02-19 181/week @ 2024-02-26 120/week @ 2024-03-04 91/week @ 2024-03-11 116/week @ 2024-03-18 134/week @ 2024-03-25 120/week @ 2024-04-01 81/week @ 2024-04-08 85/week @ 2024-04-15

433 每月下载量
8 个Crates (4 直接) 中使用

Zlib 许可证

35KB
660

peekread

此crate允许您从一个任意的Read流中预览,而不消耗原始流。这是通过具有peek方法的PeekRead特质实现的。当调用此方法时,它返回一个新的PeekCursor对象,该对象实现了ReadBufReadSeek,允许您从流中读取而不影响原始流。直接在少数几个类型上实现了PeekRead特质,但对于大多数类型,您必须将您的类型包装在实现预览行为的SeekPeekReaderBufPeekReader中,分别使用搜索或缓冲。请参阅文档获取更多信息。

对于peekread,所需的最小稳定Rust版本为1.31.0。要开始使用peekread,请将以下内容添加到您的Cargo.toml

[dependencies]
peekread = "0.1"

示例

简短示例

use peekread::{PeekRead, SeekPeekReader};

let mut f = SeekPeekReader::new(File::open("ambiguous")?);

// HTML is so permissive its parser never fails, so check for signature.
if f.starts_with("<!DOCTYPE") {
    Ok(ParseResult::Html(parse_as_html(f)))
} else {
    // Can pass PeekCursor to functions accepting T: Read without them
    // having to be aware of peekread.
    parse_as_jpg(f.peek()).map(ParseResult::Jpg)
       .or_else(|_| parse_as_png(f.peek()).map(ParseResult::Png))
       .or_else(|_| parse_as_gif(f.peek()).map(ParseResult::Gif))
       .or_else(|_| parse_as_javascript(f.peek()).map(ParseResult::Js))
}

许可证

peekread在Zlib许可证下发布,这是一个宽容的许可证。它是OSI和FSF批准的,并与GPL兼容。

无运行时依赖