oak_ocaml/parser/
element_type.rs1use oak_core::{ElementType, UniversalElementRole};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6pub enum OCamlElementType {
7 Root,
9 ModuleDef,
11 LetBinding,
13 MatchExpr,
15 FunctionDef,
17 TypeDefinition,
19 Expression,
21 BinaryExpr,
23 UnaryExpr,
25 CallExpr,
27 LiteralExpr,
29 IdentifierExpr,
31 Error,
33}
34
35impl ElementType for OCamlElementType {
36 type Role = UniversalElementRole;
37
38 fn role(&self) -> Self::Role {
39 match self {
40 _ => UniversalElementRole::None,
41 }
42 }
43}
44
45impl From<crate::lexer::token_type::OCamlTokenType> for OCamlElementType {
46 fn from(token: crate::lexer::token_type::OCamlTokenType) -> Self {
47 use crate::lexer::token_type::OCamlTokenType;
48 match token {
49 OCamlTokenType::Root => OCamlElementType::Root,
50 OCamlTokenType::ModuleDef => OCamlElementType::ModuleDef,
51 OCamlTokenType::LetBinding => OCamlElementType::LetBinding,
52 OCamlTokenType::MatchExpr => OCamlElementType::MatchExpr,
53 OCamlTokenType::FunctionDef => OCamlElementType::FunctionDef,
54 OCamlTokenType::TypeDefinition => OCamlElementType::TypeDefinition,
55 OCamlTokenType::Expression => OCamlElementType::Expression,
56 OCamlTokenType::BinaryExpr => OCamlElementType::BinaryExpr,
57 OCamlTokenType::UnaryExpr => OCamlElementType::UnaryExpr,
58 OCamlTokenType::CallExpr => OCamlElementType::CallExpr,
59 OCamlTokenType::LiteralExpr => OCamlElementType::LiteralExpr,
60 OCamlTokenType::IdentifierExpr => OCamlElementType::IdentifierExpr,
61 _ => OCamlElementType::Error,
62 }
63 }
64}