use core::ops::{Bound, RangeBounds};
pub(crate) fn parse_range<R: RangeBounds<usize>>(range: R, size: usize) -> (usize, usize) {
let start = match range.start_bound() {
Bound::Included(&s) => s,
Bound::Excluded(&s) => s + 1,
Bound::Unbounded => 0,
};
let end = match range.end_bound() {
Bound::Included(&e) => e + 1,
Bound::Excluded(&e) => e,
Bound::Unbounded => size,
};
(start, end)
}
pub(crate) fn validate_range(left: usize, right: usize, size: usize) {
assert!(
left <= right && right <= size,
"Invalid range: got [{}, {}), size is {}",
left,
right,
size
);
}