Trait combine::primitives::RangeStream
[−]
[src]
pub trait RangeStream: Stream { fn uncons_range(
&mut self,
size: usize
) -> Result<Self::Range, Error<Self::Item, Self::Range>>; fn uncons_while<F>(
&mut self,
f: F
) -> Result<Self::Range, Error<Self::Item, Self::Range>>
where
F: FnMut(Self::Item) -> bool; fn distance(&self, end: &Self) -> usize; }
A RangeStream
is an extension of Stream
which allows for zero copy parsing.
Required Methods
fn uncons_range(
&mut self,
size: usize
) -> Result<Self::Range, Error<Self::Item, Self::Range>>
&mut self,
size: usize
) -> Result<Self::Range, Error<Self::Item, Self::Range>>
Takes size
elements from the stream.
Fails if the length of the stream is less than size
.
fn uncons_while<F>(
&mut self,
f: F
) -> Result<Self::Range, Error<Self::Item, Self::Range>> where
F: FnMut(Self::Item) -> bool,
&mut self,
f: F
) -> Result<Self::Range, Error<Self::Item, Self::Range>> where
F: FnMut(Self::Item) -> bool,
Takes items from stream, testing each one with predicate
.
returns the range of items which passed predicate
.
fn distance(&self, end: &Self) -> usize
Returns the distance between self
and end
. The returned usize
must be so that
let start = stream.clone(); stream.uncons_range(distance); start.distance() == distance
Implementors
impl<'a> RangeStream for &'a str
impl<'a, T> RangeStream for &'a [T] where
T: Clone + PartialEq,impl<'a, T> RangeStream for SliceStream<'a, T> where
T: Clone + PartialEq + 'a,impl<I, X> RangeStream for State<I, X> where
I: RangeStream,
X: Clone + RangePositioner<I::Item, I::Range>,
I::Position: Clone + Ord,