forked from argotorg/fe
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathspan.rs
More file actions
53 lines (46 loc) · 1.15 KB
/
Copy pathspan.rs
File metadata and controls
53 lines (46 loc) · 1.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
use serde::{
Deserialize,
Serialize,
};
/// An exclusive span of byte offsets in a source file.
#[derive(Serialize, Deserialize, Debug, PartialEq, Copy, Clone, Hash, Eq)]
pub struct Span {
/// A byte offset specifying the inclusive start of a span.
pub start: usize,
/// A byte offset specifying the exclusive end of a span.
pub end: usize,
}
impl Span {
#[inline]
pub fn new(start: usize, end: usize) -> Self {
Span { start, end }
}
#[inline]
pub fn from_pair<S, E>(start_elem: S, end_elem: E) -> Self
where
S: Into<Span>,
E: Into<Span>,
{
let start_span: Span = start_elem.into();
let end_span: Span = end_elem.into();
Self {
start: start_span.start,
end: end_span.end,
}
}
}
#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
pub struct Spanned<T> {
pub node: T,
pub span: Span,
}
impl<T> From<&Spanned<T>> for Span {
fn from(spanned: &Spanned<T>) -> Self {
spanned.span
}
}
impl<T> From<&Box<Spanned<T>>> for Span {
fn from(spanned: &Box<Spanned<T>>) -> Self {
spanned.span
}
}