in gazebo/src/ext/iter.rs [304:334]
fn try_cmp_by<O, F, E>(mut self, other: O, mut cmp: F) -> Result<Ordering, E>
where
Self: Sized,
O: IntoIterator,
F: FnMut(Self::Item, O::Item) -> Result<Ordering, E>,
{
let mut other = other.into_iter();
loop {
let x = match self.next() {
None => {
if other.next().is_none() {
return Ok(Ordering::Equal);
} else {
return Ok(Ordering::Less);
}
}
Some(val) => val,
};
let y = match other.next() {
None => return Ok(Ordering::Greater),
Some(val) => val,
};
match cmp(x, y)? {
Ordering::Equal => {}
non_eq => return Ok(non_eq),
}
}
}