Revision control
Copy as Markdown
Other Tools
use error::{ErrorKind, Result};↩
↩
/// A trait for stopping serialization and deserialization when a certain limit has been reached.↩
pub trait SizeLimit {↩
/// Tells the SizeLimit that a certain number of bytes has been↩
/// read or written. Returns Err if the limit has been exceeded.↩
fn add(&mut self, n: u64) -> Result<()>;↩
/// Returns the hard limit (if one exists)↩
fn limit(&self) -> Option<u64>;↩
}↩
↩
/// A SizeLimit that restricts serialized or deserialized messages from↩
/// exceeding a certain byte length.↩
#[derive(Copy, Clone)]↩
pub struct Bounded(pub u64);↩
↩
/// A SizeLimit without a limit!↩
/// Use this if you don't care about the size of encoded or decoded messages.↩
#[derive(Copy, Clone)]↩
pub struct Infinite;↩
↩
impl SizeLimit for Bounded {↩
#[inline(always)]↩
fn add(&mut self, n: u64) -> Result<()> {↩
if self.0 >= n {↩
self.0 -= n;↩
Ok(())↩
} else {↩
Err(Box::new(ErrorKind::SizeLimit))↩
}↩
}↩
↩
#[inline(always)]↩
fn limit(&self) -> Option<u64> {↩
Some(self.0)↩
}↩
}↩
↩
impl SizeLimit for Infinite {↩
#[inline(always)]↩
fn add(&mut self, _: u64) -> Result<()> {↩
Ok(())↩
}↩
↩
#[inline(always)]↩
fn limit(&self) -> Option<u64> {↩
None↩
}↩
}↩