1 pub trait IterUtilsExt: Iterator {
2     /// Return the first element that maps to `Some(_)`, or None if the iterator
3     /// was exhausted.
ex_find_map<F, R>(&mut self, mut f: F) -> Option<R> where F: FnMut(Self::Item) -> Option<R>,4     fn ex_find_map<F, R>(&mut self, mut f: F) -> Option<R>
5     where
6         F: FnMut(Self::Item) -> Option<R>,
7     {
8         for elt in self {
9             if let result @ Some(_) = f(elt) {
10                 return result;
11             }
12         }
13         None
14     }
15 
16     /// Return the last element from the back that maps to `Some(_)`, or
17     /// None if the iterator was exhausted.
ex_rfind_map<F, R>(&mut self, mut f: F) -> Option<R> where F: FnMut(Self::Item) -> Option<R>, Self: DoubleEndedIterator,18     fn ex_rfind_map<F, R>(&mut self, mut f: F) -> Option<R>
19     where
20         F: FnMut(Self::Item) -> Option<R>,
21         Self: DoubleEndedIterator,
22     {
23         while let Some(elt) = self.next_back() {
24             if let result @ Some(_) = f(elt) {
25                 return result;
26             }
27         }
28         None
29     }
30 }
31 
32 impl<I> IterUtilsExt for I where I: Iterator {}
33