#![cfg(feature = "serialization")]
use serde::de::DeserializeOwned;
use serde::Serialize;
use std::io::{Read, Write};
#[derive(Debug, thiserror::Error)]
pub enum BincodeError {
#[error("bincode encode error: {0}")]
Encode(#[from] bincode::error::EncodeError),
#[error("bincode decode error: {0}")]
Decode(#[from] bincode::error::DecodeError),
}
pub fn serialize_into<W: Write, T: Serialize>(
writer: &mut W,
value: &T,
) -> Result<(), BincodeError> {
let config = bincode::config::legacy();
bincode::serde::encode_into_std_write(value, writer, config)?;
Ok(())
}
pub fn deserialize_from<R: Read, T: DeserializeOwned>(reader: &mut R) -> Result<T, BincodeError> {
let config = bincode::config::legacy();
Ok(bincode::serde::decode_from_std_read(reader, config)?)
}
pub fn serialize<T: Serialize>(value: &T) -> Result<Vec<u8>, BincodeError> {
let config = bincode::config::legacy();
Ok(bincode::serde::encode_to_vec(value, config)?)
}
pub fn deserialize<T: DeserializeOwned>(slice: &[u8]) -> Result<T, BincodeError> {
let config = bincode::config::legacy();
let (value, _consumed): (T, usize) = bincode::serde::decode_from_slice(slice, config)?;
Ok(value)
}