Trait combine::primitives::RangeStreamOnce
[−]
[src]
pub trait RangeStreamOnce: StreamOnce { fn uncons_range<E>(&mut self, size: usize) -> Result<Self::Range, E>
where
E: StreamError<Self::Item, Self::Range>; fn uncons_while<E, F>(&mut self, f: F) -> Result<Self::Range, E>
where
F: FnMut(Self::Item) -> bool,
E: StreamError<Self::Item, Self::Range>; fn distance(&self, end: &Self) -> usize; }
A RangeStream
is an extension of StreamOnce
which allows for zero copy parsing.
Required Methods
fn uncons_range<E>(&mut self, size: usize) -> Result<Self::Range, E> where
E: StreamError<Self::Item, Self::Range>,
E: StreamError<Self::Item, Self::Range>,
Takes size
elements from the stream.
Fails if the length of the stream is less than size
.
fn uncons_while<E, F>(&mut self, f: F) -> Result<Self::Range, E> where
F: FnMut(Self::Item) -> bool,
E: StreamError<Self::Item, Self::Range>,
F: FnMut(Self::Item) -> bool,
E: StreamError<Self::Item, Self::Range>,
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
⚠Be careful when using this code, it's not being tested!
let start = stream.clone(); stream.uncons_range(distance); start.distance() == distance
Implementations on Foreign Types
impl<'a> RangeStreamOnce for &'a str
[src]
fn uncons_while<E, F>(&mut self, f: F) -> Result<&'a str, E> where
F: FnMut(Self::Item) -> bool,
E: StreamError<Self::Item, Self::Range>,
[src]
F: FnMut(Self::Item) -> bool,
E: StreamError<Self::Item, Self::Range>,
fn uncons_range<E>(&mut self, size: usize) -> Result<&'a str, E> where
E: StreamError<Self::Item, Self::Range>,
[src]
E: StreamError<Self::Item, Self::Range>,
fn distance(&self, end: &Self) -> usize
[src]
impl<'a, T> RangeStreamOnce for &'a [T] where
T: Clone + PartialEq,
[src]
T: Clone + PartialEq,
fn uncons_range<E>(&mut self, size: usize) -> Result<&'a [T], E> where
E: StreamError<Self::Item, Self::Range>,
[src]
E: StreamError<Self::Item, Self::Range>,
fn uncons_while<E, F>(&mut self, f: F) -> Result<&'a [T], E> where
F: FnMut(Self::Item) -> bool,
E: StreamError<Self::Item, Self::Range>,
[src]
F: FnMut(Self::Item) -> bool,
E: StreamError<Self::Item, Self::Range>,
fn distance(&self, end: &Self) -> usize
[src]
Implementors
impl<'a, T> RangeStreamOnce for SliceStream<'a, T> where
T: Clone + PartialEq + 'a,impl<I, X, S> RangeStreamOnce for State<I, X> where
I: RangeStreamOnce,
X: Clone + RangePositioner<I::Item, I::Range>,
S: StreamError<I::Item, I::Range>,
I::Error: ParseError<I::Item, I::Range, X::Position, StreamError = S>,
I::Error: ParseError<I::Item, I::Range, I::Position, StreamError = S>,
I::Position: Clone + Ord,impl<S> RangeStreamOnce for Stream<S> where
S: RangeStream,
S::Error: ParseError<S::Item, S::Range, S::Position>,
S::Position: Default,