Skip to main content

oak_d2/parser/
element_type.rs

1use crate::lexer::token_type::D2TokenType;
2use oak_core::{ElementType, UniversalElementRole};
3#[cfg(feature = "serde")]
4use serde::{Deserialize, Serialize};
5
6/// Element types for the D2 AST.
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
8#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9pub enum D2ElementType {
10    /// Token.
11    Token(D2TokenType),
12    /// Root node.
13    Root,
14    /// Shape definition.
15    Shape,
16    /// Connection definition.
17    Connection,
18    /// Container definition.
19    Container,
20    /// Parsing error.
21    Error,
22}
23
24impl From<D2TokenType> for D2ElementType {
25    fn from(token: D2TokenType) -> Self {
26        Self::Token(token)
27    }
28}
29
30impl ElementType for D2ElementType {
31    type Role = UniversalElementRole;
32
33    fn role(&self) -> Self::Role {
34        match self {
35            Self::Root => UniversalElementRole::Root,
36            _ => UniversalElementRole::None,
37        }
38    }
39}