1 个不稳定版本
0.1.0 | 2020年12月5日 |
---|
#2525 in 解析器实现
130KB
2.5K SLoC
dmxparser
使用 Rust 读取阀门数据模型交换 (DMX) 格式
功能
此库分为 3 部分
- 一个低级读取器,返回一个
File
结构,紧密遵循数据的内存布局。此 API 存在两种版本,流式dmxparser::from_reader(impl BufRead) -> File
返回数据的所有版本,以及非流式dmxparser::from_slice(&[u8]) -> File
返回从原始缓冲区借用的数据版本 - 一个高级
serde::Deserializer
实现,在dmxparser::serde::from_file<T: Deserialize>(File) -> T
中读取任何可反序列化的数据结构,从低级读取器返回的File
- 一个用于反序列化 VMAP 文件的自定义数据结构库,可通过
dmxparser::formats::vmap::read_vmap(File) -> CMapRootElement
访问
限制
目前此库
- 只能读取二进制 DMX 格式,特别是版本 9
- 无法将文件写回二进制格式
- 在
Deserializer
实现中缺少部分,已在 VMAP 结构上测试,但其他格式可能无法正常工作 - VMAP实现中存在缺失字段或无效的类型定义,因为格式没有文档化,类型定义是为了与在HL:Alyx SDK中找到的vmap文件兼容而编写的,但野外的其他地图可能使用不同形状的结构。
所有这些问题最终都可能在未来(Valve)的时间里得到修复,但如果您想帮忙,请随时提交拉取请求。
测试
该软件包有一个动态测试套件,根据包含要加载的地图文件的fixtures
目录动态生成测试用例。默认情况下,使用tests/fixtures
目录,但也可以指向一个游戏地图目录,该游戏地图显然不能包含在这里,因为存在版权问题,以使用cargo test --test reader -- --fixtures "D:/SteamLibrary/steamapps/common/Half-Life Alyx/content"
在真实数据上测试库。请注意,零售游戏的地图文件可能很大,可能需要使用--test-threads 1
禁用测试的并行执行,以防止同时加载过多地图并耗尽内存。
依赖关系
~0.7–1.5MB
~34K SLoC