serde-rs / bytes

Wrapper types to enable optimized handling of &[u8] and Vec<u8>
Apache License 2.0
306 stars 37 forks source link

How to use this crate without use of struct fields #34

Open kylecarow opened 2 years ago

kylecarow commented 2 years ago

I'm relatively new to Rust so bear with me. I'm working on a project that provides a Python API to Rust code via Pyo3. In my project I'm trying to enable fast serialization and deserialization using bincode. I read this crate can mitigate the performance issues I'm seeing (bincode takes 3 times longer than serialization/deserialization with serde_json).

It's not clear to me how to take advantage of this crate when I don't use a struct field to hold the data.

For reference, this is what the unedited, actual serialization and deserialization code snippet looks like, with the Pyo3 API intact:

pub fn to_bincode(&self) -> PyResult<Vec<u8>> {
    Ok(serialize(&self).unwrap())
}
#[classmethod]
pub fn from_bincode(_cls: &PyType, encoded: Vec<u8>) -> PyResult<Self> {
    Ok(deserialize(&encoded).unwrap())
}

With the API removed, I suppose would be the analogous code:

pub fn to_bincode(&self) -> Vec<u8> {
    serialize(&self).unwrap()
}
pub fn from_bincode(encoded: Vec<u8>) -> Self {
    deserialize(&encoded).unwrap()
}

See also: https://github.com/PyO3/pyo3/issues/100

How can I utilize this crate in this case?