oak_json/lexer/
token_type.rs1use oak_core::{Token, TokenType, UniversalTokenRole};
2
3pub type JsonToken = Token<JsonTokenType>;
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
8#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
9pub enum JsonTokenType {
10 Root,
12 Value,
14 Object,
16 Array,
18 String,
20 Number,
22 Boolean,
24 Null,
26 ObjectEntry,
28 ArrayElement,
30 ErrorNode,
32 LeftBrace,
34 RightBrace,
36 LeftBracket,
38 RightBracket,
40 Comma,
42 Colon,
44 StringLiteral,
46 NumberLiteral,
48 BooleanLiteral,
50 NullLiteral,
52 BareKey,
54 Whitespace,
56 Comment,
58 Eof,
60 Error,
62}
63
64impl TokenType for JsonTokenType {
65 type Role = UniversalTokenRole;
66 const END_OF_STREAM: Self = Self::Eof;
67
68 fn is_ignored(&self) -> bool {
69 matches!(self, Self::Whitespace | Self::Comment)
70 }
71
72 fn role(&self) -> Self::Role {
73 match self {
74 Self::Whitespace => UniversalTokenRole::Whitespace,
75 Self::Comment => UniversalTokenRole::Comment,
76 Self::Eof => UniversalTokenRole::Eof,
77 Self::Error => UniversalTokenRole::Error,
78 _ => UniversalTokenRole::None,
79 }
80 }
81}