Crate serde_bytes [] [src]

Wrapper types to enable optimized handling of &[u8] and Vec<u8>.

Without specialization, Rust forces Serde to treat &[u8] just like any other slice and Vec<u8> just like any other vector. In reality this particular slice and vector can often be serialized and deserialized in a more efficient, compact representation in many formats.

When working with such a format, you can opt into specialized handling of &[u8] by wrapping it in serde_bytes::Bytes and Vec<u8> by wrapping it in serde_bytes::ByteBuf.

This crate supports the Serde with attribute to enable efficient handling of &[u8] and Vec<u8> in structs without needing a wrapper type.

#[macro_use]
extern crate serde_derive;

extern crate serde;
extern crate serde_bytes;

#[derive(Serialize)]
struct Efficient<'a> {
    #[serde(with = "serde_bytes")]
    bytes: &'a [u8],

    #[serde(with = "serde_bytes")]
    byte_buf: Vec<u8>,
}

#[derive(Serialize, Deserialize)]
struct Packet {
    #[serde(with = "serde_bytes")]
    payload: Vec<u8>,
}

Rust support for specialization is being tracked in rust-lang/rust#31844. Once it lands in the stable compiler Serde will be deprecating these wrapper types in favor of optimizing &[u8] and Vec<u8> out of the box.

Structs

ByteBuf

Wrapper around Vec<u8> to serialize and deserialize efficiently.

Bytes

Wrapper around &[u8] to serialize efficiently. Does not support deserialization.

Functions

deserialize

Serde deserialize_with function to deserialize bytes efficiently.

serialize

Serde serialize_with function to serialize bytes efficiently.