#![doc = include_str!("../README.md")]
use std::num::NonZeroUsize;
pub trait CountToNonZeroExt: Iterator {
fn count_to_non_zero(self) -> Option<NonZeroUsize>;
}
impl<T> CountToNonZeroExt for T
where
T: Iterator,
{
fn count_to_non_zero(self) -> Option<NonZeroUsize> {
let count = self.count();
NonZeroUsize::new(count)
}
}
#[cfg(test)]
mod tests {
use std::num::NonZeroUsize;
use super::*;
#[test]
fn empty_iterator() {
let data: Vec<u32> = vec![];
let count = data.into_iter().count_to_non_zero();
assert_eq!(count, None);
}
#[test]
fn all_non_zeros_iterator() {
let data = vec![1, 2, 3];
let count = data.into_iter().count_to_non_zero();
assert_eq!(count, Some(NonZeroUsize::new(3).unwrap()));
}
}