#serde #serialization #no_std

no-std serde_bytes

Optimized handling of &[u8] and Vec<u8> for Serde

7 releases

0.10.4 Apr 1, 2018
0.10.3 Dec 17, 2017
0.10.2 Sep 8, 2017
0.10.1 Jun 30, 2017
0.1.0 Apr 20, 2017

#39 in Encoding

Download history 3678/week @ 2018-06-13 4638/week @ 2018-06-20 4713/week @ 2018-06-27 4084/week @ 2018-07-04 3329/week @ 2018-07-11 4639/week @ 2018-07-18 4621/week @ 2018-07-25 3302/week @ 2018-08-01 3338/week @ 2018-08-08 4031/week @ 2018-08-15 3481/week @ 2018-08-22 4704/week @ 2018-08-29 3731/week @ 2018-09-05

7,660 downloads per month
Used in 61 crates (45 directly)


299 lines

serde_bytes Build Status Latest Version

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.

extern crate serde_derive;

extern crate serde;
extern crate serde_bytes;

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>,


Serde is licensed under either of

at your option.


Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Serde by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.