use serde::{Deserialize, Serialize};
use super::{Codec, DeserializationError, SerializationError};
#[cfg_attr(docsrs, doc(cfg(feature = "codec-bincode")))]
#[derive(Clone, Serialize, Deserialize)]
pub struct Bincode;
const LEGACY: bincode::config::Configuration<
bincode::config::LittleEndian,
bincode::config::Fixint,
bincode::config::NoLimit,
> = bincode::config::legacy();
impl Codec for Bincode {
fn serialize<Writer, Item>(mut writer: Writer, item: &Item) -> Result<(), super::SerializationError>
where
Writer: std::io::Write,
Item: serde::Serialize,
{
bincode::serde::encode_into_std_write(item, &mut writer, LEGACY)
.map(|_| ())
.map_err(SerializationError::new)
}
fn deserialize<Reader, Item>(mut reader: Reader) -> Result<Item, super::DeserializationError>
where
Reader: std::io::Read,
Item: serde::de::DeserializeOwned,
{
bincode::serde::decode_from_std_read(&mut reader, LEGACY).map_err(DeserializationError::new)
}
}
#[cfg_attr(docsrs, doc(cfg(feature = "codec-bincode")))]
#[derive(Clone, Serialize, Deserialize)]
pub struct Bincode2;
const STANDARD: bincode::config::Configuration = bincode::config::standard();
impl Codec for Bincode2 {
fn serialize<Writer, Item>(mut writer: Writer, item: &Item) -> Result<(), super::SerializationError>
where
Writer: std::io::Write,
Item: serde::Serialize,
{
bincode::serde::encode_into_std_write(item, &mut writer, STANDARD)
.map(|_| ())
.map_err(SerializationError::new)
}
fn deserialize<Reader, Item>(mut reader: Reader) -> Result<Item, super::DeserializationError>
where
Reader: std::io::Read,
Item: serde::de::DeserializeOwned,
{
bincode::serde::decode_from_std_read(&mut reader, STANDARD).map_err(DeserializationError::new)
}
}