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 { ... }
}
Expand description
Core definition for parser input state
Required Associated Types§
sourcetype Slice: Debug
type Slice: Debug
Sequence of Token
s
Example: &[u8]
for Located<&[u8]>
or &str
for Located<&str>
sourcetype IterOffsets: Iterator<Item = (usize, Self::Token)>
type IterOffsets: Iterator<Item = (usize, Self::Token)>
Iterate with the offset from the current location
sourcetype Checkpoint: Offset + Clone + Debug
type Checkpoint: Offset + Clone + Debug
A parse location within the stream
Required Methods§
sourcefn iter_offsets(&self) -> Self::IterOffsets
fn iter_offsets(&self) -> Self::IterOffsets
Iterate with the offset from the current location
sourcefn eof_offset(&self) -> usize
fn eof_offset(&self) -> usize
Returns the offset to the end of the input
sourcefn next_token(&mut self) -> Option<Self::Token>
fn next_token(&mut self) -> Option<Self::Token>
Split off the next token from the input
sourcefn 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
sourcefn 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
sourcefn 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.
sourcefn checkpoint(&self) -> Self::Checkpoint
fn checkpoint(&self) -> Self::Checkpoint
Save the current parse location within the stream
sourcefn 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§
sourcefn 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
sourcefn 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
sourcefn 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