blob: 77d4448bed3696ebded7bb7e62f2f1665d2af51f [file] [log] [blame]
use proc_macro2::Span;
use super::lookahead::TokenMarker;
pub trait IntoSpans<S> {
// Not public API.
#[doc(hidden)]
fn into_spans(self) -> S;
}
impl<S> IntoSpans<S> for TokenMarker {
fn into_spans(self) -> S {
match self {}
}
}
impl IntoSpans<[Span; 1]> for Span {
fn into_spans(self) -> [Span; 1] {
[self]
}
}
impl IntoSpans<[Span; 2]> for Span {
fn into_spans(self) -> [Span; 2] {
[self, self]
}
}
impl IntoSpans<[Span; 3]> for Span {
fn into_spans(self) -> [Span; 3] {
[self, self, self]
}
}
impl IntoSpans<Self> for [Span; 1] {
fn into_spans(self) -> Self {
self
}
}
impl IntoSpans<Self> for [Span; 2] {
fn into_spans(self) -> Self {
self
}
}
impl IntoSpans<Self> for [Span; 3] {
fn into_spans(self) -> Self {
self
}
}
pub trait FromSpans: Sized {
fn from_spans(spans: &[Span]) -> Self;
}
impl FromSpans for [Span; 1] {
fn from_spans(spans: &[Span]) -> Self {
[spans[0]]
}
}
impl FromSpans for [Span; 2] {
fn from_spans(spans: &[Span]) -> Self {
[spans[0], spans[1]]
}
}
impl FromSpans for [Span; 3] {
fn from_spans(spans: &[Span]) -> Self {
[spans[0], spans[1], spans[2]]
}
}