diff --git a/src/unique_impl.rs b/src/unique_impl.rs index 0f6397e48..57c197397 100644 --- a/src/unique_impl.rs +++ b/src/unique_impl.rs @@ -65,6 +65,26 @@ where iter.find(|v| used.insert(f(v), ()).is_none()) } + fn fold(self, init: B, mut f: G) -> B + where + Self: Sized, + G: FnMut(B, Self::Item) -> B, + { + let Self { + iter, + mut used, + f: mut key, + } = self; + + iter.fold(init, |mut acc, v| { + if used.insert(key(&v), ()).is_none() { + acc = f(acc, v); + }; + + acc + }) + } + #[inline] fn size_hint(&self) -> (usize, Option) { let (low, hi) = self.iter.size_hint();