chj_rustbin/text/
startswith.rs

1//! Implement `starts_with` for iterators.
2
3pub trait StartsWith<I> {
4    fn starts_with(&mut self, start: &mut I) -> Option<usize>;
5}
6
7impl<T: Eq, I: Iterator<Item = T>> StartsWith<I> for I {
8    fn starts_with(&mut self, start: &mut I) -> Option<usize> {
9        let mut len: usize = 0;
10        loop {
11            if let Some(b) = start.next() {
12                if let Some(a) = self.next() {
13                    if a != b {
14                        return None;
15                    } else {
16                        len += 1;
17                    }
18                } else {
19                    return None;
20                }
21            } else {
22                return Some(len);
23            }
24        }
25    }
26}