16个版本
0.10.2 | 2024年7月18日 |
---|---|
0.10.0 | 2024年4月18日 |
0.9.0 | 2023年8月24日 |
0.8.3 | 2023年6月15日 |
0.3.2 | 2021年3月15日 |
#755 in 编码
198 每月下载量
在 6 个crate(2 个直接) 中使用
88KB
2.5K SLoC
DDNet的teehistorian解析器
这个crate提供了一个库,用于安全解析游戏 DDNet 中的 teehistorian 文件。这个库的目标是
- 性能
- 可以通过不加载整个文件来检索头部
- teehistorian文件不需要全部适合内存
- 提供一个C-API,以便最终将其集成到 DDNet 中的teehistorian重放器
在这个库的非常核心部分是 Th 结构,用于获取teehistorian文件的 Chunks 流
示例
直接将teehistorian文件加载到内存中
use teehistorian::{Chunk, Th};
let input = b"\x69\x9d\xb1\x7b\x8e\xfb\x34\xff\xb1\xd8\xda\x6f\x60\xc1\x5d\xd1\
{\"version\":\"2\"}\x00\
\x40";
let mut th = Th::parse(&input[..]).unwrap();
assert_eq!(th.header().unwrap(), br#"{"version":"2"}"#);
assert_eq!(th.next_chunk().unwrap(), Chunk::Eos);
assert!(th.next_chunk().unwrap_err().is_eof());
当操作文件时
use teehistorian::{Chunk, ThBufReader, Th};
use std::fs::File;
let f = File::open("tests/minimal.teehistorian").unwrap();
let mut th = Th::parse(ThBufReader::new(f)).unwrap();
assert_eq!(th.header().unwrap(), br#"{"version":"2"}"#);
assert_eq!(th.next_chunk().unwrap(), Chunk::Eos);
assert!(th.next_chunk().unwrap_err().is_eof());
依赖项
~1.5–2.3MB
~47K SLoC