Provide StoreId Iterator which has a ref to the Store
This change is needed so we can refactor the "get" iterator to not take an argument (the store) later, which improves the API.
This commit is contained in:
parent
da4b823048
commit
030e32e44f
3 changed files with 32 additions and 5 deletions
|
@ -45,7 +45,6 @@ use libimagrt::setup::generate_runtime_setup;
|
||||||
use libimagerror::trace::MapErrTrace;
|
use libimagerror::trace::MapErrTrace;
|
||||||
use libimagstore::store::FileLockEntry;
|
use libimagstore::store::FileLockEntry;
|
||||||
use libimagstore::storeid::StoreId;
|
use libimagstore::storeid::StoreId;
|
||||||
use libimagstore::iter::get::StoreIdGetIteratorExtension;
|
|
||||||
use libimagstore::error::StoreError as Error;
|
use libimagstore::error::StoreError as Error;
|
||||||
use libimagentrylink::internal::*;
|
use libimagentrylink::internal::*;
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ use toml_query::read::TomlValueReadTypeExt;
|
||||||
|
|
||||||
use error::{StoreError as SE, StoreErrorKind as SEK};
|
use error::{StoreError as SE, StoreErrorKind as SEK};
|
||||||
use error::ResultExt;
|
use error::ResultExt;
|
||||||
use storeid::{IntoStoreId, StoreId, StoreIdIterator};
|
use storeid::{IntoStoreId, StoreId, StoreIdIterator, StoreIdIteratorWithStore};
|
||||||
use file_abstraction::FileAbstractionInstance;
|
use file_abstraction::FileAbstractionInstance;
|
||||||
|
|
||||||
// We re-export the following things so tests can use them
|
// We re-export the following things so tests can use them
|
||||||
|
@ -721,7 +721,7 @@ impl Store {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get _all_ entries in the store (by id as iterator)
|
/// Get _all_ entries in the store (by id as iterator)
|
||||||
pub fn entries(&self) -> Result<StoreIdIterator> {
|
pub fn entries<'a>(&'a self) -> Result<StoreIdIteratorWithStore<'a>> {
|
||||||
self.backend
|
self.backend
|
||||||
.pathes_recursively(self.path().clone())
|
.pathes_recursively(self.path().clone())
|
||||||
.and_then(|iter| {
|
.and_then(|iter| {
|
||||||
|
@ -738,9 +738,8 @@ impl Store {
|
||||||
elems.push(sid);
|
elems.push(sid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(StoreIdIterator::new(Box::new(elems.into_iter())))
|
Ok(StoreIdIteratorWithStore::new(Box::new(elems.into_iter()), self))
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Gets the path where this store is on the disk
|
/// Gets the path where this store is on the disk
|
||||||
|
|
|
@ -30,6 +30,7 @@ use error::StoreErrorKind as SEK;
|
||||||
use error::StoreError as SE;
|
use error::StoreError as SE;
|
||||||
use error::ResultExt;
|
use error::ResultExt;
|
||||||
use store::Result;
|
use store::Result;
|
||||||
|
use store::Store;
|
||||||
|
|
||||||
/// The Index into the Store
|
/// The Index into the Store
|
||||||
#[derive(Debug, Clone, Hash, Eq, PartialOrd, Ord)]
|
#[derive(Debug, Clone, Hash, Eq, PartialOrd, Ord)]
|
||||||
|
@ -260,6 +261,34 @@ impl Iterator for StoreIdIterator {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub struct StoreIdIteratorWithStore<'a>(StoreIdIterator, &'a Store);
|
||||||
|
|
||||||
|
impl<'a> Deref for StoreIdIteratorWithStore<'a> {
|
||||||
|
type Target = StoreIdIterator;
|
||||||
|
|
||||||
|
fn deref(&self) -> &Self::Target {
|
||||||
|
&self.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> Iterator for StoreIdIteratorWithStore<'a> {
|
||||||
|
type Item = StoreId;
|
||||||
|
|
||||||
|
fn next(&mut self) -> Option<StoreId> {
|
||||||
|
self.0.next()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> StoreIdIteratorWithStore<'a> {
|
||||||
|
pub fn new(iter: Box<Iterator<Item = StoreId>>, store: &'a Store) -> Self {
|
||||||
|
StoreIdIteratorWithStore(StoreIdIterator::new(iter), store)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_store(&self) -> &Store {
|
||||||
|
&self.1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
Loading…
Reference in a new issue