tree: 5ffd498c9578f0a31668acf1e6636cb6a3bb03a1 [path history] [tgz]
  1. src/
  2. tests/
  3. .android-checksum.json
  4. .cargo-checksum.json
  5. Android.bp
  6. Cargo.toml
  7. cargo_embargo.json
  8. LICENSE-APACHE
  9. METADATA
  10. MODULE_LICENSE_APACHE2
  11. README.md
crates/serde_bytes/README.md

serde_bytes Build Status Latest Version

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

[dependencies]
serde_bytes = "0.11"

Explanation

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.

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

Example

use serde::{Deserialize, Serialize};

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

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

License