use std::ops::Bound; /// Converts a range bound to its indexes. pub(super) fn bounds_to_usize( left: Bound<&usize>, right: Bound<&usize>, count_elements: usize, ) -> (usize, usize) { match (left, right) { (Bound::Included(x), Bound::Included(y)) => (*x, y + 1), (Bound::Included(x), Bound::Excluded(y)) => (*x, *y), (Bound::Included(x), Bound::Unbounded) => (*x, count_elements), (Bound::Unbounded, Bound::Unbounded) => (0, count_elements), (Bound::Unbounded, Bound::Included(y)) => (0, y + 1), (Bound::Unbounded, Bound::Excluded(y)) => (0, *y), (Bound::Excluded(_), Bound::Unbounded) | (Bound::Excluded(_), Bound::Included(_)) | (Bound::Excluded(_), Bound::Excluded(_)) => { unreachable!("A start bound can't be excluded") } } }