From 31e3116b48ab9e8885713840fc1b7cdb10788d9b Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sat, 13 Apr 2019 23:44:02 +0200 Subject: [PATCH] Revert "Remove GetIter" This reverts commit a49522dc86770a741d61d548351ad69dfc56d1fa. --- lib/entry/libimagentrylink/src/internal.rs | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/lib/entry/libimagentrylink/src/internal.rs b/lib/entry/libimagentrylink/src/internal.rs index 3f2df918..be979e00 100644 --- a/lib/entry/libimagentrylink/src/internal.rs +++ b/lib/entry/libimagentrylink/src/internal.rs @@ -200,6 +200,10 @@ pub mod iter { LinkIter(v.into_iter()) } + pub fn into_getter(self, store: &Store) -> GetIter { + GetIter(self.0, store) + } + } impl Iterator for LinkIter { @@ -225,6 +229,32 @@ pub mod iter { } } + /// An Iterator that `Store::get()`s the Entries from the store while consumed + pub struct GetIter<'a>(IntoIter, &'a Store); + + impl<'a> GetIter<'a> { + pub fn new(i: IntoIter, store: &'a Store) -> GetIter<'a> { + GetIter(i, store) + } + + pub fn store(&self) -> &Store { + self.1 + } + } + + impl<'a> Iterator for GetIter<'a> { + type Item = Result>; + + fn next(&mut self) -> Option { + self.0.next().and_then(|id| match self.1.get(id) { + Ok(None) => None, + Ok(Some(x)) => Some(Ok(x)), + Err(e) => Some(Err(e).map_err(From::from)), + }) + } + + } + } impl InternalLinker for Entry {