@@ -497,8 +497,7 @@ impl BooleanArray {
497497 /// # Safety
498498 ///
499499 /// The iterator must be [`TrustedLen`](https://doc.rust-lang.org/std/iter/trait.TrustedLen.html).
500- /// I.e. that `size_hint().1` correctly reports its length. Note that this is a stronger
501- /// guarantee that `ExactSizeIterator` provides which could still report a wrong length.
500+ /// I.e. that `size_hint().1` correctly reports its length.
502501 ///
503502 /// # Panics
504503 ///
@@ -511,9 +510,11 @@ impl BooleanArray {
511510 pub unsafe fn from_trusted_len_iter < I , P > ( iter : I ) -> Self
512511 where
513512 P : Into < BooleanAdapter > ,
514- I : ExactSizeIterator < Item = P > ,
513+ I : IntoIterator < Item = P > ,
515514 {
516- let data_len = iter. len ( ) ;
515+ let iter = iter. into_iter ( ) ;
516+ let ( _, data_len) = iter. size_hint ( ) ;
517+ let data_len = data_len. expect ( "Iterator must be sized" ) ;
517518
518519 let num_bytes = bit_util:: ceil ( data_len, 8 ) ;
519520 let mut null_builder = MutableBuffer :: from_len_zeroed ( num_bytes) ;
@@ -715,7 +716,7 @@ mod tests {
715716 let expected = v. clone ( ) . into_iter ( ) . collect :: < BooleanArray > ( ) ;
716717 let actual = unsafe {
717718 // SAFETY: `v` has trusted length
718- BooleanArray :: from_trusted_len_iter ( v. into_iter ( ) )
719+ BooleanArray :: from_trusted_len_iter ( v)
719720 } ;
720721 assert_eq ! ( expected, actual) ;
721722 }
0 commit comments