Trait Stream
pub trait Stream: Offset<Self::Checkpoint> + Debug {
type Token: Debug;
type Slice: Debug;
type IterOffsets: Iterator<Item = (usize, Self::Token)>;
type Checkpoint: Offset + Clone + Debug;
Show 13 methods
// Required methods
fn iter_offsets(&self) -> Self::IterOffsets;
fn eof_offset(&self) -> usize ⓘ;
fn next_token(&mut self) -> Option<Self::Token> ⓘ;
fn offset_for<P>(&self, predicate: P) -> Option<usize> ⓘ
where P: Fn(Self::Token) -> bool;
fn offset_at(&self, tokens: usize) -> Result<usize, Needed> ⓘ;
fn next_slice(&mut self, offset: usize) -> Self::Slice;
fn checkpoint(&self) -> Self::Checkpoint;
fn reset(&mut self, checkpoint: &Self::Checkpoint);
fn raw(&self) -> &dyn Debug;
// Provided methods
fn peek_token(&self) -> Option<(Self, Self::Token)> ⓘ
where Self: Clone { ... }
fn peek_slice(&self, offset: usize) -> (Self, Self::Slice) ⓘ
where Self: Clone { ... }
fn finish(&mut self) -> Self::Slice { ... }
fn peek_finish(&self) -> (Self, Self::Slice) ⓘ
where Self: Clone { ... }
}
dep_winnow
only.Expand description
Core definition for parser input state
Required Associated Types§
type Slice: Debug
type Slice: Debug
Sequence of Token
s
Example: &[u8]
for LocatingSlice<&[u8]>
or &str
for LocatingSlice<&str>
type IterOffsets: Iterator<Item = (usize, Self::Token)>
type IterOffsets: Iterator<Item = (usize, Self::Token)>
Iterate with the offset from the current location
type Checkpoint: Offset + Clone + Debug
type Checkpoint: Offset + Clone + Debug
A parse location within the stream
Required Methods§
fn iter_offsets(&self) -> Self::IterOffsets
fn iter_offsets(&self) -> Self::IterOffsets
Iterate with the offset from the current location
fn eof_offset(&self) -> usize ⓘ
fn eof_offset(&self) -> usize ⓘ
Returns the offset to the end of the input
fn next_token(&mut self) -> Option<Self::Token> ⓘ
fn next_token(&mut self) -> Option<Self::Token> ⓘ
Split off the next token from the input
fn offset_for<P>(&self, predicate: P) -> Option<usize> ⓘ
fn offset_for<P>(&self, predicate: P) -> Option<usize> ⓘ
Finds the offset of the next matching token
fn offset_at(&self, tokens: usize) -> Result<usize, Needed> ⓘ
fn offset_at(&self, tokens: usize) -> Result<usize, Needed> ⓘ
Get the offset for the number of tokens
into the stream
This means “0 tokens” will return 0
offset
fn next_slice(&mut self, offset: usize) -> Self::Slice
fn next_slice(&mut self, offset: usize) -> Self::Slice
Split off a slice of tokens from the input
Note: For inputs with variable width tokens, like &str
’s char
, offset
might not correspond
with the number of tokens. To get a valid offset, use:
§Panic
This will panic if
- Indexes must be within bounds of the original input;
- Indexes must uphold invariants of the stream, like for
str
they must lie on UTF-8 sequence boundaries.
fn checkpoint(&self) -> Self::Checkpoint
fn checkpoint(&self) -> Self::Checkpoint
Save the current parse location within the stream
fn reset(&mut self, checkpoint: &Self::Checkpoint)
fn reset(&mut self, checkpoint: &Self::Checkpoint)
Revert the stream to a prior Self::Checkpoint
§Panic
May panic if an invalid Self::Checkpoint
is provided
Provided Methods§
fn peek_token(&self) -> Option<(Self, Self::Token)> ⓘwhere
Self: Clone,
fn peek_token(&self) -> Option<(Self, Self::Token)> ⓘwhere
Self: Clone,
Split off the next token from the input
fn peek_slice(&self, offset: usize) -> (Self, Self::Slice) ⓘwhere
Self: Clone,
fn peek_slice(&self, offset: usize) -> (Self, Self::Slice) ⓘwhere
Self: Clone,
Split off a slice of tokens from the input
fn peek_finish(&self) -> (Self, Self::Slice) ⓘwhere
Self: Clone,
fn peek_finish(&self) -> (Self, Self::Slice) ⓘwhere
Self: Clone,
Advance to the end of the stream
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.