pub trait RangeStreamOnce: StreamOnce + ResetStream {
    // 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::Token) -> bool;
    fn distance(&self, end: &Self::Checkpoint) -> usize;
    fn range(&self) -> Self::Range;

    // Provided method
    fn uncons_while1<F>(
        &mut self,
        f: F
    ) -> ParseResult<Self::Range, StreamErrorFor<Self>>
       where F: FnMut(Self::Token) -> 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::Token) -> 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
source

fn range(&self) -> Self::Range

Returns the entire range of self

Provided Methods§

source

fn uncons_while1<F>( &mut self, f: F ) -> ParseResult<Self::Range, StreamErrorFor<Self>>
where F: FnMut(Self::Token) -> 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 PeekOk as it should uncons at least one token.

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

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::Token) -> bool,

source§

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

source§

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

source§

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

source§

fn range(&self) -> Self::Range

source§

impl<'a, I> RangeStreamOnce for &'a mut I
where I: RangeStreamOnce + ?Sized,

source§

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

source§

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

source§

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

source§

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

source§

fn range(&self) -> Self::Range

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::Token) -> bool,

source§

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

source§

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

source§

fn range(&self) -> Self::Range

Implementors§

source§

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

source§

impl<Input, X, S> RangeStreamOnce for combine::stream::position::Stream<Input, X>
where Input: RangeStreamOnce, X: RangePositioner<Input::Token, Input::Range>, S: StreamError<Input::Token, Input::Range>, Input::Error: ParseError<Input::Token, Input::Range, X::Position, StreamError = S> + ParseError<Input::Token, Input::Range, Input::Position, StreamError = S>, Input::Position: Clone + Ord,

source§

impl<S> RangeStreamOnce for combine::stream::easy::Stream<S>

Available on crate feature std only.
source§

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

source§

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

source§

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

source§

impl<S, E> RangeStreamOnce for combine::stream::span::Stream<S, E>

source§

impl<S, U> RangeStreamOnce for combine::stream::state::Stream<S, U>
where S: RangeStreamOnce,