#byte #prost #deserialize #serde #serialization #prpc #add

macro prpc-serde-bytes

A procedural macro to add custom serialization and deserialization to prost bytes

1 unstable release

0.1.0 Apr 18, 2024

#73 in #prost

Download history 13/week @ 2024-10-08 98/week @ 2024-10-15 2/week @ 2024-10-22 17/week @ 2024-10-29 16/week @ 2024-11-05 25/week @ 2024-11-12 10/week @ 2024-11-19 7/week @ 2024-11-26 29/week @ 2024-12-03 61/week @ 2024-12-10 62/week @ 2024-12-17 24/week @ 2024-12-24 6/week @ 2024-12-31 39/week @ 2025-01-07 42/week @ 2025-01-14 10/week @ 2025-01-21

97 downloads per month
Used in prpc

Apache-2.0

6KB
84 lines

prpc_serde_bytes

prpc_serde_bytes is a Rust procedural macro designed to work with structs that utilize both Serde and Prost crate attributes. Specifically, this macro targets struct fields marked with #[prost(bytes = "vec")] and automatically adds #[serde(with = "as_bytes")] to them, enabling custom serialization behavior as specified.

Usage

Add prpc_serde_bytes as a dependency in your Cargo.toml:

[dependencies]
prpc-serde-bytes = "0.1.0"

Example

use prpc_serde_bytes::prpc_serde_bytes;

#[prpc_serde_bytes("::hexed_bytes")]
#[derive(Serialize, Deserialize, prost::Message)]
pub struct Message {
    #[prost(bytes = "vec", tag = "1")]
    pub encoded: ::prost::alloc::vec::Vec<u8>,
    #[prost(uint64, tag = "2")]
    pub timestamp: u64,
}

Which will generate the following code:

#[derive(Serialize, Deserialize, prost::Message)]
pub struct Message {
    #[prost(bytes = "vec", tag = "1")]
    #[serde(with = "::hexed_bytes")]
    pub encoded: ::prost::alloc::vec::Vec<u8>,
    #[prost(uint64, tag = "2")]
    pub timestamp: u64,
}

Dependencies

~195–610KB
~15K SLoC