Rust split any iterator into fixed-size Vec batches

Rust
use std::num::NonZeroUsize;

fn chunk_iter<I, T>(iter: I, size: NonZeroUsize) -> Vec<Vec<T>>
where
    I: IntoIterator<Item = T>,
{
    let size = size.get();
    let mut out = Vec::new();
    let mut batch = Vec::with_capacity(size);
    for item in iter {
        batch.push(item);
        if batch.len() == size {
            out.push(std::mem::take(&mut batch));
        }
    }
    if !batch.is_empty() {
        out.push(batch);
    }
    out
}