processes 0.4.0

A utility library for accessing processes and modules on windows.
Documentation
use std::ops::{Bound, Range, RangeBounds};

pub(crate) fn range_from_bounds(
    offset: usize,
    len: usize,
    range: &impl RangeBounds<usize>,
) -> Range<usize> {
    let rel_start = match range.start_bound() {
        Bound::Unbounded => 0,
        Bound::Included(start) => *start,
        Bound::Excluded(start) => start.saturating_add(1),
    };
    let rel_end = match range.end_bound() {
        Bound::Unbounded => len,
        Bound::Included(end) => *end,
        Bound::Excluded(end) => end.saturating_sub(1),
    };

    assert!(rel_start <= len, "range start out of bounds");
    assert!(rel_end <= len, "range end out of bounds");
    assert!(rel_end >= rel_start, "range end before start");

    let start = offset + rel_start;
    let end = offset + rel_end;
    Range { start, end }
}