2个版本
0.1.1 | 2021年8月1日 |
---|---|
0.1.0 | 2021年8月1日 |
#10 in #peek
433 每月下载量
在 8 个Crates (4 直接) 中使用
35KB
660 行
peekread
此crate允许您从一个任意的Read
流中预览,而不消耗原始流。这是通过具有peek
方法的PeekRead
特质实现的。当调用此方法时,它返回一个新的PeekCursor
对象,该对象实现了Read
、BufRead
和Seek
,允许您从流中读取而不影响原始流。直接在少数几个类型上实现了PeekRead
特质,但对于大多数类型,您必须将您的类型包装在实现预览行为的SeekPeekReader
或BufPeekReader
中,分别使用搜索或缓冲。请参阅文档获取更多信息。
对于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兼容。