1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
use std::collections::HashSet; use std::hash::BuildHasher; use std::hash::Hash; use std::sync::Arc; use crate::access::{iter::ReflectIter, Access, ReflectDirect}; use crate::climber::{ClimbError, Climber}; use crate::node_tree::NodeTree; use crate::reflector::Reflector; impl<'a, K> ReflectIter<&'a dyn Access> for std::collections::hash_set::Iter<'a, K> where K: Eq + Hash + Access, { fn reflect_next(&mut self) -> Option<&'a dyn Access> { match self.next() { None => None, Some(value) => Some(value), } } } impl<K, S> ReflectDirect for HashSet<K, S> where K: Eq + Hash + Access, S: BuildHasher, { fn immut_reflector(&self, reflector: &Arc<Reflector>) -> NodeTree { let mut i = Box::new(self.iter()); Reflector::reflect_set(reflector, &mut *i, "HashSet") } fn immut_climber<'a>( &self, _climber: &mut Climber<'a>, ) -> Result<Option<NodeTree>, ClimbError> { return Ok(None); } fn mut_climber<'a>( &mut self, _climber: &mut Climber<'a>, ) -> Result<Option<NodeTree>, ClimbError> { return Ok(None); } } use interact_derive::derive_interact_opaque; derive_interact_opaque! { #[interact(skip_bound(S))] #[interact(immut_fn(len()))] struct HashSet<K, S> where K: Eq + std::hash::Hash, S: std::hash::BuildHasher; }