| use crate::{ | |
| error::ParseResult, | |
| stream::{Positioned, RangeStreamOnce, ResetStream, StreamErrorFor, StreamOnce}, | |
| }; | |
| #[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Debug)] | |
| pub struct Stream<S, U> { | |
| pub stream: S, | |
| pub state: U, | |
| } | |
| impl<S, U> Positioned for Stream<S, U> | |
| where | |
| S: Positioned, | |
| { | |
| #[inline] | |
| fn position(&self) -> Self::Position { | |
| self.stream.position() | |
| } | |
| } | |
| impl<S, U> ResetStream for Stream<S, U> | |
| where | |
| S: ResetStream, | |
| { | |
| type Checkpoint = S::Checkpoint; | |
| #[inline] | |
| fn checkpoint(&self) -> Self::Checkpoint { | |
| self.stream.checkpoint() | |
| } | |
| #[inline] | |
| fn reset(&mut self, checkpoint: Self::Checkpoint) -> Result<(), Self::Error> { | |
| self.stream.reset(checkpoint) | |
| } | |
| } | |
| impl<S, U> StreamOnce for Stream<S, U> | |
| where | |
| S: StreamOnce, | |
| { | |
| type Token = S::Token; | |
| type Range = S::Range; | |
| type Position = S::Position; | |
| type Error = S::Error; | |
| #[inline] | |
| fn uncons(&mut self) -> Result<S::Token, StreamErrorFor<Self>> { | |
| self.stream.uncons() | |
| } | |
| fn is_partial(&self) -> bool { | |
| self.stream.is_partial() | |
| } | |
| } | |
| impl<S, U> RangeStreamOnce for Stream<S, U> | |
| where | |
| S: RangeStreamOnce, | |
| { | |
| #[inline] | |
| fn uncons_range(&mut self, size: usize) -> Result<Self::Range, StreamErrorFor<Self>> { | |
| self.stream.uncons_range(size) | |
| } | |
| #[inline] | |
| fn uncons_while<F>(&mut self, f: F) -> Result<Self::Range, StreamErrorFor<Self>> | |
| where | |
| F: FnMut(Self::Token) -> bool, | |
| { | |
| self.stream.uncons_while(f) | |
| } | |
| fn uncons_while1<F>(&mut self, f: F) -> ParseResult<Self::Range, StreamErrorFor<Self>> | |
| where | |
| F: FnMut(Self::Token) -> bool, | |
| { | |
| self.stream.uncons_while1(f) | |
| } | |
| #[inline] | |
| fn distance(&self, end: &Self::Checkpoint) -> usize { | |
| self.stream.distance(end) | |
| } | |
| #[inline] | |
| fn range(&self) -> Self::Range { | |
| self.stream.range() | |
| } | |
| } |