use crate::{Buffer, Error, Result};
use serde::{de::DeserializeOwned, Serialize};
use std::fmt::Display;
pub(crate) mod de;
pub(crate) mod ser;
#[cfg_attr(doc, doc(cfg(feature = "serde")))]
pub fn serialize<T: ?Sized>(t: &T) -> Result<Vec<u8>>
where
T: Serialize,
{
Ok(Buffer::new().serialize(t)?.to_vec())
}
#[cfg_attr(doc, doc(cfg(feature = "serde")))]
pub fn deserialize<T>(bytes: &[u8]) -> Result<T>
where
T: DeserializeOwned,
{
Buffer::new().deserialize(bytes)
}
impl Buffer {
#[cfg_attr(doc, doc(cfg(feature = "serde")))]
pub fn serialize<T: ?Sized>(&mut self, t: &T) -> Result<&[u8]>
where
T: Serialize,
{
ser::serialize_internal(&mut self.0, t)
}
#[cfg_attr(doc, doc(cfg(feature = "serde")))]
pub fn deserialize<T>(&mut self, bytes: &[u8]) -> Result<T>
where
T: DeserializeOwned,
{
de::deserialize_internal(&mut self.0, bytes)
}
}
impl serde::ser::Error for Error {
fn custom<T>(_msg: T) -> Self
where
T: Display,
{
#[cfg(debug_assertions)]
return Self(crate::E::Custom(_msg.to_string()));
#[cfg(not(debug_assertions))]
Self(())
}
}
impl serde::de::Error for Error {
fn custom<T>(_msg: T) -> Self
where
T: Display,
{
#[cfg(debug_assertions)]
return Self(crate::E::Custom(_msg.to_string()));
#[cfg(not(debug_assertions))]
Self(())
}
}