#file #reader #dmx #valve #format #version #exchange

dmxparser

读取阀门数据模型交换 (DMX) 格式

1 个不稳定版本

0.1.0 2020年12月5日

#2525 in 解析器实现

MIT 许可证

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