Ensures that each sequence pair satisfy provided predicate.
(mut validate: F)
| 16 | |
| 17 | /// Ensures that each sequence pair satisfy provided predicate. |
| 18 | pub fn seq_pairs_satisfy<I, F>(mut validate: F) -> impl FnMut(&I) -> Option<InvalidPair<I>> |
| 19 | where |
| 20 | I: Clone, |
| 21 | F: FnMut(&I, &I) -> bool, |
| 22 | { |
| 23 | let mut last = None; |
| 24 | |
| 25 | move |item: &I| -> Option<InvalidPair<I>> { |
| 26 | if let Some((prev, _)) = last |
| 27 | .replace(item.clone()) |
| 28 | .zip(last.as_ref()) |
| 29 | .filter(|(prev, cur)| !validate(prev, cur)) |
| 30 | { |
| 31 | Some(InvalidPair(prev, item.clone())) |
| 32 | } else { |
| 33 | None |
| 34 | } |
| 35 | } |
| 36 | } |
| 37 | |
| 38 | /// Produces a function which will check for each item to be equal previous plus `n` starting from the supplied value. |
| 39 | pub fn seq_inc_by_n_from<N>( |