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}