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 编码

Download history 29291/week @ 2024-05-03 44082/week @ 2024-05-10 33631/week @ 2024-05-17 31686/week @ 2024-05-24 45467/week @ 2024-05-31 39520/week @ 2024-06-07 33959/week @ 2024-06-14 32529/week @ 2024-06-21 24601/week @ 2024-06-28 37593/week @ 2024-07-05 23720/week @ 2024-07-12 33021/week @ 2024-07-19 43441/week @ 2024-07-26 32522/week @ 2024-08-02 42747/week @ 2024-08-09 33839/week @ 2024-08-16

159,294 每月下载量
94 个crate中使用 (12个直接使用)

MIT/Apache

220KB
5K SLoC

crates.io docs.rs deps.rs MSRV Continuous integration codecov Apache 2.0 OR MIT licensed

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 版本可能会在未来更改,但将以小版本号升级的方式实现。

许可证

在以下任一许可证下发布:

根据您的选择。

本项目包含从Protocol Buffers项目导入的代码,该代码在原始许可(BSD)下提供。

贡献

除非你明确声明,否则根据Apache-2.0许可定义,你提交的任何有意包含在本作品中的贡献,都将按照上述方式双许可,没有任何附加条款或条件。

  • prost - Rust语言的协议缓冲区实现
  • protoxy - protox的Python绑定

依赖项

~3–4.5MB
~56K SLoC