diff --git a/rlp/src/rlpin.rs b/rlp/src/rlpin.rs index 53b8731fc..395808fa8 100644 --- a/rlp/src/rlpin.rs +++ b/rlp/src/rlpin.rs @@ -367,7 +367,7 @@ impl<'a, 'view> Iterator for RlpIterator<'a, 'view> { impl<'a, 'view> ExactSizeIterator for RlpIterator<'a, 'view> { fn len(&self) -> usize { - self.rlp.item_count().unwrap_or(0) + self.rlp.item_count().unwrap_or(0).saturating_sub(self.index) } } diff --git a/rlp/tests/tests.rs b/rlp/tests/tests.rs index a5eface28..203397393 100644 --- a/rlp/tests/tests.rs +++ b/rlp/tests/tests.rs @@ -105,14 +105,20 @@ fn rlp_iter() { let rlp = Rlp::new(&data); let mut iter = rlp.iter(); + assert_eq!(iter.len(), 2); + let cat = iter.next().unwrap(); assert!(cat.is_data()); assert_eq!(cat.as_raw(), &[0x83, b'c', b'a', b't']); + assert_eq!(iter.len(), 1); + let dog = iter.next().unwrap(); assert!(dog.is_data()); assert_eq!(dog.as_raw(), &[0x83, b'd', b'o', b'g']); + assert_eq!(iter.len(), 0); + let none = iter.next(); assert!(none.is_none());