substrate_data/forms/text/span.rs
1//! [`Span`]: a byte range of the source.
2
3/// A byte range of the source.
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
5pub struct Span {
6 /// The first byte.
7 pub start: u32,
8 /// The byte after the last.
9 pub end: u32,
10}
11
12impl Span {
13 /// `start..end`; offsets past `u32` saturate.
14 #[must_use]
15 pub fn new(start: usize, end: usize) -> Span {
16 Span {
17 start: u32::try_from(start).unwrap_or(u32::MAX),
18 end: u32::try_from(end).unwrap_or(u32::MAX),
19 }
20 }
21
22 /// From this one's start to `other`'s end.
23 #[must_use]
24 pub fn to(self, other: Span) -> Span {
25 Span {
26 start: self.start,
27 end: other.end.max(self.end),
28 }
29 }
30}