Skip to main content

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}