pub struct ArrayFromIter<T, const N: usize>(pub Option<[T; N]>);
Expand description
A wrapper type to collect an Iterator
into an array
let iter = vec![1, 2, 3].into_iter();
let ArrayFromIter(array) = iter.collect();
assert_eq!(array, Some([1, 2, 3]));
Since iterators don’t carry compile-time information about their length (even
core::iter::ExactSizeIterator
only provides this at runtime), collecting may fail if the
iterator doesn’t yield exactly N
elements:
use unarray::*;
let too_many = vec![1, 2, 3, 4].into_iter();
let ArrayFromIter::<i32, 3>(option) = too_many.collect();
assert!(option.is_none());
let too_few = vec![1, 2].into_iter();
let ArrayFromIter::<i32, 3>(option) = too_few.collect();
assert!(option.is_none());
Tuple Fields§
§0: Option<[T; N]>
Trait Implementations§
Source§impl<T, const N: usize> FromIterator<T> for ArrayFromIter<T, N>
impl<T, const N: usize> FromIterator<T> for ArrayFromIter<T, N>
Source§fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self
fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self
Creates a value from an iterator. Read more
Auto Trait Implementations§
impl<T, const N: usize> Freeze for ArrayFromIter<T, N>where
T: Freeze,
impl<T, const N: usize> RefUnwindSafe for ArrayFromIter<T, N>where
T: RefUnwindSafe,
impl<T, const N: usize> Send for ArrayFromIter<T, N>where
T: Send,
impl<T, const N: usize> Sync for ArrayFromIter<T, N>where
T: Sync,
impl<T, const N: usize> Unpin for ArrayFromIter<T, N>where
T: Unpin,
impl<T, const N: usize> UnwindSafe for ArrayFromIter<T, N>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Layout§
Note: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.