lender/traits/
exact_size.rs1use crate::*;
2
3pub trait ExactSizeLender: Lender {
5 #[inline(always)]
9 fn len(&self) -> usize {
10 let (lower, upper) = self.size_hint();
11 assert_eq!(upper, Some(lower));
12 lower
13 }
14
15 #[inline(always)]
17 fn is_empty(&self) -> bool {
18 self.len() == 0
19 }
20}
21
22impl<I: ExactSizeLender> ExactSizeLender for &mut I {
23 #[inline(always)]
24 fn len(&self) -> usize {
25 (**self).len()
26 }
27
28 #[inline(always)]
29 fn is_empty(&self) -> bool {
30 (**self).is_empty()
31 }
32}
33
34pub trait ExactSizeFallibleLender: FallibleLender {
36 #[inline(always)]
40 fn len(&self) -> usize {
41 let (lower, upper) = self.size_hint();
42 assert_eq!(upper, Some(lower));
43 lower
44 }
45
46 #[inline(always)]
48 fn is_empty(&self) -> bool {
49 self.len() == 0
50 }
51}
52
53impl<I: ExactSizeFallibleLender> ExactSizeFallibleLender for &mut I {
54 #[inline(always)]
55 fn len(&self) -> usize {
56 (**self).len()
57 }
58
59 #[inline(always)]
60 fn is_empty(&self) -> bool {
61 (**self).is_empty()
62 }
63}