summaryrefslogtreecommitdiffstats
path: root/lib/entry
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2018-04-22 13:35:35 +0200
committerMatthias Beyer <mail@beyermatthias.de>2018-04-24 13:40:42 +0200
commit007c02c2f13bd0bcb2f614b3785e173795a3ad9a (patch)
treedf72f41c7bf8fdad42eac0bac5cb23167e480333 /lib/entry
parent255f4211c90fa23970fbc34d24a0a70f79f27d3a (diff)
Rewrite all_category_names() for removed Store::retrieve_for_module()
Diffstat (limited to 'lib/entry')
-rw-r--r--lib/entry/libimagentrycategory/src/register.rs34
1 files changed, 19 insertions, 15 deletions
diff --git a/lib/entry/libimagentrycategory/src/register.rs b/lib/entry/libimagentrycategory/src/register.rs
index 5138642b..88c3e645 100644
--- a/lib/entry/libimagentrycategory/src/register.rs
+++ b/lib/entry/libimagentrycategory/src/register.rs
@@ -101,9 +101,7 @@ impl CategoryRegister for Store {
/// Get all category names
fn all_category_names(&self) -> Result<CategoryNameIter> {
- self.retrieve_for_module("category")
- .chain_err(|| CEK::StoreReadError)
- .map(|iter| CategoryNameIter::new(self, iter))
+ Ok(CategoryNameIter::new(self, self.entries()?.without_store()))
}
/// Get a category by its name
@@ -268,18 +266,24 @@ impl<'a> Iterator for CategoryNameIter<'a> {
// TODO: Optimize me with lazy_static
let query = CATEGORY_REGISTER_NAME_FIELD_PATH;
- self.1
- .next()
- .map(|sid| {
- self.0
- .get(sid)?
- .ok_or_else(|| CE::from_kind(CEK::StoreReadError))?
- .get_header()
- .read_string(query)
- .chain_err(|| CEK::HeaderReadError)?
- .map(Category::from)
- .ok_or_else(|| CE::from_kind(CEK::StoreReadError))
- })
+ while let Some(sid) = self.1.next() {
+ if sid.is_in_collection(&["category"]) {
+ let func = |store: &Store| { // hack for returning Some(Result<_, _>)
+ store
+ .get(sid)?
+ .ok_or_else(|| CE::from_kind(CEK::StoreReadError))?
+ .get_header()
+ .read_string(query)
+ .chain_err(|| CEK::HeaderReadError)?
+ .map(Category::from)
+ .ok_or_else(|| CE::from_kind(CEK::StoreReadError))
+ };
+
+ return Some(func(&self.0))
+ } // else continue
+ }
+
+ None
}
}