#buffer #toolkit #reserved #field #within #was #protocol

prototk

prototk 提供了协议缓冲区的工具包

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编码

Download history 24/week @ 2024-04-30 26/week @ 2024-05-07 36/week @ 2024-05-14 109/week @ 2024-05-21 118/week @ 2024-05-28 71/week @ 2024-06-04 60/week @ 2024-06-11 102/week @ 2024-06-18 73/week @ 2024-06-25 4/week @ 2024-07-02 68/week @ 2024-07-09 121/week @ 2024-07-16 53/week @ 2024-07-23 112/week @ 2024-07-30 66/week @ 2024-08-06 272/week @ 2024-08-13

每月 503 次下载
用于 25 个 crate (21 直接)

Apache-2.0

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