8个版本
0.1.7 | 2024年4月2日 |
---|---|
0.1.6 | 2021年10月24日 |
0.1.3 | 2021年5月4日 |
在数据格式中排名23
每月下载47次
54KB
1K SLoC
Ogre —
Rust语言的Quake和Half-Life纹理WAD解析器
ogre
是Quake和Half-Life WAD
文件的Rust表示和 nom
解析器。
它完全用Rust编写,并通过 #![forbid(unsafe_code)]
强制在crate范围内使用安全代码。
Rust表示
Rust表示位于 repr
模块中,是一组表示解析 WAD
文件内容的结构。
WAD
文件包含某些中间结构,例如头文件和元数据目录,这些结构仅在解析时存在,因此不会出现在最终表示中。对于您想检查 WAD
这些元素的情况,parser
模块包含自己的 parser::repr
子模块,以及用于解析到这些结构中的 nom
函数。
解析
将 WAD
文件解析成抽象语法树(AST)的最简单方法是通过 parser::parse_wad
函数
let wad = include_bytes!("../../ogre/test_data/wad2/medieval.wad");
let (_, wad) = ogre::parser::parse_wad(wad).expect("Failed to parse WAD");
assert!(wad.len() > 0);
println!("{:#?}", wad);
这将解析完整的 Wad
,并在完成前阻塞调用线程。内部,它调用 parser
模块中的其余函数来组装其最终输出。在需要更细粒度解析的情况下,这些函数也可以直接使用。
为了更好的性能,建议使用并行化实现。有关更多信息,请参阅下面的 Async
头文件。
格式支持
ogre
支持 Quake WAD2
和 Half-Life WAD3
格式。
目前,由于原始 Doom WAD
格式的数据结构不同和范围较大,因此不支持该格式。
Serde 支持
对于需要序列化和反序列化 Rust 表示的情况,ogre
包含了为 repr
和 parser::repr
模块中的所有类型提供的 serde::Serialize
和 serde::Deserialize
derive。
此功能受 serde_support
特性标志控制,默认启用。
Async
ogre
包含了一个并行化实现,该实现使用 async_std::task
在 parser
中的例程和一些 WAD
字节源之间进行复用。这种方法比单线程扩展得更好,并且通常性能更优——特别是对于大型 WAD
文件。解释和使用指南可以在 parser_async
模块中找到。
此功能受 async
特性标志控制,默认启用。
依赖项
~0.8–10MB
~103K SLoC