17 个不稳定版本 (6 个重大更改)
0.7.1 | 2024年8月15日 |
---|---|
0.7.0 | 2024年7月8日 |
0.6.1 | 2024年6月11日 |
0.6.0 | 2024年2月7日 |
0.1.0 | 2022年7月25日 |
#129 in 编码
159,294 每月下载量
在 94 个crate中使用 (12个直接使用)
220KB
5K 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 许可证 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–4.5MB
~56K SLoC