1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
use std::ops::Range; #[derive(Clone, Hash, Eq, PartialEq)] pub struct NonemptyRange { pub start: usize, pub size_minus_one: usize, } impl IntoIterator for NonemptyRange { type Item = usize; type IntoIter = Range<usize>; fn into_iter(self) -> Self::IntoIter { self.start..self.size_minus_one + self.start + 1 } } #[test] fn test_nonempty_range_into_iterator() { assert!( NonemptyRange { start: 5, size_minus_one: 2 } .into_iter() .eq([5, 6, 7].into_iter().cloned()) ) }