musli-zerocopy 0.0.52

Zero copy primitives for use in Müsli.
Documentation

musli-zerocopy

Zero copy primitives for use in Müsli.

This provides a base set of tools to deal with types which do not require copying during deserialization.

Examples

use musli_zerocopy::{OwnedBuf, Pair, Unsized, ZeroCopy};

#[derive(ZeroCopy)]
#[repr(C)]
struct Custom {
    field: u32,
    string: Unsized<str>,
}

let mut buf = OwnedBuf::new();

let string = buf.insert_unsized("string")?;

let c1 = buf.insert_sized(Custom { field: 1, string })?;
let c2 = buf.insert_sized(Custom { field: 2, string })?;

let mut map = Vec::new();

map.push(Pair::new(1, c1));
map.push(Pair::new(2, c2));

let map = buf.insert_map(&mut map)?;
let buf = buf.as_aligned_buf();
let map = buf.bind(map)?;

let c1 = map.get(&1)?.expect("Missing key 1");
let c1 = buf.load(c1)?;
assert_eq!(c1.field, 1);
assert_eq!(buf.load(c1.string)?, "string");

let c2 = map.get(&2)?.expect("Missing key 2");
let c2 = buf.load(c2)?;
assert_eq!(c2.field, 2);
assert_eq!(buf.load(c2.string)?, "string");

assert!(map.get(&3)?.is_none());
Ok::<_, musli_zerocopy::Error>(())