diff --git a/01.workspace/heave/src/imp/catalog_for_each.rs b/01.workspace/heave/src/imp/catalog_for_each.rs new file mode 100644 index 0000000..61eea5e --- /dev/null +++ b/01.workspace/heave/src/imp/catalog_for_each.rs @@ -0,0 +1,16 @@ +use crate::*; + +impl Catalog { + pub fn for_each(&self, predicate: F) -> Result<(), FailedTo> + where + T: EAV, + F: Fn(&T) -> (), + { + self.with_items(|items| { + Ok(items + .values() + .flat_map(|entity| T::try_from(entity.clone()).map_err(|_| FailedTo::ConvertEntity)) + .for_each(|item| predicate(&item))) + }) + } +} diff --git a/01.workspace/heave/src/imp/mod.rs b/01.workspace/heave/src/imp/mod.rs index af8b38a..9c43247 100644 --- a/01.workspace/heave/src/imp/mod.rs +++ b/01.workspace/heave/src/imp/mod.rs @@ -1,6 +1,7 @@ pub mod bool_try_from_value; pub mod catalog_contains_key; pub mod catalog_delete; +pub mod catalog_for_each; pub mod catalog_get; pub mod catalog_get_by; pub mod catalog_init;