Skip to main content

oak_json/lexer/
token_type.rs

1use oak_core::{Token, TokenType, UniversalTokenRole};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5pub type JsonToken = Token<JsonTokenType>;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
8#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9pub enum JsonTokenType {
10    Root,
11    Value,
12    Object,
13    Array,
14    String,
15    Number,
16    Boolean,
17    Null,
18    ObjectEntry,
19    ArrayElement,
20    ErrorNode,
21    LeftBrace,
22    RightBrace,
23    LeftBracket,
24    RightBracket,
25    Comma,
26    Colon,
27    StringLiteral,
28    NumberLiteral,
29    BooleanLiteral,
30    NullLiteral,
31    BareKey,
32    Whitespace,
33    Comment,
34    Eof,
35    Error,
36}
37
38impl TokenType for JsonTokenType {
39    type Role = UniversalTokenRole;
40    const END_OF_STREAM: Self = Self::Eof;
41
42    fn is_ignored(&self) -> bool {
43        matches!(self, Self::Whitespace | Self::Comment)
44    }
45
46    fn role(&self) -> Self::Role {
47        match self {
48            Self::Whitespace => UniversalTokenRole::Whitespace,
49            Self::Comment => UniversalTokenRole::Comment,
50            Self::Eof => UniversalTokenRole::Eof,
51            Self::Error => UniversalTokenRole::Error,
52            _ => UniversalTokenRole::None,
53        }
54    }
55}