#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Default)]
pub struct Span {
pub start: usize,
pub end: usize,
}
impl Span {
pub fn new(start: usize, end: usize) -> Self {
Self { start, end }
}
pub fn range(&self) -> std::ops::Range<usize> {
self.start..self.end
}
pub fn merge(self, other: Span) -> Span {
Span {
start: self.start.min(other.start),
end: self.end.max(other.end),
}
}
}
impl From<std::ops::Range<usize>> for Span {
fn from(r: std::ops::Range<usize>) -> Self {
Span {
start: r.start,
end: r.end,
}
}
}