Add extension trait for iterator over Result<Entry>
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
This commit is contained in:
parent
f1f7abddae
commit
0095dda996
1 changed files with 40 additions and 0 deletions
|
@ -61,6 +61,46 @@ mod reporting {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
pub trait ReportTouchedResultEntry<'a, I, D>
|
||||||
|
where I: Iterator<Item = Result<D>>,
|
||||||
|
D: Deref<Target = Entry>,
|
||||||
|
{
|
||||||
|
fn map_report_touched(self, rt: &'a Runtime) -> ReportTouchedResultEntryImpl<'a, I, D>;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, I, D> ReportTouchedResultEntry<'a, I, D> for I
|
||||||
|
where I: Iterator<Item = Result<D>>,
|
||||||
|
D: Deref<Target = Entry>,
|
||||||
|
{
|
||||||
|
fn map_report_touched(self, rt: &'a Runtime) -> ReportTouchedResultEntryImpl<'a, I, D> {
|
||||||
|
ReportTouchedResultEntryImpl(self, rt)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct ReportTouchedResultEntryImpl<'a, I, D>(I, &'a Runtime<'a>)
|
||||||
|
where I: Iterator<Item = Result<D>>,
|
||||||
|
D: Deref<Target = Entry>;
|
||||||
|
|
||||||
|
impl<'a, I, D> Iterator for ReportTouchedResultEntryImpl<'a, I, D>
|
||||||
|
where I: Iterator<Item = Result<D>>,
|
||||||
|
D: Deref<Target = Entry>,
|
||||||
|
{
|
||||||
|
type Item = Result<D>;
|
||||||
|
|
||||||
|
fn next(&mut self) -> Option<Self::Item> {
|
||||||
|
self.0.next()
|
||||||
|
.map(|r| {
|
||||||
|
r.and_then(|e| {
|
||||||
|
self.1
|
||||||
|
.report_touched(e.get_location())
|
||||||
|
.map_err(Error::from)
|
||||||
|
.map(|_| e)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
pub trait ReportTouchedStoreId<'a, I>
|
pub trait ReportTouchedStoreId<'a, I>
|
||||||
|
|
Loading…
Reference in a new issue