1 use proc_macro2::extra::DelimSpan; 2 use proc_macro2::{Delimiter, Group, Span, TokenStream}; 3 4 #[doc(hidden)] 5 pub trait IntoSpans<S> { into_spans(self) -> S6 fn into_spans(self) -> S; 7 } 8 9 impl IntoSpans<Span> for Span { into_spans(self) -> Span10 fn into_spans(self) -> Span { 11 self 12 } 13 } 14 15 impl IntoSpans<[Span; 1]> for Span { into_spans(self) -> [Span; 1]16 fn into_spans(self) -> [Span; 1] { 17 [self] 18 } 19 } 20 21 impl IntoSpans<[Span; 2]> for Span { into_spans(self) -> [Span; 2]22 fn into_spans(self) -> [Span; 2] { 23 [self, self] 24 } 25 } 26 27 impl IntoSpans<[Span; 3]> for Span { into_spans(self) -> [Span; 3]28 fn into_spans(self) -> [Span; 3] { 29 [self, self, self] 30 } 31 } 32 33 impl IntoSpans<[Span; 1]> for [Span; 1] { into_spans(self) -> [Span; 1]34 fn into_spans(self) -> [Span; 1] { 35 self 36 } 37 } 38 39 impl IntoSpans<[Span; 2]> for [Span; 2] { into_spans(self) -> [Span; 2]40 fn into_spans(self) -> [Span; 2] { 41 self 42 } 43 } 44 45 impl IntoSpans<[Span; 3]> for [Span; 3] { into_spans(self) -> [Span; 3]46 fn into_spans(self) -> [Span; 3] { 47 self 48 } 49 } 50 51 impl IntoSpans<DelimSpan> for Span { into_spans(self) -> DelimSpan52 fn into_spans(self) -> DelimSpan { 53 let mut group = Group::new(Delimiter::None, TokenStream::new()); 54 group.set_span(self); 55 group.delim_span() 56 } 57 } 58 59 impl IntoSpans<DelimSpan> for DelimSpan { into_spans(self) -> DelimSpan60 fn into_spans(self) -> DelimSpan { 61 self 62 } 63 } 64