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 |
Bytes |
Wrapper around |
Functions
deserialize |
Serde |
serialize |
Serde |