blob: e521f953063e3e6b3f1e4dbdc573015fab4c1af1 [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> {
4 // Not public API.
5 #[doc(hidden)]
6 fn into_spans(self) -> S;
7}
8
David Tolnay2b687b02018-08-24 13:36:36 -04009impl IntoSpans<[Span; 1]> for Span {
10 fn into_spans(self) -> [Span; 1] {
11 [self]
12 }
13}
14
15impl IntoSpans<[Span; 2]> for Span {
16 fn into_spans(self) -> [Span; 2] {
17 [self, self]
18 }
19}
20
21impl IntoSpans<[Span; 3]> for Span {
22 fn into_spans(self) -> [Span; 3] {
23 [self, self, self]
24 }
25}
26
David Tolnaye07e0f72018-08-27 08:25:45 -070027impl IntoSpans<[Span; 1]> for [Span; 1] {
28 fn into_spans(self) -> [Span; 1] {
David Tolnay2b687b02018-08-24 13:36:36 -040029 self
30 }
31}
32
David Tolnaye07e0f72018-08-27 08:25:45 -070033impl IntoSpans<[Span; 2]> for [Span; 2] {
34 fn into_spans(self) -> [Span; 2] {
David Tolnay2b687b02018-08-24 13:36:36 -040035 self
36 }
37}
38
David Tolnaye07e0f72018-08-27 08:25:45 -070039impl IntoSpans<[Span; 3]> for [Span; 3] {
40 fn into_spans(self) -> [Span; 3] {
David Tolnay2b687b02018-08-24 13:36:36 -040041 self
42 }
43}
44
David Tolnay776f8e02018-08-24 22:32:10 -040045#[cfg(feature = "parsing")]
David Tolnay2b687b02018-08-24 13:36:36 -040046pub trait FromSpans: Sized {
47 fn from_spans(spans: &[Span]) -> Self;
48}
49
David Tolnay776f8e02018-08-24 22:32:10 -040050#[cfg(feature = "parsing")]
David Tolnay2b687b02018-08-24 13:36:36 -040051impl FromSpans for [Span; 1] {
52 fn from_spans(spans: &[Span]) -> Self {
53 [spans[0]]
54 }
55}
56
David Tolnay776f8e02018-08-24 22:32:10 -040057#[cfg(feature = "parsing")]
David Tolnay2b687b02018-08-24 13:36:36 -040058impl FromSpans for [Span; 2] {
59 fn from_spans(spans: &[Span]) -> Self {
60 [spans[0], spans[1]]
61 }
62}
63
David Tolnay776f8e02018-08-24 22:32:10 -040064#[cfg(feature = "parsing")]
David Tolnay2b687b02018-08-24 13:36:36 -040065impl FromSpans for [Span; 3] {
66 fn from_spans(spans: &[Span]) -> Self {
67 [spans[0], spans[1], spans[2]]
68 }
69}