Crates.io | prototk |
lib.rs | prototk |
version | 0.11.0 |
source | src |
created_at | 2023-04-05 00:12:41.034429 |
updated_at | 2024-12-04 14:21:54.930605 |
description | prototk provides a toolkit for prototcol buffers. |
homepage | |
repository | https://github.com/rescrv/blue |
max_upload_size | |
id | 830579 |
size | 127,632 |
prototk provides a toolkit for prototcol buffers.
Maintenance track. The library is considered stable and will be put into maintenance mode if unchanged for one year. The clock was last reset 2023-09-19.
This library is about serialization and deserialization of messages. It strives to distil protocol buffers to this:
#[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("robert@rescrv.net", "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()?;
The error types in my libraries all have diffrent field numbers. Here is where I track them.
Maps are not supported by prototk natively because the typing is too complicated. Make a MapEntry type that has field
number 1 for the key and 2 for the value. Put it in a Vec
tagged as a message
.
The latest documentation is always available at docs.rs.