combine::stream

Trait RangeStreamOnce

Source
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.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so 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::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

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

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,