1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use std::ops::{Bound, Range, RangeBounds};

pub fn bounds_to_range<R: RangeBounds<u64>>(
    r: R,
    fallback_min: u64,
    fallback_max: u64,
) -> Range<u64> {
    let start = match r.start_bound() {
        Bound::Included(i) => *i,
        Bound::Excluded(i) => *i + 1,
        Bound::Unbounded => fallback_min,
    };

    let end = match r.end_bound() {
        Bound::Included(i) => (*i + 1),
        Bound::Excluded(i) => *i,
        Bound::Unbounded => fallback_max,
    };

    Range { start, end }
}