Skip to main content

syn/
span.rs

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}