use crate::{
de::{BorrowDecode, BorrowDecoder, Decode, Decoder},
enc::{Encode, Encoder},
error::Error,
};
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct Compat<T>(pub T);
impl<T> Encode for Compat<T>
where
T: serde::Serialize,
{
fn encode<E: Encoder>(&self, encoder: &mut E) -> Result<(), Error> {
let serializer = super::ser::Serializer::new(encoder);
self.0
.serialize(serializer)
.map_err(|e| Error::OwnedCustom { message: e.msg })
}
}
impl<T> Decode for Compat<T>
where
T: serde::de::DeserializeOwned,
{
fn decode<D: Decoder<Context = ()>>(decoder: &mut D) -> Result<Self, Error> {
let deserializer = super::de::Deserializer::new(decoder);
T::deserialize(deserializer)
.map(Compat)
.map_err(|e| Error::OwnedCustom { message: e.msg })
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct BorrowCompat<T>(pub T);
impl<T> Encode for BorrowCompat<T>
where
T: serde::Serialize,
{
fn encode<E: Encoder>(&self, encoder: &mut E) -> Result<(), Error> {
let serializer = super::ser::Serializer::new(encoder);
self.0
.serialize(serializer)
.map_err(|e| Error::OwnedCustom { message: e.msg })
}
}
impl<'de, T> BorrowDecode<'de> for BorrowCompat<T>
where
T: serde::Deserialize<'de>,
{
fn borrow_decode<D: BorrowDecoder<'de, Context = ()>>(decoder: &mut D) -> Result<Self, Error> {
let deserializer = super::de::Deserializer::new(decoder);
T::deserialize(deserializer)
.map(BorrowCompat)
.map_err(|e| Error::OwnedCustom { message: e.msg })
}
}