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 54 55 56 57 58 59 60 61 62 63 64 65 66 67
use proc_macro2::Span; pub trait IntoSpans<S> { fn into_spans(self) -> S; } impl IntoSpans<[Span; 1]> for Span { fn into_spans(self) -> [Span; 1] { [self] } } impl IntoSpans<[Span; 2]> for Span { fn into_spans(self) -> [Span; 2] { [self, self] } } impl IntoSpans<[Span; 3]> for Span { fn into_spans(self) -> [Span; 3] { [self, self, self] } } impl IntoSpans<[Span; 1]> for [Span; 1] { fn into_spans(self) -> [Span; 1] { self } } impl IntoSpans<[Span; 2]> for [Span; 2] { fn into_spans(self) -> [Span; 2] { self } } impl IntoSpans<[Span; 3]> for [Span; 3] { fn into_spans(self) -> [Span; 3] { self } } #[cfg(feature = "parsing")] pub trait FromSpans: Sized { fn from_spans(spans: &[Span]) -> Self; } #[cfg(feature = "parsing")] impl FromSpans for [Span; 1] { fn from_spans(spans: &[Span]) -> Self { [spans[0]] } } #[cfg(feature = "parsing")] impl FromSpans for [Span; 2] { fn from_spans(spans: &[Span]) -> Self { [spans[0], spans[1]] } } #[cfg(feature = "parsing")] impl FromSpans for [Span; 3] { fn from_spans(spans: &[Span]) -> Self { [spans[0], spans[1], spans[2]] } }