pub struct Past<'a, T> {
length: usize,
iterator: Box<dyn DoubleEndedIterator<Item = T> + 'a>,
}
impl<'a, T> Past<'a, T> {
pub fn from_iter(length: usize, iterator: impl DoubleEndedIterator<Item = T> + 'a) -> Self {
Past {
length,
iterator: Box::new(iterator),
}
}
pub fn from_vec(events: Vec<T>) -> Self
where
T: 'a,
{
Past::from_iter(events.len(), events.into_iter())
}
}
impl<'a, T> Iterator for Past<'a, T> {
type Item = T;
fn next(&mut self) -> Option<T> {
self.iterator.next()
}
}
impl<'a, T> DoubleEndedIterator for Past<'a, T> {
fn next_back(&mut self) -> Option<Self::Item> {
self.iterator.next_back()
}
}
impl<'a, T> ExactSizeIterator for Past<'a, T> {
fn len(&self) -> usize {
self.length
}
}