Add compile-time check for ExactSizeIterator
authorPhlosioneer <mattmdrr2@gmail.com>
Mon, 16 Apr 2018 20:59:22 +0000 (16:59 -0400)
committerPhlosioneer <mattmdrr2@gmail.com>
Mon, 16 Apr 2018 20:59:22 +0000 (16:59 -0400)
src/cargo/core/resolver/resolve.rs

index 48f1aebe40d607ce94d05a81ef9a0706febd850c..b0468bd692379120790fe41c6e73e5673819d7c2 100644 (file)
@@ -205,12 +205,10 @@ impl<'a> Iterator for Deps<'a> {
     }
 
     fn size_hint(&self) -> (usize, Option<usize>) {
-        match self.edges {
-            // Note: Edges is actually a std::collections::hash_set::Iter, which
-            // is an ExactSizeIterator.
-            Some(ref iter) => iter.size_hint(),
-            None => (0, Some(0)),
-        }
+        // Note: Edges is actually a std::collections::hash_set::Iter, which
+        // is an ExactSizeIterator.
+        let len = self.edges.as_ref().map(ExactSizeIterator::len).unwrap_or(0);
+        (len, Some(len))
     }
 }
 
@@ -228,12 +226,10 @@ impl<'a> Iterator for DepsNotReplaced<'a> {
     }
 
     fn size_hint(&self) -> (usize, Option<usize>) {
-        match self.edges {
-            // Note: Edges is actually a std::collections::hash_set::Iter, which
-            // is an ExactSizeIterator.
-            Some(ref iter) => iter.size_hint(),
-            None => (0, Some(0)),
-        }
+        // Note: Edges is actually a std::collections::hash_set::Iter, which
+        // is an ExactSizeIterator.
+        let len = self.edges.as_ref().map(ExactSizeIterator::len).unwrap_or(0);
+        (len, Some(len))
     }
 }