use crate::lib::marker::PhantomData; use crate::{ error::{ParseErrorInto, ParseResult, StreamErrorInto}, stream::{ResetStream, StreamErrorFor}, Positioned, RangeStream, RangeStreamOnce, StreamOnce, }; #[derive(Copy, Clone, Default, Debug, PartialEq, Eq, PartialOrd, Ord)] pub struct Span
{ pub start: P, pub end: P, } impl
From
for Span
where P: Clone, { #[inline] fn from(p: P) -> Self { Self { start: p.clone(), end: p, } } } impl
Span
{
pub fn map(self, mut f: impl FnMut(P) -> Q) -> Span
{
Span {
start: f(self.start),
end: f(self.end),
}
}
}
#[derive(PartialEq, Eq, Copy, Clone, Debug)]
pub struct Stream
(pub S, PhantomData From for Stream {
fn from(stream: S) -> Self {
Stream(stream, PhantomData)
}
}
impl ResetStream for Stream
where
S: ResetStream + Positioned,
S::Token: PartialEq,
S::Range: PartialEq,
E: crate::error::ParseError StreamOnce for Stream
where
S: StreamOnce + Positioned,
S::Token: PartialEq,
S::Range: PartialEq,
E: crate::error::ParseError RangeStreamOnce for Stream
where
S: RangeStream,
S::Token: PartialEq,
S::Range: PartialEq,
E: crate::error::ParseError Positioned for Stream
where
S: StreamOnce + Positioned,
S::Token: PartialEq,
S::Range: PartialEq,
E: crate::error::ParseError