1#[derive(Debug, Clone, Copy, Eq, Hash, Ord, PartialEq, PartialOrd)]
2pub struct Span {
3 start: usize,
4 end: usize,
5}
6
7impl Span {
8 #[inline(always)]
9 pub fn new(start: usize, end: usize) -> Self {
10 Self { start, end }
11 }
12
13 #[inline(always)]
14 pub fn from_self_to_other(self, other: Self) -> Self {
15 Self {
16 start: self.start,
17 end: other.end,
18 }
19 }
20}
21
22impl Default for Span {
23 #[inline(always)]
24 fn default() -> Self {
25 Self { start: 0, end: 0 }
26 }
27}
28
29#[derive(Default, Debug, Clone, Copy, Eq, Hash, Ord, PartialEq, PartialOrd)]
30pub struct Spanned<T> {
31 pub inner: T,
32 pub span: Span,
33}
34
35impl<T> Spanned<T> {
36 pub fn default_span(inner: T) -> Self {
37 Self {
38 inner,
39 span: Span::default(),
40 }
41 }
42
43 #[inline(always)]
44 pub fn new(inner: T, span: Span) -> Self {
45 Self { inner, span }
46 }
47}