diff --git a/src/core/registry.rs b/src/core/registry.rs index 16476c7..ec35e64 100644 --- a/src/core/registry.rs +++ b/src/core/registry.rs @@ -1,6 +1,6 @@ use anyhow::{anyhow, Result}; use parking_lot::RwLock; -use slab::{Iter, Slab}; +use slab::Slab; use std::sync::{Arc, Weak}; pub struct Registry(RwLock>>); @@ -11,9 +11,12 @@ impl Registry { self.0.write().insert(Arc::downgrade(&t_arc)); Ok(t_arc) } - pub fn iterate>)>(&self, closure: F) -> Result<()> { - closure(self.0.read().iter()); - Ok(()) + pub fn get_valid_contents(&self) -> Vec> { + self.0 + .read() + .iter() + .filter_map(|(_, item)| item.upgrade()) + .collect() } pub fn remove(&self, t: &T) -> Result<()> { let mut del_idx: Option = None;