Skip to main content

asparit/misc/
mod.rs

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}