15个版本 (4个重大更改)
| 0.5.3 | 2024年8月3日 |
|---|---|
| 0.5.2 | 2024年8月2日 |
| 0.5.1 | 2024年7月31日 |
| 0.4.8 | 2024年7月10日 |
| 0.1.0 | 2024年6月11日 |
在编码类别中排名340
每月下载量568
155KB
4K SLoC
gin-tonic
gin-tonic提供
- 一个protobuf的编解码器(类似于
prost) - 一个
prost-build的替代品 - 一个
tonic编解码器实现 - 一个
tonic-build的包装器,增加了额外的功能
虽然所有这些都可以使用提到的crate实现;gin-tonic还提供了将任何Rust类型转换为protobuf网络类型的特质。你为什么这么做?
如果你想通过protobuf传递一个UUID,你可能会这样做
message Foo {
string my_uuid = 1;
}
使用prost-build和tonic-build这将生成以下Rust结构体
struct Foo {
my_uuid: String,
}
如你所见,这里的Rust类型是String,但你在实际代码中想使用实际的uuid::Uuid。现在你必须在你的代码中进行一个可能失败的转换。
gin-tonic通过向protobuf文件添加选项来解决此问题
import "gin/proto/gin.proto";
message Foo {
string my_uuid = 1 [(gin_tonic.v1.rust_type) = "uuid::Uuid"];
}
使用gin-tonic代码生成器,这会生成以下Rust代码
struct Foo {
my_uuid: uuid::Uuid,
}
对于UUID的情况,gin-tonic提供了两个特性
uuid_string=> proto传输是string,解析错误在wire类型转换内处理uuid_bytes=> proto传输是bytes,这不需要额外的错误处理
你可以通过为你自己的类型实现PbType特质来添加你自己的类型。
基准测试
gin tonic
decode time: [699.72 ns 700.71 ns 701.81 ns]
encode time: [451.35 ns 453.22 ns 455.56 ns]
prost
decode time: [778.30 ns 782.24 ns 788.19 ns]
encode time: [622.77 ns 623.87 ns 625.02 ns]
依赖
~10MB
~155K SLoC