Skip to main content

oak_dot/parser/
element_type.rs

1//! Element types for the DOT language.
2use oak_core::{ElementType, UniversalElementRole};
3
4/// Element types for the DOT language.
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
7#[repr(u8)]
8pub enum DotElementType {
9    // Basic kind
10    /// An identifier.
11    Identifier,
12    /// A string literal.
13    String,
14    /// A number literal.
15    Number,
16    /// Whitespace.
17    Whitespace,
18    /// A newline.
19    Newline,
20
21    // DOT keywords
22    /// The `graph` keyword.
23    Graph,
24    /// The `digraph` keyword.
25    Digraph,
26    /// The `subgraph` keyword.
27    Subgraph,
28    /// The `node` keyword.
29    Node,
30    /// The `edge` keyword.
31    Edge,
32    /// The `strict` keyword.
33    Strict,
34
35    // Operators
36    /// The `->` arrow operator.
37    Arrow, // ->
38    /// The `--` line operator.
39    Line, // --
40    /// The `=` equal operator.
41    Equal, // =
42    /// The `;` semicolon.
43    Semicolon, // ;
44    /// The `,` comma.
45    Comma, // ,
46
47    // Delimiters
48    /// The `{` left brace.
49    LeftBrace, // {
50    /// The `}` right brace.
51    RightBrace, // }
52    /// The `[` left bracket.
53    LeftBracket, // [
54    /// The `]` right bracket.
55    RightBracket, // ]
56    /// The `(` left paren.
57    LeftParen, // (
58    /// The `)` right paren.
59    RightParen, // )
60
61    // Comments
62    /// A comment.
63    Comment,
64
65    // Special
66    /// The root element.
67    Root,
68    /// An error element.
69    Error,
70    /// End of stream marker.
71    Eof,
72}
73
74impl ElementType for DotElementType {
75    type Role = UniversalElementRole;
76
77    fn role(&self) -> Self::Role {
78        match self {
79            _ => UniversalElementRole::None,
80        }
81    }
82}
83
84impl From<crate::lexer::token_type::DotTokenType> for DotElementType {
85    fn from(token: crate::lexer::token_type::DotTokenType) -> Self {
86        unsafe { std::mem::transmute(token) }
87    }
88}