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