feat: add catalog.for_each_mut to apply changes to all items iteratively

This commit is contained in:
2025-11-11 15:03:30 +01:00
parent 23a6ccf8fc
commit cd0679c20c
2 changed files with 24 additions and 0 deletions

View File

@@ -0,0 +1,23 @@
use crate::*;
impl Catalog {
pub fn for_each_mut<T, F>(&self, predicate: F) -> Result<(), FailedTo>
where
T: EAV,
F: Fn(&mut T) -> (),
{
self.on_items(|items| {
for entity in items.values_mut() {
let original_item =
T::try_from(entity.clone()).map_err(|_| FailedTo::ConvertEntity)?;
let mut item = T::try_from(entity.clone()).map_err(|_| FailedTo::ConvertEntity)?;
predicate(&mut item);
if item != original_item {
*entity = T::try_into(item).map_err(|_| FailedTo::ConvertObject)?;
entity.state = EntityState::Updated;
}
}
Ok(())
})
}
}

View File

@@ -2,6 +2,7 @@ pub mod bool_try_from_value;
pub mod catalog_contains_key; pub mod catalog_contains_key;
pub mod catalog_delete; pub mod catalog_delete;
pub mod catalog_for_each; pub mod catalog_for_each;
pub mod catalog_for_each_mut;
pub mod catalog_get; pub mod catalog_get;
pub mod catalog_get_by; pub mod catalog_get_by;
pub mod catalog_init; pub mod catalog_init;