#compiler-plugin #buffer #protocols #puroro #google

nightly bin+lib puroro-codegen

为 puroro 实现的 Google Protocol Buffer 编译器插件

8 个版本 (重大变更)

0.14.0 2023 年 3 月 19 日
0.13.0 2023 年 2 月 23 日
0.12.0 2023 年 2 月 19 日
0.11.0 2023 年 2 月 4 日
0.7.0 2022 年 12 月 5 日

#1536 in 开发工具

每月 43 次下载
puroro-plugin 中使用

Apache-2.0

1MB
23K SLoC

puroro,Rust 的协议缓冲区实现

这是 Rust 语言的另一个协议缓冲区编译器实现。该项目遵循 Apache 2.0 许可。

这不是 Google 的官方支持产品。

有关更多文档,请参阅 puroro/src/lib.rs

重要说明

此库仍在开发中,很可能进行破坏性更改。

目前此库仅支持 Rust nightly 版本。

如何将 .pb 文件编译为 .rs 文件

首先,让我们为您创建一个用于 .proto 文件(以及生成的 .rs 文件)的 crate。实际上,为 proto 文件创建一个单独的 crate 不是必需的,尽管我建议这样做以避免任何意外问题。

$ cargo new my-examples --lib
$ cd my-examples

# Create your .proto files under this directory
$ mkdir protos

# Edit your .proto files
$ emacs-vim-nano-or-whatever ./protos/yourproto.proto

以下是一个简单的 proto 文件示例 test1.proto

syntax = "proto3";
package library;
message Book {
    string title = 1;
    uint32 num_pages = 2;
}

请注意,文件名对生成的代码没有任何影响。只有包名(在本例中,package library;)会影响生成的代码的模块名(或文件名)。

然后编辑 Cargo.toml 以添加对 puroro 库 crate 的依赖项

[dependencies]
puroro = "*"

[build-dependencies]
puroro-codegen = "*"
protoc-bin-vendored = "3.0.0"

最后一步,在 crate 根目录下创建一个 build.rs 文件。检查 我们的示例 build.rs 并复制粘贴。

完成这些步骤后,目录应如下所示

+ my-examples/
    ├ src/
    │   └ (empty)
    ├ protos/
    │   └ test1.proto
    ├ cargo.toml
    ├ build.rs
    ├ (some other generated files)

然后运行 cargo build 命令。如果成功运行,则在 src/ 目录下将生成生成的 .rs 文件,您可以从自己的 crate 中使用它。祝贺!

子 crate

  • puroro -- 用户需要导入的 crate
  • codegen -- 从给定的 .proto 文件信息生成 Rust 代码
  • inline -- 提供一个过程宏,可以直接在 Rust 代码中写入 proto 代码。目前仅用于测试目的,未发布。
  • tests -- 测试用例

待办事项

  • proto2
    • 组,至少正确地忽略它
    • 枚举(在proto2中我们需要拒绝未知值)
    • 默认值(例如 optional int32 foo = 1; [default=10]
    • 扩展
  • proto2 & 3
    • 映射
    • OneOfs
      • 类型定义
      • 序列化 / 反序列化
    • Anys,以及其他已知类型
    • 枚举允许别名选项
    • 更多的单元测试
    • 更多的文档
    • 将原始.proto文件注释打印到生成的文件中
    • 反射
      • 获取消息元数据(描述符)
    • 夜间/稳定功能
      • 支持稳定(不使用夜间功能)
    • 消息特性
    • 保留未知字段
    • 从切片反序列化
    • 序列化性能提升
    • 自定义反序列化器(?)
    • 必填字段检查器
    • 支持 allocator_api
    • RPCs / 服务
    • 一次获取多个字段的可变引用
    • 为每个消息类型提供一个开放的struct,以便用户可以使用结构体初始化语法和 ..Default::default() 语法轻松构建消息实例。
    • 使用 proc_macro 生成内联消息。用于测试目的。

依赖项

~15MB
~73K SLoC