1*69942c0aSMiguel Ojeda // SPDX-License-Identifier: Apache-2.0 OR MIT 2*69942c0aSMiguel Ojeda 3808c999fSMiguel Ojeda use proc_macro2::extra::DelimSpan; 4808c999fSMiguel Ojeda use proc_macro2::{Delimiter, Group, Span, TokenStream}; 5808c999fSMiguel Ojeda 6808c999fSMiguel Ojeda #[doc(hidden)] 7808c999fSMiguel Ojeda pub trait IntoSpans<S> { into_spans(self) -> S8808c999fSMiguel Ojeda fn into_spans(self) -> S; 9808c999fSMiguel Ojeda } 10808c999fSMiguel Ojeda 11808c999fSMiguel Ojeda impl IntoSpans<Span> for Span { into_spans(self) -> Span12808c999fSMiguel Ojeda fn into_spans(self) -> Span { 13808c999fSMiguel Ojeda self 14808c999fSMiguel Ojeda } 15808c999fSMiguel Ojeda } 16808c999fSMiguel Ojeda 17808c999fSMiguel Ojeda impl IntoSpans<[Span; 1]> for Span { into_spans(self) -> [Span; 1]18808c999fSMiguel Ojeda fn into_spans(self) -> [Span; 1] { 19808c999fSMiguel Ojeda [self] 20808c999fSMiguel Ojeda } 21808c999fSMiguel Ojeda } 22808c999fSMiguel Ojeda 23808c999fSMiguel Ojeda impl IntoSpans<[Span; 2]> for Span { into_spans(self) -> [Span; 2]24808c999fSMiguel Ojeda fn into_spans(self) -> [Span; 2] { 25808c999fSMiguel Ojeda [self, self] 26808c999fSMiguel Ojeda } 27808c999fSMiguel Ojeda } 28808c999fSMiguel Ojeda 29808c999fSMiguel Ojeda impl IntoSpans<[Span; 3]> for Span { into_spans(self) -> [Span; 3]30808c999fSMiguel Ojeda fn into_spans(self) -> [Span; 3] { 31808c999fSMiguel Ojeda [self, self, self] 32808c999fSMiguel Ojeda } 33808c999fSMiguel Ojeda } 34808c999fSMiguel Ojeda 35808c999fSMiguel Ojeda impl IntoSpans<[Span; 1]> for [Span; 1] { into_spans(self) -> [Span; 1]36808c999fSMiguel Ojeda fn into_spans(self) -> [Span; 1] { 37808c999fSMiguel Ojeda self 38808c999fSMiguel Ojeda } 39808c999fSMiguel Ojeda } 40808c999fSMiguel Ojeda 41808c999fSMiguel Ojeda impl IntoSpans<[Span; 2]> for [Span; 2] { into_spans(self) -> [Span; 2]42808c999fSMiguel Ojeda fn into_spans(self) -> [Span; 2] { 43808c999fSMiguel Ojeda self 44808c999fSMiguel Ojeda } 45808c999fSMiguel Ojeda } 46808c999fSMiguel Ojeda 47808c999fSMiguel Ojeda impl IntoSpans<[Span; 3]> for [Span; 3] { into_spans(self) -> [Span; 3]48808c999fSMiguel Ojeda fn into_spans(self) -> [Span; 3] { 49808c999fSMiguel Ojeda self 50808c999fSMiguel Ojeda } 51808c999fSMiguel Ojeda } 52808c999fSMiguel Ojeda 53808c999fSMiguel Ojeda impl IntoSpans<DelimSpan> for Span { into_spans(self) -> DelimSpan54808c999fSMiguel Ojeda fn into_spans(self) -> DelimSpan { 55808c999fSMiguel Ojeda let mut group = Group::new(Delimiter::None, TokenStream::new()); 56808c999fSMiguel Ojeda group.set_span(self); 57808c999fSMiguel Ojeda group.delim_span() 58808c999fSMiguel Ojeda } 59808c999fSMiguel Ojeda } 60808c999fSMiguel Ojeda 61808c999fSMiguel Ojeda impl IntoSpans<DelimSpan> for DelimSpan { into_spans(self) -> DelimSpan62808c999fSMiguel Ojeda fn into_spans(self) -> DelimSpan { 63808c999fSMiguel Ojeda self 64808c999fSMiguel Ojeda } 65808c999fSMiguel Ojeda } 66