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