Skip to main content

oak_dot/parser/
element_type.rs

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