1个稳定版本

2.27.2 2022年9月7日

#1799编码

MIT 协议

1MB
26K SLoC

它是基于 [email protected] 的修改版本

变更

  • proto3可选支持

用于读取和写入协议缓冲区数据的库

版本2是稳定的

目前开发的rust-protobuf的分支是3。它与版本2有相同的理念,但包含许多改进,如

  • 运行时反射以支持可变,而不仅仅是访问
  • protobuf文本格式和JSON解析(依赖于反射)
  • 动态消息支持:在没有从模式生成代码的情况下与protobuf数据一起工作

rust-protobuf的稳定版本将支持到版本3发布。

版本3的跟踪问题.

如何生成rust代码

有几种方法可以从 .proto 文件生成rust代码

请参阅 protoc-rust crate 的readme。

使用纯Rust协议缓冲区解析器和代码生成器

readme可以在 protobuf-codegen-pure crate 中找到。

使用protoc-gen-rust插件

readme在这里:here

生成的代码

查看生成的文件(当前开发版本),在rust-protobuf内部使用

写时复制

Rust-protobuf可以与 bytes crate 一起使用。

要启用 Bytes,您需要

  1. 在rust-protobuf中启用 with-bytes 特性
[dependencies]
protobuf = { version = "~2.0", features = ["with-bytes"] }
  1. 启用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;

启用这些选项后,类型为 bytesstring 的字段将分别生成为 BytesChars。当从 Bytes 对象构建 CodedInputStream 时,这些类型的字段将获取原始 Bytes 对象的子切片,而不是在堆上分配。

相关库

依赖关系