blob: 27a7fe846d390758b4212dcce91287d4a3cc7b9b [file] [log] [blame]
David Tolnay2b687b02018-08-24 13:36:36 -04001use proc_macro2::Span;
2
David Tolnay2b687b02018-08-24 13:36:36 -04003pub trait IntoSpans<S> {
David Tolnay2b687b02018-08-24 13:36:36 -04004 fn into_spans(self) -> S;
5}
6
David Tolnay2b687b02018-08-24 13:36:36 -04007impl IntoSpans<[Span; 1]> for Span {
8 fn into_spans(self) -> [Span; 1] {
9 [self]
10 }
11}
12
13impl IntoSpans<[Span; 2]> for Span {
14 fn into_spans(self) -> [Span; 2] {
15 [self, self]
16 }
17}
18
19impl IntoSpans<[Span; 3]> for Span {
20 fn into_spans(self) -> [Span; 3] {
21 [self, self, self]
22 }
23}
24
David Tolnaye07e0f72018-08-27 08:25:45 -070025impl IntoSpans<[Span; 1]> for [Span; 1] {
26 fn into_spans(self) -> [Span; 1] {
David Tolnay2b687b02018-08-24 13:36:36 -040027 self
28 }
29}
30
David Tolnaye07e0f72018-08-27 08:25:45 -070031impl IntoSpans<[Span; 2]> for [Span; 2] {
32 fn into_spans(self) -> [Span; 2] {
David Tolnay2b687b02018-08-24 13:36:36 -040033 self
34 }
35}
36
David Tolnaye07e0f72018-08-27 08:25:45 -070037impl IntoSpans<[Span; 3]> for [Span; 3] {
38 fn into_spans(self) -> [Span; 3] {
David Tolnay2b687b02018-08-24 13:36:36 -040039 self
40 }
41}
42
David Tolnay776f8e02018-08-24 22:32:10 -040043#[cfg(feature = "parsing")]
David Tolnay2b687b02018-08-24 13:36:36 -040044pub trait FromSpans: Sized {
45 fn from_spans(spans: &[Span]) -> Self;
46}
47
David Tolnay776f8e02018-08-24 22:32:10 -040048#[cfg(feature = "parsing")]
David Tolnay2b687b02018-08-24 13:36:36 -040049impl FromSpans for [Span; 1] {
50 fn from_spans(spans: &[Span]) -> Self {
51 [spans[0]]
52 }
53}
54
David Tolnay776f8e02018-08-24 22:32:10 -040055#[cfg(feature = "parsing")]
David Tolnay2b687b02018-08-24 13:36:36 -040056impl FromSpans for [Span; 2] {
57 fn from_spans(spans: &[Span]) -> Self {
58 [spans[0], spans[1]]
59 }
60}
61
David Tolnay776f8e02018-08-24 22:32:10 -040062#[cfg(feature = "parsing")]
David Tolnay2b687b02018-08-24 13:36:36 -040063impl FromSpans for [Span; 3] {
64 fn from_spans(spans: &[Span]) -> Self {
65 [spans[0], spans[1], spans[2]]
66 }
67}