feat: return iterator from list functions

This commit is contained in:
2025-10-01 12:40:07 +02:00
parent 05085a0f7b
commit cb22bf64e7

View File

@@ -54,35 +54,30 @@ impl O {
.map(|item| T::from(item.clone())); .map(|item| T::from(item.clone()));
items.next() items.next()
} }
pub fn list_by_class<T>(&self, class: &str) -> Vec<T> pub fn list_by_class<T>(&self, class: &str) -> impl Iterator<Item = T>
where where
T: From<Entity>, T: From<Entity>,
{ {
let items: Vec<T> = self self.items
.items
.values() .values()
.filter(|item| item.class == class) .filter(move |item| item.class == class)
.map(|item| T::from(item.clone())) .map(|item| T::from(item.clone()))
.collect();
items
} }
pub fn list_by_class_and_attribute<T>( pub fn list_by_class_and_attribute<T>(
&self, &self,
class: &str, class: &str,
attribute: &str, attribute: &str,
value: impl Into<Value> + Clone, value: impl Into<Value> + Clone,
) -> Vec<T> ) -> impl Iterator<Item = T>
where where
T: From<Entity>, T: From<Entity>,
{ {
let items: Vec<T> = self let value: Value = value.into();
.items self.items
.values() .values()
.filter(|item| item.class == class) .filter(move |item| item.class == class)
.filter(|item| item.value_of(attribute) == Some(&value.clone().into())) .filter(move |item| item.value_of(attribute) == Some(&value))
.map(|item| T::from(item.clone())) .map(|item| T::from(item.clone()))
.collect();
items
} }
pub fn persist(&self) { pub fn persist(&self) {
let path = path::Path::new(&self.path); let path = path::Path::new(&self.path);