Skip to main content

deserialize_mut

Function deserialize_mut 

Source
pub fn deserialize_mut<'de, T>(src: &'de mut [u8]) -> ReadResult<T>
where T: SchemaRead<'de, DefaultConfig, Dst = T>,
Expand description

Deserialize a type from the given bytes, with the ability to form mutable references for types that are ZeroCopy. This can allow mutating the serialized data in place.

§Examples

§Zero-copy types

#[derive(SchemaWrite, SchemaRead)]
#[repr(C)]
struct Data {
    bytes: [u8; 7],
    the_answer: u8,
}

let data = Data { bytes: [0; 7], the_answer: 0 };

let mut serialized = wincode::serialize(&data).unwrap();
let data_mut: &mut Data = wincode::deserialize_mut(&mut serialized).unwrap();
data_mut.bytes = *b"wincode";
data_mut.the_answer = 42;

let deserialized: Data = wincode::deserialize(&serialized).unwrap();
assert_eq!(deserialized, Data { bytes: *b"wincode", the_answer: 42 });

§Mutable zero-copy members

#[derive(SchemaWrite, SchemaRead)]
struct Data {
    bytes: [u8; 7],
    the_answer: u8,
}
#[derive(SchemaRead)]
struct DataMut<'a> {
    bytes: &'a mut [u8; 7],
    the_answer: u8,
}

let data = Data { bytes: [0; 7], the_answer: 42 };

let mut serialized = wincode::serialize(&data).unwrap();
let data_mut: DataMut<'_> = wincode::deserialize_mut(&mut serialized).unwrap();
*data_mut.bytes = *b"wincode";

let deserialized: Data = wincode::deserialize(&serialized).unwrap();
assert_eq!(deserialized, Data { bytes: *b"wincode", the_answer: 42 });