use crate::{MsgPack, MsgUnpack, PackErr, UnpackErr};
#[cfg(feature = "alloc")]
use alloc::{vec, vec::Vec};
#[cfg(feature = "alloc")]
pub fn pack_vec<T: MsgPack>(value: &T) -> Result<Vec<u8>, PackErr> {
let mut out = vec![];
value.pack_with_writer(&mut out)?;
Ok(out)
}
#[cfg(feature = "std")]
pub fn pack_write<T: MsgPack>(w: &mut dyn std::io::Write, value: &T) -> Result<usize, PackErr> {
let mut w = crate::write::IoWrite(w);
value.pack_with_writer(&mut w)
}
pub fn pack_slice<T: MsgPack>(mut buf: &mut [u8], value: &T) -> Result<usize, PackErr> {
value.pack_with_writer(&mut buf)
}
pub fn unpack_slice<'a, T: MsgUnpack<'a>>(mut bytes: &'a [u8]) -> Result<T, UnpackErr> {
let value = T::unpack(&mut bytes)?;
if !bytes.is_empty() {
return Err(UnpackErr::TrailingBytes(bytes.len()));
}
Ok(value)
}