1个稳定版本
2.27.2 | 2022年9月7日 |
---|
#1799 在 编码
1MB
26K SLoC
它是基于 [email protected] 的修改版本
变更
- proto3可选支持
用于读取和写入协议缓冲区数据的库
版本2是稳定的
目前开发的rust-protobuf的分支是3。它与版本2有相同的理念,但包含许多改进,如
- 运行时反射以支持可变,而不仅仅是访问
- protobuf文本格式和JSON解析(依赖于反射)
- 动态消息支持:在没有从模式生成代码的情况下与protobuf数据一起工作
rust-protobuf的稳定版本将支持到版本3发布。
如何生成rust代码
有几种方法可以从 .proto
文件生成rust代码
使用protoc-rust crate(推荐)程序化地调用 protoc
程序
请参阅 protoc-rust crate 的readme。
使用纯Rust协议缓冲区解析器和代码生成器
readme可以在 protobuf-codegen-pure crate 中找到。
使用protoc-gen-rust插件
readme在这里:here。
生成的代码
查看生成的文件(当前开发版本),在rust-protobuf内部使用
- descriptor.rs for descriptor.proto(这是Google协议缓冲区的一部分)
写时复制
Rust-protobuf可以与 bytes crate 一起使用。
要启用 Bytes
,您需要
- 在rust-protobuf中启用
with-bytes
特性
[dependencies]
protobuf = { version = "~2.0", features = ["with-bytes"] }
- 启用bytes选项
在代码生成时使用 Customize
protoc_rust::run(protoc_rust::Args {
...
customize: Customize {
carllerche_bytes_for_bytes: Some(true),
carllerche_bytes_for_string: Some(true),
..Default::default()
},
});
或在 .proto
文件中
import "rustproto.proto";
option (rustproto.carllerche_bytes_for_bytes_all) = true;
option (rustproto.carllerche_bytes_for_string_all) = true;
启用这些选项后,类型为 bytes
或 string
的字段将分别生成为 Bytes
或 Chars
。当从 Bytes
对象构建 CodedInputStream
时,这些类型的字段将获取原始 Bytes
对象的子切片,而不是在堆上分配。
相关库
protoc-rust
和protobuf-codegen-pure
可用于从.proto
库中生成 Rust 代码。protobuf-codegen
用于protoc-gen-rust
protoc 插件。protoc
库可用于编程方式调用protoc
程序。protoc-bin-vendored
包含打包到库中的protoc
命令。