mod de;
mod error;
mod ser;
#[cfg(test)]
mod test;
pub use self::error::Error;
use crate::{reader, writer, Value};
pub fn from_slice<T>(data: &[u8]) -> Result<T, Error>
where
T: serde::de::DeserializeOwned,
{
let value = reader::read_nested(data, Some(crate::MAX_NESTING_LEVEL)).map_err(Error::from)?;
from_value(value)
}
pub fn from_value<T>(value: Value) -> Result<T, Error>
where
T: serde::de::DeserializeOwned,
{
let deserializer = de::Deserializer::from_cbor_value(value);
T::deserialize(deserializer)
}
pub fn to_vec<T>(value: &T) -> Result<Vec<u8>, Error>
where
T: ?Sized + serde::Serialize,
{
let mut data = vec![];
writer::write(to_value(value)?, &mut data).map_err(Error::from)?;
Ok(data)
}
pub fn to_value<T>(value: &T) -> Result<Value, Error>
where
T: ?Sized + serde::Serialize,
{
let mut ser = ser::Serializer;
value.serialize(&mut ser)
}