6个版本
0.1.5 | 2022年11月24日 |
---|---|
0.1.4 | 2022年11月22日 |
#915 in 游戏开发
125KB
489 行
包含 (ELF可执行文件/库, 240KB) test_resources/bspci386
quake-bspc
此库通过创建子进程并异步等待其输出,提供围绕Quake编译器bspc的简单接口。
一些功能包括
- 设置临时目录以存储输入/输出文件
- 解析输出日志以查找错误/警告
- 实时流输出日志(通过
OptionsBuilder::log_stream
)
链接
BSPC工具本身不包括在库中。而是在库使用之前,它需要在文件系统中已存在。
- 旧版本1.2的二进制下载:链接
- 来源:bnoordhuis/bspc
- 带有更多提交的分支:TTimo/bspc
示例
基本示例,展示将Quake BSP文件转换为MAP文件的过程
use bspc::{Command, Options};
use tokio_util::sync::CancellationToken;
let bsp_contents = b"...";
let result = bspc::convert(
"./path/to/bspc.exe",
Command::BspToMap(bsp_contents),
Options::builder()
.verbose(true)
.build(),
)
.await;
match result {
Ok(output) => {
assert_eq!(output.files.len(), 1);
println!("{}", output.files[0].name);
println!("{}", String::from_utf8_lossy(&output.files[0].contents));
}
Err(err) => {
println!("Conversion failed: {}", err);
}
}
带有取消的示例
以下代码片段演示了如何通过取消令牌取消转换(在这种情况下,使用超时)。请注意,取消操作并非简单地通过丢弃future(如通常在异步Rust中那样)来完成,因为我们希望确保在future完成之前杀死子进程并删除临时目录。
use bspc::{Command, Options, ConversionError};
use tokio_util::sync::CancellationToken;
let bsp_contents = b"...";
let cancel_token = CancellationToken::new();
let cancel_task = {
let cancel_token = cancel_token.clone();
tokio::spawn(async move {
tokio::time::sleep(std::time::Duration::from_secs(10)).await;
cancel_token.cancel();
})
};
let result = bspc::convert(
"./path/to/bspc.exe",
Command::BspToMap(bsp_contents),
Options::builder()
.verbose(true)
.cancellation_token(cancel_token)
.build(),
)
.await;
match result {
Ok(output) => {
assert_eq!(output.files.len(), 1);
println!("{}", output.files[0].name);
println!("{}", String::from_utf8_lossy(&output.files[0].contents));
}
Err(ConversionError::Cancelled) => {
println!("Conversion timed out after 10 seconds");
}
Err(err) => {
println!("Conversion failed: {}", err);
}
}
许可证
根据以下任一许可证授权:
- Apache许可证2.0版(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交的任何贡献,均应根据上述方式双授权,不附加任何其他条款或条件。
依赖项
~139MB
~2.5M SLoC