1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
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() } }