pub trait Lexer<'text> {
type Token: ScanToken;
// Required methods
fn scanner(&self) -> &Scanner<'text>;
fn scanner_mut(&mut self) -> &mut Scanner<'text>;
// Provided methods
fn next_token(&mut self) -> Option<(Self::Token, TokenSpan<'text>)> { ... }
fn peek_token(&self) -> Option<(Self::Token, TokenSpan<'text>)> { ... }
fn cursor_pos(&self) -> usize { ... }
fn set_cursor_pos(&mut self, pos: usize) -> usize { ... }
fn reset(&mut self) -> usize { ... }
}