14 个不稳定版本 (6 个重大变更)
0.7.0 | 2024年7月8日 |
---|---|
0.6.0 | 2024年2月7日 |
0.5.0 | 2023年9月1日 |
0.4.1 | 2023年6月25日 |
0.1.0 | 2022年8月14日 |
#1158 in 编码
每月141,193次下载
在 93 个crate中使用(通过protox)
160KB
4K SLoC
protox
protobuf 编译器的 rust 实现,旨在作为库使用,例如与prost-build
一起使用,以避免需要构建 protoc
。
示例
编译单个源文件
assert_eq!(protox::compile(["root.proto"], ["."]).unwrap(), FileDescriptorSet {
file: vec![
FileDescriptorProto {
name: Some("root.proto".to_owned()),
/* ... */
}
],
});
与prost-build
一起使用
let file_descriptors = protox::compile(["root.proto"], ["."]).unwrap();
prost_build::compile_fds(file_descriptors).unwrap();
与tonic-build
一起使用
let file_descriptors = protox::compile(["root.proto"], ["."]).unwrap();
let file_descriptor_path = PathBuf::from(env::var_os("OUT_DIR").expect("OUT_DIR not set"))
.join("file_descriptor_set.bin");
fs::write(&file_descriptor_path, file_descriptors.encode_to_vec()).unwrap();
tonic_build::configure()
.build_server(true)
.file_descriptor_set_path(&file_descriptor_path)
.skip_protoc_run()
.compile(&["root.proto"], &["."])
.unwrap();
错误信息
此 crate 使用 miette
为错误添加额外的详细信息。为了获得漂亮的错误信息,请将 miette
作为依赖项添加,并启用 fancy
功能,并从您的构建脚本返回 miette::Result
。
fn main() -> miette::Result<()> {
let _ = protox::compile(["root.proto"], ["."])?;
Ok(())
}
示例错误信息
Error:
× name 'Bar' is not defined
╭─[root.proto:3:1]
3 │ message Foo {
4 │ Bar bar = 1;
· ─┬─
· ╰── found here
5 │ }
╰────
最低支持的 Rust 版本
Rust 1.70 或更高。
最低支持的 Rust 版本可能在将来更改,但将以较小的版本号升级的方式完成。
许可协议
许可协议为以下之一:
- Apache License, Version 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可协议 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
本项目包括从 Protocol Buffers 项目导入的代码,该代码在原始 (BSD) 许可证下提供。
贡献
除非您明确表示,否则您有意提交的任何贡献,根据 Apache-2.0 许可证定义,应如上所述双重许可,不附加任何额外条款或条件。
依赖项
~3.5MB
~31K SLoC