20 个版本 (10 个重大更新)
0.11.0 | 2023年2月4日 |
---|---|
0.9.0 | 2023年2月1日 |
0.7.0 | 2022年12月5日 |
0.6.0 | 2022年10月17日 |
0.3.1 | 2021年11月9日 |
#127 在 #已弃用 中
每月70 次下载
1.5MB
30K SLoC
puroro,Rust 的协议缓冲区实现
另一个用于 Rust 语言的协议缓冲区编译器实现。本项目采用 Apache 2.0 许可协议。
这不是一个官方支持的产品。
有关更多文档,请参阅 puroro/src/lib.rs。
重要说明
此库处于开发中,很可能进行重大更改。
目前此库仅支持 Rust 夜间频道。
如何将 .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
命令。如果成功运行,则生成的 .rs
文件将位于 src/
目录下,您可以从自己的 crate 中使用它。恭喜!
子 crate
- puroro -- 需要导入库的用户所需的 crate
- codegen -- 从给定的 .proto 文件信息生成 Rust 代码
- inline -- 提供一个过程宏,可以直接在 Rust 代码中编写 proto 代码。目前仅用于测试目的,尚未发布。
- 测试用例
待办事项
- proto2
- 组,至少正确忽略它
- 枚举(在proto2中我们需要拒绝未知值)
- 默认值(类似于
optional int32 foo = 1; [default=10]
) - 扩展
- proto2 & 3
- 映射
- OneOfs
- 类型定义
- 序列化/反序列化
- Anys,以及其他已知类型
- 枚举允许别名选项
- 更多的单元测试
- 更多的文档
- 将原始.proto文件的注释打印到生成的文件中
- 反射
- 获取消息元数据(描述符)
- 夜间/稳定功能
- 支持稳定(不使用夜间功能)
- 消息特征
- 保留未知字段
- 从切片中反序列化
- 序列化性能改进
- 自定义反序列化器(?)
- 必填字段检查器
- 支持
allocator_api
。 - RPCs/服务
- 一次获取多个可变字段的引用
- 为每种消息类型提供一个开放的struct,以便用户可以使用struct初始化语法和
..Default::default()
语法轻松构建消息实例。 - proc_macro生成内联消息。用于测试目的。
依赖关系
~1.2–1.7MB
~41K SLoC