Skip to main content

wirespec_syntax/
span.rs

1/// A byte-offset span in source text.
2#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
3pub struct Span {
4    /// Byte offset of the start.
5    pub offset: u32,
6    /// Byte length.
7    pub len: u32,
8}
9
10impl Span {
11    pub fn new(offset: u32, len: u32) -> Self {
12        Self { offset, len }
13    }
14
15    pub fn end(&self) -> u32 {
16        self.offset + self.len
17    }
18
19    /// Merge two spans into one covering both.
20    pub fn merge(self, other: Span) -> Span {
21        let start = self.offset.min(other.offset);
22        let end = self.end().max(other.end());
23        Span {
24            offset: start,
25            len: end - start,
26        }
27    }
28}