10 个版本 (破坏性更新)
新 0.8.0 | 2024 年 8 月 19 日 |
---|---|
0.6.0 | 2024 年 2 月 19 日 |
0.5.0 | 2023 年 12 月 27 日 |
0.4.0 | 2023 年 9 月 21 日 |
0.2.1 | 2023 年 7 月 9 日 |
#325 在 编码
每月 503 次下载
用于 25 个 crate (21 直接)
155KB
4K SLoC
prototk
prototk 提供了协议缓冲区的工具包。
状态
维护跟踪。该库被认为是稳定的,如果一年内没有更改,则将进入维护模式。最后重置时间为 2023-09-19。
范围
此库关于消息的序列化和反序列化。它致力于将协议缓冲区简化到这一点
#[derive(Debug, Default, Message)]
pub enum Error {
#[prototk(278528, message)]
#[default]
Success {
#[prototk(1, message)]
core: ErrorCore,
},
#[prototk(278529, message)]
SerializationError {
#[prototk(1, message)]
core: ErrorCore,
#[prototk(2, message)]
err: prototk::Error,
#[prototk(3, string)]
context: String,
},
#[prototk(278530, message)]
UnknownServerName {
#[prototk(1, message)]
core: ErrorCore,
#[prototk(2, string)]
name: String,
},
#[prototk(278531, message)]
UnknownMethodName {
#[prototk(1, message)]
core: ErrorCore,
#[prototk(2, string)]
name: String,
},
#[prototk(278532, message)]
RequestTooLarge {
#[prototk(1, message)]
core: ErrorCore,
#[prototk(2, uint64)]
size: u64,
},
}
// serialize
let err = Error::UnknownServerName {
core: ErrorCore::new("[email protected]", "unknown server name", &UNKOWN_SERVER_NAME_COUNTER),
name: "FooRpcServer",
};
let buf = stack_pack(err).to_vec()
// deserialize
let up = Unpacker::new(&buf);
let err: Error = up.unpack()?;
缺点
- derive 宏的错误并不容易理解。
保留字段范围
我库中的错误类型都具有不同的字段编号。以下是跟踪它们的地方。
- 262144..262400 prototk::Error
- 278528..278784 rpc_pb::Error
- 294912..295168 macarunes::Error
- 311296..311552 tuple_key::Error
- 376832..377088 mani::Error
- 442368..442624 sst::Error
- 507904..508160 protoql::Error
- 573440..573696 paxos_pb::Error
映射
由于类型过于复杂,prototk 本身不支持映射。创建一个具有字段编号 1 的键和 2 的值的 MapEntry 类型。将其放入一个标记为 Vec
的消息中。
文档
最新文档始终可在 docs.rs 上找到。
依赖项
~1.5MB
~36K SLoC