From cb22bf64e712d9bcf60252a2174e95de7a1706e5 Mon Sep 17 00:00:00 2001 From: davidemazzocchi Date: Wed, 1 Oct 2025 12:40:07 +0200 Subject: [PATCH] feat: return iterator from list functions --- 01.workspace/heave/src/str/catalog.rs | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/01.workspace/heave/src/str/catalog.rs b/01.workspace/heave/src/str/catalog.rs index 0103596..69b5a8a 100644 --- a/01.workspace/heave/src/str/catalog.rs +++ b/01.workspace/heave/src/str/catalog.rs @@ -54,35 +54,30 @@ impl O { .map(|item| T::from(item.clone())); items.next() } - pub fn list_by_class(&self, class: &str) -> Vec + pub fn list_by_class(&self, class: &str) -> impl Iterator where T: From, { - let items: Vec = self - .items + self.items .values() - .filter(|item| item.class == class) + .filter(move |item| item.class == class) .map(|item| T::from(item.clone())) - .collect(); - items } pub fn list_by_class_and_attribute( &self, class: &str, attribute: &str, value: impl Into + Clone, - ) -> Vec + ) -> impl Iterator where T: From, { - let items: Vec = self - .items + let value: Value = value.into(); + self.items .values() - .filter(|item| item.class == class) - .filter(|item| item.value_of(attribute) == Some(&value.clone().into())) + .filter(move |item| item.class == class) + .filter(move |item| item.value_of(attribute) == Some(&value)) .map(|item| T::from(item.clone())) - .collect(); - items } pub fn persist(&self) { let path = path::Path::new(&self.path);