Newer
Older
use {Payload, Error};
pub fn deserialize_payload<T>(buffer: &[u8], version: u32, flags: u32) -> Result<T, Error> where T: Payload {
let mut reader = PayloadReader::new(buffer, version, flags);
let result = try!(reader.read());
if !reader.is_finished() {
return Err(Error::Deserialize);
}
Ok(result)
}
pub struct PayloadReader<T> {
reader: Reader<T>,
pub fn new(buffer: &'a [u8], version: u32, flags: u32) -> Self {
pub fn read<T>(&mut self) -> Result<T, Error> where T: Payload {
if T::version() > self.version {
return Err(Error::InvalidVersion);
}
T::deserialize_payload(&mut self.reader, self.version)
}