basin2_lib/ilib/whitelist.rs
1use std::iter::Iterator;
2use std::hash::Hash;
3use std::collections::HashSet;
4use std::iter::FromIterator;
5
6pub trait Whitelist<T: Eq> {
7 fn whitelist(&mut self, valid: &Vec<T>) -> bool;
8}
9
10impl<X: Eq + Hash, T: Iterator<Item=X>> Whitelist<X> for T {
11 fn whitelist(&mut self, valid: &Vec<X>) -> bool {
12 let set: HashSet<&X> = HashSet::from_iter(valid);
13 for item in self {
14 if !set.contains(&item) {
15 return false;
16 }
17 }
18 true
19 }
20}