use std::collections::HashSet;
use std::hash::Hash;
use serde::{Deserialize, Serialize};
#[derive(Default, Debug, Clone, Serialize, Deserialize)]
pub struct DupFilter<IdType: Hash + Eq + Copy + Serialize> {
seen_table: HashSet<IdType>,
}
#[derive(PartialEq, Eq, Debug)]
pub enum SeenType {
Fresh,
Seen,
}
impl<IdType: Hash + Eq + Copy + Serialize> DupFilter<IdType> {
pub fn check(&self, id: &IdType) -> SeenType {
if self.seen_table.contains(id) {
SeenType::Seen
} else {
SeenType::Fresh
}
}
pub fn filter(&mut self, id: &IdType) -> SeenType {
match self.seen_table.insert(*id) {
true => SeenType::Fresh,
false => SeenType::Seen,
}
}
}