1 use proc_macro2::Span; 2 3 pub trait IntoSpans<S> { into_spans(self) -> S4 fn into_spans(self) -> S; 5 } 6 7 impl IntoSpans<[Span; 1]> for Span { into_spans(self) -> [Span; 1]8 fn into_spans(self) -> [Span; 1] { 9 [self] 10 } 11 } 12 13 impl IntoSpans<[Span; 2]> for Span { into_spans(self) -> [Span; 2]14 fn into_spans(self) -> [Span; 2] { 15 [self, self] 16 } 17 } 18 19 impl IntoSpans<[Span; 3]> for Span { into_spans(self) -> [Span; 3]20 fn into_spans(self) -> [Span; 3] { 21 [self, self, self] 22 } 23 } 24 25 impl IntoSpans<[Span; 1]> for [Span; 1] { into_spans(self) -> [Span; 1]26 fn into_spans(self) -> [Span; 1] { 27 self 28 } 29 } 30 31 impl IntoSpans<[Span; 2]> for [Span; 2] { into_spans(self) -> [Span; 2]32 fn into_spans(self) -> [Span; 2] { 33 self 34 } 35 } 36 37 impl IntoSpans<[Span; 3]> for [Span; 3] { into_spans(self) -> [Span; 3]38 fn into_spans(self) -> [Span; 3] { 39 self 40 } 41 } 42 43 #[cfg(feature = "parsing")] 44 pub trait FromSpans: Sized { from_spans(spans: &[Span]) -> Self45 fn from_spans(spans: &[Span]) -> Self; 46 } 47 48 #[cfg(feature = "parsing")] 49 impl FromSpans for [Span; 1] { from_spans(spans: &[Span]) -> Self50 fn from_spans(spans: &[Span]) -> Self { 51 [spans[0]] 52 } 53 } 54 55 #[cfg(feature = "parsing")] 56 impl FromSpans for [Span; 2] { from_spans(spans: &[Span]) -> Self57 fn from_spans(spans: &[Span]) -> Self { 58 [spans[0], spans[1]] 59 } 60 } 61 62 #[cfg(feature = "parsing")] 63 impl FromSpans for [Span; 3] { from_spans(spans: &[Span]) -> Self64 fn from_spans(spans: &[Span]) -> Self { 65 [spans[0], spans[1], spans[2]] 66 } 67 } 68