Skip to main content

oak_json/parser/
element_type.rs

1use oak_core::{ElementType, UniversalElementRole};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5/// Element types for the JSON parser.
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
7#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
8pub enum JsonElementType {
9    /// Root node of the JSON document.
10    Root,
11    /// A JSON value.
12    Value,
13    /// A JSON object.
14    Object,
15    /// A JSON array.
16    Array,
17    /// A JSON string.
18    String,
19    /// A JSON number.
20    Number,
21    /// A JSON boolean.
22    Boolean,
23    /// A JSON null value.
24    Null,
25    /// An entry in a JSON object.
26    ObjectEntry,
27    /// An element in a JSON array.
28    ArrayElement,
29    /// An error node in the parse tree.
30    ErrorNode,
31    /// Left brace `{`.
32    LeftBrace,
33    /// Right brace `}`.
34    RightBrace,
35    /// Left bracket `[`.
36    LeftBracket,
37    /// Right bracket `]`.
38    RightBracket,
39    /// Comma `,`.
40    Comma,
41    /// Colon `:`.
42    Colon,
43    /// A string literal.
44    StringLiteral,
45    /// A number literal.
46    NumberLiteral,
47    /// A boolean literal (`true` or `false`).
48    BooleanLiteral,
49    /// A null literal (`null`).
50    NullLiteral,
51    /// A bare key (used in some JSON variants).
52    BareKey,
53    /// Whitespace (spaces, tabs, newlines).
54    Whitespace,
55    /// A comment.
56    Comment,
57    /// End of stream.
58    Eof,
59    /// An error element.
60    Error,
61}
62
63impl ElementType for JsonElementType {
64    type Role = UniversalElementRole;
65
66    fn role(&self) -> Self::Role {
67        match self {
68            Self::Root => UniversalElementRole::Root,
69
70            Self::Error => UniversalElementRole::Error,
71            _ => UniversalElementRole::None,
72        }
73    }
74}
75
76impl From<crate::lexer::token_type::JsonTokenType> for JsonElementType {
77    fn from(token: crate::lexer::token_type::JsonTokenType) -> Self {
78        unsafe { std::mem::transmute(token) }
79    }
80}