Decodal/crates/decodal-core/src/span.rs

32 lines
747 B
Rust

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub struct SourceId(pub u32);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct Span {
pub source: SourceId,
pub start: u32,
pub end: u32,
}
impl Span {
pub const fn new(source: SourceId, start: usize, end: usize) -> Self {
Self {
source,
start: start as u32,
end: end as u32,
}
}
pub const fn empty(source: SourceId, offset: usize) -> Self {
Self::new(source, offset, offset)
}
pub fn join(self, other: Self) -> Self {
Self {
source: self.source,
start: self.start.min(other.start),
end: self.end.max(other.end),
}
}
}