pub trait Stream: Offset + Clone + Debug {
type Token: Debug;
type Slice: Debug;
type IterOffsets: Iterator<Item = (usize, Self::Token)>;
// Required methods
fn iter_offsets(&self) -> Self::IterOffsets;
fn eof_offset(&self) -> usize;
fn next_token(&self) -> Option<(Self, 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(&self, offset: usize) -> (Self, Self::Slice);
}
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
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 offaet to the end of the input
sourcefn next_token(&self) -> Option<(Self, Self::Token)>
fn next_token(&self) -> Option<(Self, Self::Token)>
Split off the next token from the input
sourcefn offset_for<P>(&self, predicate: P) -> Option<usize>where
P: Fn(Self::Token) -> bool,
fn offset_for<P>(&self, predicate: P) -> Option<usize>where P: Fn(Self::Token) -> bool,
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(&self, offset: usize) -> (Self, Self::Slice)
fn next_slice(&self, offset: usize) -> (Self, 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.