1use std::ops::Bound;
2
3/// Converts a range bound to its indexes.
4pub(super) fn bounds_to_usize(
5 left: Bound<&usize>,
6 right: Bound<&usize>,
7 count_elements: usize,
8) -> (usize, usize) {
9 match (left, right) {
10 (Bound::Included(x: &usize), Bound::Included(y: &usize)) => (*x, y + 1),
11 (Bound::Included(x: &usize), Bound::Excluded(y: &usize)) => (*x, *y),
12 (Bound::Included(x: &usize), Bound::Unbounded) => (*x, count_elements),
13 (Bound::Unbounded, Bound::Unbounded) => (0, count_elements),
14 (Bound::Unbounded, Bound::Included(y: &usize)) => (0, y + 1),
15 (Bound::Unbounded, Bound::Excluded(y: &usize)) => (0, *y),
16 (Bound::Excluded(_), Bound::Unbounded)
17 | (Bound::Excluded(_), Bound::Included(_))
18 | (Bound::Excluded(_), Bound::Excluded(_)) => {
19 unreachable!("A start bound can't be excluded")
20 }
21 }
22}
23