Skip to main content

oak_smalltalk/lexer/
token_type.rs

1use oak_core::{TokenType, UniversalTokenRole};
2
3/// Smalltalk token types.
4#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6pub enum SmalltalkTokenType {
7    /// End of file.
8    Eof,
9    /// Whitespace.
10    Whitespace,
11    /// Comment.
12    Comment,
13    /// Identifier.
14    Identifier,
15    /// String literal.
16    String,
17    /// Number literal.
18    Number,
19    /// Character literal.
20    Character,
21    /// Symbol literal.
22    Symbol,
23}
24
25impl TokenType for SmalltalkTokenType {
26    type Role = UniversalTokenRole;
27    const END_OF_STREAM: Self = Self::Eof;
28
29    fn role(&self) -> Self::Role {
30        match self {
31            Self::Eof => UniversalTokenRole::Eof,
32            Self::Whitespace => UniversalTokenRole::Whitespace,
33            Self::Comment => UniversalTokenRole::Comment,
34            Self::Identifier => UniversalTokenRole::Name,
35            Self::String => UniversalTokenRole::Literal,
36            Self::Number => UniversalTokenRole::Literal,
37            Self::Character => UniversalTokenRole::Literal,
38            Self::Symbol => UniversalTokenRole::Literal,
39        }
40    }
41}