1mod try_;
2
3pub use try_::Try;
4
5use std::ops::{Bound, Range, RangeBounds};
6
7pub fn simplify_range(range: impl RangeBounds<usize>, len: usize) -> Range<usize> {
8 let start = match range.start_bound() {
9 Bound::Unbounded => 0,
10 Bound::Included(&i) if i <= len => i,
11 Bound::Excluded(&i) if i < len => i + 1,
12 bound => panic!("range start {:?} should be <= length {}", bound, len),
13 };
14
15 let end = match range.end_bound() {
16 Bound::Unbounded => len,
17 Bound::Excluded(&i) if i <= len => i,
18 Bound::Included(&i) if i < len => i + 1,
19 bound => panic!("range end {:?} should be <= length {}", bound, len),
20 };
21
22 if start > end {
23 panic!(
24 "range start {:?} should be <= range end {:?}",
25 range.start_bound(),
26 range.end_bound()
27 );
28 }
29
30 start..end
31}