use crate::*;
pub trait ExactSizeLender: Lender {
#[inline(always)]
fn len(&self) -> usize {
let (lower, upper) = self.size_hint();
assert_eq!(upper, Some(lower));
lower
}
#[inline(always)]
fn is_empty(&self) -> bool {
self.len() == 0
}
}
impl<I: ExactSizeLender> ExactSizeLender for &mut I {
#[inline(always)]
fn len(&self) -> usize {
(**self).len()
}
#[inline(always)]
fn is_empty(&self) -> bool {
(**self).is_empty()
}
}
pub trait ExactSizeFallibleLender: FallibleLender {
#[inline(always)]
fn len(&self) -> usize {
let (lower, upper) = self.size_hint();
assert_eq!(upper, Some(lower));
lower
}
#[inline(always)]
fn is_empty(&self) -> bool {
self.len() == 0
}
}
impl<I: ExactSizeFallibleLender> ExactSizeFallibleLender for &mut I {
#[inline(always)]
fn len(&self) -> usize {
(**self).len()
}
#[inline(always)]
fn is_empty(&self) -> bool {
(**self).is_empty()
}
}