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>;
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}