pub trait RangeStreamOnce: StreamOnce + Resetable {
    // Required methods
    fn uncons_range(
        &mut self,
        size: usize
    ) -> Result<Self::Range, StreamErrorFor<Self>>;
    fn uncons_while<F>(
        &mut self,
        f: F
    ) -> Result<Self::Range, StreamErrorFor<Self>>
       where F: FnMut(Self::Item) -> bool;
    fn distance(&self, end: &Self::Checkpoint) -> usize;

    // Provided method
    fn uncons_while1<F>(
        &mut self,
        f: F
    ) -> FastResult<Self::Range, StreamErrorFor<Self>>
       where F: FnMut(Self::Item) -> bool { ... }
}
Expand description

A RangeStream is an extension of StreamOnce which allows for zero copy parsing.

Required Methods§

source

fn uncons_range( &mut self, size: usize ) -> Result<Self::Range, StreamErrorFor<Self>>

Takes size elements from the stream. Fails if the length of the stream is less than size.

source

fn uncons_while<F>(&mut self, f: F) -> Result<Self::Range, StreamErrorFor<Self>>where F: FnMut(Self::Item) -> bool,

Takes items from stream, testing each one with predicate. returns the range of items which passed predicate.

source

fn distance(&self, end: &Self::Checkpoint) -> usize

Returns the distance between self and end. The returned usize must be so that

let start = stream.checkpoint();
stream.uncons_range(distance);
stream.distance(&start) == distance

Provided Methods§

source

fn uncons_while1<F>( &mut self, f: F ) -> FastResult<Self::Range, StreamErrorFor<Self>>where F: FnMut(Self::Item) -> bool,

Takes items from stream, testing each one with predicate returns a range of at least one items which passed predicate.

Note

This may not return EmptyOk as it should uncons at least one item.

Implementations on Foreign Types§

source§

impl<'a, T> RangeStreamOnce for &'a [T]where T: Clone + PartialEq,

source§

fn uncons_range(&mut self, size: usize) -> Result<&'a [T], StreamErrorFor<Self>>

source§

fn uncons_while<F>(&mut self, f: F) -> Result<&'a [T], StreamErrorFor<Self>>where F: FnMut(Self::Item) -> bool,

source§

fn uncons_while1<F>( &mut self, f: F ) -> FastResult<Self::Range, StreamErrorFor<Self>>where F: FnMut(Self::Item) -> bool,

source§

fn distance(&self, end: &Self) -> usize

source§

impl<'a> RangeStreamOnce for &'a str

source§

fn uncons_while<F>(&mut self, f: F) -> Result<&'a str, StreamErrorFor<Self>>where F: FnMut(Self::Item) -> bool,

source§

fn uncons_while1<F>( &mut self, f: F ) -> FastResult<Self::Range, StreamErrorFor<Self>>where F: FnMut(Self::Item) -> bool,

source§

fn uncons_range(&mut self, size: usize) -> Result<&'a str, StreamErrorFor<Self>>

source§

fn distance(&self, end: &Self) -> usize

Implementors§

source§

impl<'a, T> RangeStreamOnce for SliceStream<'a, T>where T: PartialEq + 'a,

source§

impl<I, X, S> RangeStreamOnce for State<I, X>where I: RangeStreamOnce, X: Resetable + RangePositioner<I::Item, I::Range>, S: StreamError<I::Item, I::Range>, I::Error: ParseError<I::Item, I::Range, X::Position, StreamError = S> + ParseError<I::Item, I::Range, I::Position, StreamError = S>, I::Position: Clone + Ord,

source§

impl<S> RangeStreamOnce for Stream<S>where S: RangeStream,

source§

impl<S> RangeStreamOnce for PartialStream<S>where S: RangeStreamOnce,