tree: b2d8e65e1825209ceeda309eee71997d606451dc [path history] [tgz]
  1. .github/
  2. src/
  3. tests/
  4. .android-checksum.json
  5. .cargo-checksum.json
  6. .cargo_vcs_info.json
  7. Android.bp
  8. Cargo.lock
  9. Cargo.toml
  10. Cargo.toml.orig
  11. cargo_embargo.json
  12. LICENSE-APACHE
  13. METADATA
  14. MODULE_LICENSE_APACHE2
  15. README.md
  16. TEST_MAPPING
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