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日 |
#2410 在 编码
每月531 次下载
用于 gin-tonic
70KB
2K 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
,解析错误在传输类型转换内处理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]
依赖关系
~0.7–1.4MB
~26K SLoC