#[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug)]
pub struct Span {
offset: u32,
len: u32,
}
impl Span {
pub const fn new(offset: u32, len: u32) -> Self {
debug_assert!(offset.checked_add(len).is_some());
Self { offset, len }
}
}
impl Span {
pub const fn offset(self) -> u32 {
self.offset
}
pub const fn len(self) -> u32 {
self.len
}
pub const fn is_empty(self) -> bool {
self.len == 0
}
}
impl Span {
pub fn text(self, source: &str) -> &str {
debug_assert!(source.len() <= u32::MAX as usize);
let start: usize = self.offset as usize;
let end: usize = start + self.len as usize;
&source[start..end]
}
}