1use error::{ErrorKind, Result};
2
3pub trait SizeLimit {
5 fn add(&mut self, n: u64) -> Result<()>;
8 fn limit(&self) -> Option<u64>;
10}
11
12#[derive(Copy, Clone)]
15pub struct Bounded(pub u64);
16
17#[derive(Copy, Clone)]
20pub struct Infinite;
21
22impl SizeLimit for Bounded {
23 #[inline(always)]
24 fn add(&mut self, n: u64) -> Result<()> {
25 if self.0 >= n {
26 self.0 -= n;
27 Ok(())
28 } else {
29 Err(Box::new(ErrorKind::SizeLimit))
30 }
31 }
32
33 #[inline(always)]
34 fn limit(&self) -> Option<u64> {
35 Some(self.0)
36 }
37}
38
39impl SizeLimit for Infinite {
40 #[inline(always)]
41 fn add(&mut self, _: u64) -> Result<()> {
42 Ok(())
43 }
44
45 #[inline(always)]
46 fn limit(&self) -> Option<u64> {
47 None
48 }
49}