use std::{vec::Vec,};
pub trait IndexOfVector<T> {
fn index_of(&self, element: &T) -> Option<usize>;
fn index_from(
&self,
element: &T,
start_index: usize,
) -> Option<usize>;
fn rindex_of(&self, element: &T) -> Option<usize>;
fn rindex_from(
&self,
element: &T,
start_index: usize,
) -> Option<usize>;
}
impl<T> IndexOfVector<T> for Vec<T>
where
T: PartialEq,
{
fn index_of(&self, element: &T) -> Option<usize> {
self.iter().position(|e| e == element)
}
fn index_from(
&self,
element: &T,
start_index: usize,
) -> Option<usize> {
let option =
self[start_index..].iter().position(|e| e == element);
option.map(|index| index + start_index)
}
fn rindex_of(&self, element: &T) -> Option<usize> {
self.iter().rposition(|e| e == element)
}
fn rindex_from(
&self,
element: &T,
start_index: usize,
) -> Option<usize> {
let option =
self[start_index..].iter().rposition(|e| e == element);
option.map(|index| index + start_index)
}
}