Skip to main content

oak_von/parser/
element_type.rs

1use oak_core::{ElementType, UniversalElementRole};
2
3/// Element types for the VON (Value-Oriented Notation) parser.
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6pub enum VonElementType {
7    /// Whitespace characters.
8    Whitespace,
9    /// Line breaks.
10    Newline,
11    /// Comments.
12    Comment,
13    /// End of file.
14    Eof,
15    /// An opening brace (`{`).
16    LeftBrace,
17    /// A closing brace (`}`).
18    RightBrace,
19    /// An opening bracket (`[`).
20    LeftBracket,
21    /// A closing bracket (`]`).
22    RightBracket,
23    /// A comma (`,`).
24    Comma,
25    /// A colon (`:`).
26    Colon,
27    /// An equal sign (`=`).
28    Eq,
29    /// A string literal.
30    StringLiteral,
31    /// A numeric literal.
32    NumberLiteral,
33    /// A boolean literal.
34    BoolLiteral,
35    /// A null literal.
36    NullLiteral,
37    /// An identifier.
38    Identifier,
39    /// A value element.
40    Value,
41    /// An object element.
42    Object,
43    /// An array element.
44    Array,
45    /// An entry in an object.
46    ObjectEntry,
47    /// An enum element.
48    Enum,
49    /// An error node in the parse tree.
50    ErrorNode,
51    /// An error element.
52    Error,
53    /// The root of the parse tree.
54    Root,
55    /// An element in an array.
56    ArrayElement,
57}
58
59impl ElementType for VonElementType {
60    type Role = UniversalElementRole;
61
62    fn role(&self) -> Self::Role {
63        match self {
64            Self::Root => UniversalElementRole::Root,
65
66            Self::Error => UniversalElementRole::Error,
67            _ => UniversalElementRole::None,
68        }
69    }
70}
71
72impl From<crate::lexer::token_type::VonTokenType> for VonElementType {
73    fn from(token: crate::lexer::token_type::VonTokenType) -> Self {
74        unsafe { std::mem::transmute(token) }
75    }
76}