oak_json/parser/
element_type.rs1use oak_core::{ElementType, UniversalElementRole};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6pub enum JsonElementType {
7 Root,
9 Value,
11 Object,
13 Array,
15 String,
17 Number,
19 Boolean,
21 Null,
23 ObjectEntry,
25 ArrayElement,
27 ErrorNode,
29 LeftBrace,
31 RightBrace,
33 LeftBracket,
35 RightBracket,
37 Comma,
39 Colon,
41 StringLiteral,
43 NumberLiteral,
45 BooleanLiteral,
47 NullLiteral,
49 BareKey,
51 Whitespace,
53 Comment,
55 Eof,
57 Error,
59}
60
61impl ElementType for JsonElementType {
62 type Role = UniversalElementRole;
63
64 fn role(&self) -> Self::Role {
65 match self {
66 Self::Root => UniversalElementRole::Root,
67
68 Self::Error => UniversalElementRole::Error,
69 _ => UniversalElementRole::None,
70 }
71 }
72}
73
74impl From<crate::lexer::token_type::JsonTokenType> for JsonElementType {
75 fn from(token: crate::lexer::token_type::JsonTokenType) -> Self {
76 unsafe { std::mem::transmute(token) }
77 }
78}