// codesnip-guard: IteratorExt #[cfg_attr(any(),rustfmt::skip)]pub use self::iterator_ext::IteratorExt;#[cfg_attr(any(),rustfmt::skip)]mod iterator_ext{use std::iter::Peekable;pub trait IteratorExt:Iterator{fn merge_by(self,other:I,is_first:F)->MergeBywhere Self:Sized,I:Iterator,F:FnMut(&Self::Item,&Self::Item)->bool{MergeBy{left:self.peekable(),right:other.peekable(),is_first}}}implIteratorExt for I where I:Iterator{}pub struct MergeBywhere I:Iterator,J:Iterator{left:Peekable,right:Peekable,is_first:F}implIterator for MergeBywhere I:Iterator,J:Iterator,F:FnMut(&I::Item,&I::Item)->bool{type Item=I::Item;fn next(&mut self)->Option{match(self.left.peek(),self.right.peek()){(Some(l),Some(r))=>{if(self.is_first)(l,r){self.left.next()}else{self.right.next()}}(Some(_),None)=>self.left.next(),(None,Some(_))=>self.right.next(),(None,None)=>None,}}}}