diff --git a/src/adaptors/mod.rs b/src/adaptors/mod.rs index dfc68978f..1d067dcc7 100644 --- a/src/adaptors/mod.rs +++ b/src/adaptors/mod.rs @@ -15,7 +15,7 @@ pub use self::map::MapResults; pub use self::multi_product::*; use std::fmt; -use std::iter::{Fuse, Peekable, FromIterator}; +use std::iter::{Fuse, Peekable, FromIterator, FusedIterator}; use std::marker::PhantomData; use crate::size_hint; @@ -75,6 +75,11 @@ impl Iterator for Interleave } } +impl FusedIterator for Interleave + where I: Iterator, + J: Iterator +{} + /// An iterator adaptor that alternates elements from the two iterators until /// one of them runs out. /// diff --git a/src/intersperse.rs b/src/intersperse.rs index 687726f9d..2c660d492 100644 --- a/src/intersperse.rs +++ b/src/intersperse.rs @@ -1,4 +1,4 @@ -use std::iter::Fuse; +use std::iter::{Fuse, FusedIterator}; use super::size_hint; pub trait IntersperseElement { @@ -112,3 +112,8 @@ impl Iterator for IntersperseWith }) } } + +impl FusedIterator for IntersperseWith + where I: Iterator, + ElemF: IntersperseElement +{} diff --git a/src/zip_longest.rs b/src/zip_longest.rs index 553fe3b08..cb9a7bacb 100644 --- a/src/zip_longest.rs +++ b/src/zip_longest.rs @@ -1,6 +1,6 @@ use std::cmp::Ordering::{Equal, Greater, Less}; use super::size_hint; -use std::iter::Fuse; +use std::iter::{Fuse, FusedIterator}; use crate::either_or_both::EitherOrBoth; @@ -76,3 +76,8 @@ impl ExactSizeIterator for ZipLongest where T: ExactSizeIterator, U: ExactSizeIterator {} + +impl FusedIterator for ZipLongest + where T: Iterator, + U: Iterator +{}