pub trait GetBack {
type Item;
fn get_back(&self, index: usize) -> Option<Self::Item>;
}
impl<T: Copy> GetBack for Vec<T> {
type Item = T;
fn get_back(&self, index: usize) -> Option<Self::Item> {
self.len()
.checked_sub(index)
.and_then(|index| self.get(index)).copied()
}
}
pub trait GetBackMut {
type Item;
fn get_back_mut(&mut self, index: usize) -> Option<&mut Self::Item>;
}
impl<T> GetBackMut for Vec<T> {
type Item = T;
fn get_back_mut(&mut self, index: usize) -> Option<&mut Self::Item> {
self.len()
.checked_sub(index)
.and_then(|index| self.get_mut(index))
}
}