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