Skip to content

Commit fc5aab4

Browse files
committed
Implement FlattenOk::rfold
1 parent bb31180 commit fc5aab4

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

src/flatten_ok.rs

+23
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,29 @@ where
153153
}
154154
}
155155
}
156+
157+
fn rfold<B, F>(self, init: B, mut f: F) -> B
158+
where
159+
Self: Sized,
160+
F: FnMut(B, Self::Item) -> B,
161+
{
162+
// Back
163+
let mut acc = match self.inner_back {
164+
Some(x) => x.rfold(init, |a, o| f(a, Ok(o))),
165+
None => init,
166+
};
167+
168+
acc = self.iter.rfold(acc, |acc, x| match x {
169+
Ok(it) => it.into_iter().rfold(acc, |a, o| f(a, Ok(o))),
170+
Err(e) => f(acc, Err(e)),
171+
});
172+
173+
// Front
174+
match self.inner_front {
175+
Some(x) => x.rfold(acc, |a, o| f(a, Ok(o))),
176+
None => acc,
177+
}
178+
}
156179
}
157180

158181
impl<I, T, E> Clone for FlattenOk<I, T, E>

0 commit comments

Comments
 (0)