rangecutter 0.1.0

Utilities for working with adjacent ranges
Documentation
use super::RangeContainsExt;
use std::ops::Range;

pub trait RangeCut<Cut> {
    fn cut(&self, middle: &Cut) -> (Self, Self)
    where
        Self: Sized;
}

impl<T> RangeCut<Range<T>> for Range<T>
where
    T: PartialOrd + Clone,
{
    fn cut(&self, middle: &Self) -> (Self, Self) {
        assert!(self.contains_or_ends_at(&middle.start));
        assert!(self.contains_or_ends_at(&middle.end));
        assert!(middle.start <= middle.end);

        assert!(self.start <= middle.start);

        (
            self.start.clone()..middle.start.clone(),
            middle.end.clone()..self.end.clone(),
        )
    }
}