use std::ops::Deref; pub struct VecSet { vec: Vec, } impl Default for VecSet { fn default() -> Self { Self { vec: vec![] } } } impl Deref for VecSet { type Target = [T]; fn deref(&self) -> &Self::Target { &self.vec } } impl VecSet { #[allow(dead_code)] pub fn clear(&mut self) { self.vec.clear(); } } impl VecSet { pub fn insert(&mut self, val: T) -> bool { if self.vec.contains(&val) { return false; } self.vec.push(val); true } pub fn remove(&mut self, val: &T) -> bool { for i in 0..self.vec.len() { if self.vec[i] == *val { self.vec.swap_remove(i); return true; } } false } }