use de::read::SliceReader; | |
use {ErrorKind, Result}; | |
/// A trait for erroring deserialization if not all bytes were read. | |
pub trait TrailingBytes { | |
/// Checks a given slice reader to determine if deserialization used all bytes in the slice. | |
fn check_end(reader: &SliceReader) -> Result<()>; | |
} | |
/// A TrailingBytes config that will allow trailing bytes in slices after deserialization. | |
#[derive(Copy, Clone)] | |
pub struct AllowTrailing; | |
/// A TrailingBytes config that will cause bincode to produce an error if bytes are left over in the slice when deserialization is complete. | |
#[derive(Copy, Clone)] | |
pub struct RejectTrailing; | |
impl TrailingBytes for AllowTrailing { | |
#[inline(always)] | |
fn check_end(_reader: &SliceReader) -> Result<()> { | |
Ok(()) | |
} | |
} | |
impl TrailingBytes for RejectTrailing { | |
#[inline(always)] | |
fn check_end(reader: &SliceReader) -> Result<()> { | |
if reader.is_finished() { | |
Ok(()) | |
} else { | |
Err(Box::new(ErrorKind::Custom( | |
"Slice had bytes remaining after deserialization".to_string(), | |
))) | |
} | |
} | |
} |