@@ -12,7 +12,7 @@ use crate::vec::{self, Vec};
1212use :: core:: cmp:: Ordering ;
1313use :: core:: fmt;
1414use :: core:: hash:: { BuildHasher , Hash , Hasher } ;
15- use :: core:: iter:: FromIterator ;
15+ use :: core:: iter:: { FromIterator , FusedIterator } ;
1616use :: core:: ops:: { Index , IndexMut , RangeBounds } ;
1717use :: core:: slice:: { Iter as SliceIter , IterMut as SliceIterMut } ;
1818
@@ -822,6 +822,8 @@ impl<K, V> ExactSizeIterator for Keys<'_, K, V> {
822822 }
823823}
824824
825+ impl < K , V > FusedIterator for Keys < ' _ , K , V > { }
826+
825827// FIXME(#26925) Remove in favor of `#[derive(Clone)]`
826828impl < K , V > Clone for Keys < ' _ , K , V > {
827829 fn clone ( & self ) -> Self {
@@ -864,6 +866,8 @@ impl<K, V> ExactSizeIterator for IntoKeys<K, V> {
864866 }
865867}
866868
869+ impl < K , V > FusedIterator for IntoKeys < K , V > { }
870+
867871impl < K : fmt:: Debug , V > fmt:: Debug for IntoKeys < K , V > {
868872 fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
869873 let iter = self . iter . as_slice ( ) . iter ( ) . map ( Bucket :: key_ref) ;
@@ -898,6 +902,8 @@ impl<K, V> ExactSizeIterator for Values<'_, K, V> {
898902 }
899903}
900904
905+ impl < K , V > FusedIterator for Values < ' _ , K , V > { }
906+
901907// FIXME(#26925) Remove in favor of `#[derive(Clone)]`
902908impl < K , V > Clone for Values < ' _ , K , V > {
903909 fn clone ( & self ) -> Self {
@@ -940,6 +946,8 @@ impl<K, V> ExactSizeIterator for ValuesMut<'_, K, V> {
940946 }
941947}
942948
949+ impl < K , V > FusedIterator for ValuesMut < ' _ , K , V > { }
950+
943951/// An owning iterator over the values of a `IndexMap`.
944952///
945953/// This `struct` is created by the [`into_values`] method on [`IndexMap`].
@@ -967,6 +975,8 @@ impl<K, V> ExactSizeIterator for IntoValues<K, V> {
967975 }
968976}
969977
978+ impl < K , V > FusedIterator for IntoValues < K , V > { }
979+
970980impl < K , V : fmt:: Debug > fmt:: Debug for IntoValues < K , V > {
971981 fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
972982 let iter = self . iter . as_slice ( ) . iter ( ) . map ( Bucket :: value_ref) ;
@@ -1001,6 +1011,8 @@ impl<K, V> ExactSizeIterator for Iter<'_, K, V> {
10011011 }
10021012}
10031013
1014+ impl < K , V > FusedIterator for Iter < ' _ , K , V > { }
1015+
10041016// FIXME(#26925) Remove in favor of `#[derive(Clone)]`
10051017impl < K , V > Clone for Iter < ' _ , K , V > {
10061018 fn clone ( & self ) -> Self {
@@ -1043,6 +1055,8 @@ impl<K, V> ExactSizeIterator for IterMut<'_, K, V> {
10431055 }
10441056}
10451057
1058+ impl < K , V > FusedIterator for IterMut < ' _ , K , V > { }
1059+
10461060/// An owning iterator over the entries of a `IndexMap`.
10471061///
10481062/// This `struct` is created by the [`into_iter`] method on [`IndexMap`]
@@ -1070,6 +1084,8 @@ impl<K, V> ExactSizeIterator for IntoIter<K, V> {
10701084 }
10711085}
10721086
1087+ impl < K , V > FusedIterator for IntoIter < K , V > { }
1088+
10731089impl < K : fmt:: Debug , V : fmt:: Debug > fmt:: Debug for IntoIter < K , V > {
10741090 fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
10751091 let iter = self . iter . as_slice ( ) . iter ( ) . map ( Bucket :: refs) ;
@@ -1104,6 +1120,8 @@ impl<K, V> ExactSizeIterator for Drain<'_, K, V> {
11041120 }
11051121}
11061122
1123+ impl < K , V > FusedIterator for Drain < ' _ , K , V > { }
1124+
11071125impl < ' a , K , V , S > IntoIterator for & ' a IndexMap < K , V , S > {
11081126 type Item = ( & ' a K , & ' a V ) ;
11091127 type IntoIter = Iter < ' a , K , V > ;
0 commit comments