11个版本
0.1.11 | 2024年4月24日 |
---|---|
0.1.10 | 2024年4月23日 |
#324 in 进程宏
每月413次下载
160KB
4K SLoC
protobuf!
power_protobuf是一个进程宏,让您能够直接以这种方式在Rust源代码中编写protobuf!
protobuf! {
syntax = "proto3";
package helloworld;
option java_multiple_files = true;
option java_package = "io.grpc.examples.helloworld";
option java_outer_classname = "HelloWorldProto";
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello ({
// 'simplize_rpc_params' feature simplize to define Request/Response messages for rpc
string name
}) returns (HelloReply) {}
}
// The response message containing the greetings
message HelloReply {
string message // 'tagless' feature omit to assign tag number at design stage, it will do auto-increment as by refering previous number
}
}
功能
支持proto2和proto3
目前支持的所有protobuf版本(2到3)。
protobuf!
还允许您不必显式声明版本,它将默认解析为proto3语法。
将包名转换为Rust内部模块
如果定义了package
,它将生成当前源文件中的Rust mod
。反之,如果未定义,它将扩展到当前位置。
支持无标记
使用protobuf!
,您可以编写如下协议
message A {
int32 field1,
string field2,
repeated string field10 = 10,
string field11
sfix32 field12
}
字段field1、field2、field11、field12的标记将自动分配为'1'、'2'、'11'、'12'。
支持直接定义rpc请求/响应消息类型
为多个rpc方法定义Request和Response消息类型有时会是冗余的工作。
protobuf!
提供了一个简化此过程的选项
service Greeter {
rpc SayHello ({
string name
}) returns (HelloReply) {}
}
消息SayHelloRequest
将生成如{}
中定义的字段。请求/响应的类型名称结合了rpc名称和后缀(Request
/Response
)使用大驼峰命名法。
支持跨多个.rs文件进行类型引用
protobuf!
让您能够轻松地在其他protobuf定义中使用外部类型。它将通过读取相应的.rs文件来检查字段的类型。
FIXME:此文档后面将介绍更多细节。
支持tonic grpc堆栈
启用功能impl_prost
以使用prost/tonic堆栈扩展代码。
impl_prost
功能默认启用。
当前状态
功能 | 进度 |
---|---|
proto2和proto3语法 | 完成 |
无标记 | 完成 |
请求/响应参数类型自由 | 完成 |
支持prost | 部分 |
支持 rust-protobuf | 尚未支持 |
流支持 | 尚未支持 |
依赖
~2.8–4MB
~71K SLoC