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