use std::mem;
pub(crate) trait Dedup<T: PartialEq> {
fn clear_duplicates(&mut self);
}
impl<T: PartialEq> Dedup<T> for Vec<T> {
fn clear_duplicates(&mut self) {
let orig = mem::replace(self, Vec::with_capacity(self.len()));
for item in orig {
if !self.contains(&item) {
self.push(item);
}
}
}
}
pub(crate) trait FindFrom {
fn find_from(&self, needle: &Self, start: usize) -> Option<usize>;
}
impl FindFrom for str {
fn find_from(&self, needle: &Self, start: usize) -> Option<usize> {
self.get(start..)
.and_then(|s| s.find(needle))
.map(|i| i + start)
}
}