xref: /linux/rust/syn/span.rs (revision 69942c0a8965f311ed7ddf842f160c9cfdcda73a)
1 // SPDX-License-Identifier: Apache-2.0 OR MIT
2 
3 use proc_macro2::extra::DelimSpan;
4 use proc_macro2::{Delimiter, Group, Span, TokenStream};
5 
6 #[doc(hidden)]
7 pub trait IntoSpans<S> {
8     fn into_spans(self) -> S;
9 }
10 
11 impl IntoSpans<Span> for Span {
12     fn into_spans(self) -> Span {
13         self
14     }
15 }
16 
17 impl IntoSpans<[Span; 1]> for Span {
18     fn into_spans(self) -> [Span; 1] {
19         [self]
20     }
21 }
22 
23 impl IntoSpans<[Span; 2]> for Span {
24     fn into_spans(self) -> [Span; 2] {
25         [self, self]
26     }
27 }
28 
29 impl IntoSpans<[Span; 3]> for Span {
30     fn into_spans(self) -> [Span; 3] {
31         [self, self, self]
32     }
33 }
34 
35 impl IntoSpans<[Span; 1]> for [Span; 1] {
36     fn into_spans(self) -> [Span; 1] {
37         self
38     }
39 }
40 
41 impl IntoSpans<[Span; 2]> for [Span; 2] {
42     fn into_spans(self) -> [Span; 2] {
43         self
44     }
45 }
46 
47 impl IntoSpans<[Span; 3]> for [Span; 3] {
48     fn into_spans(self) -> [Span; 3] {
49         self
50     }
51 }
52 
53 impl 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 
61 impl IntoSpans<DelimSpan> for DelimSpan {
62     fn into_spans(self) -> DelimSpan {
63         self
64     }
65 }
66