castle_tokenizer/
tokenizable.rs1
2
3
4use castle_types::CastleError;
5
6use crate::{Token, TokenKind};
7pub trait Tokenizable {
8 fn next(&mut self, skip_line_terminators: bool) -> Result<Option<Token>, CastleError>;
9 fn peek_n(
10 &mut self,
11 skip_n: usize,
12 skip_line_terminators: bool,
13 ) -> Result<Option<&Token>, CastleError>;
14
15 fn peek(&mut self, skip_line_terminators: bool) -> Result<Option<&Token>, CastleError> {
16 self.peek_n(0, skip_line_terminators)
17 }
18 fn peek_expect(&mut self, skip_line_terminators: bool) -> Result<&Token, CastleError> {
19 match self.peek(skip_line_terminators)? {
20 Some(token) => Ok(token),
21 None => Err(CastleError::AbruptEOF("Expected token but got EOF".into())),
22 }
23 }
24
25 fn peek_token_kind(&mut self, skip_line_terminators: bool) -> Result<Option<&TokenKind>, CastleError> {
26 match self.peek(skip_line_terminators)? {
27 Some(token) => Ok(Some(&token.kind)),
28 None => Ok(None),
29 }
30 }
31}