oak_notedown/parser/
element_type.rs1use crate::lexer::token_type::NoteTokenType;
2use oak_core::{ElementType, UniversalElementRole};
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
7#[repr(u8)]
8pub enum NoteElementType {
9 Root,
11 Heading,
13 List,
15 ListItem,
17 Table,
19 TableRow,
21 CodeBlock,
23 Paragraph,
25 Blockquote,
27 HorizontalRule,
29 Link,
31 Image,
33 Html,
35 Error,
37
38 Token(NoteTokenType),
40}
41
42impl ElementType for NoteElementType {
43 type Role = UniversalElementRole;
44
45 fn is_root(&self) -> bool {
46 matches!(self, Self::Root)
47 }
48
49 fn role(&self) -> Self::Role {
50 match self {
51 Self::Root => UniversalElementRole::Root,
52 Self::Heading | Self::Paragraph | Self::Blockquote | Self::HorizontalRule | Self::CodeBlock => UniversalElementRole::Statement,
53 Self::List | Self::Table | Self::Link | Self::Image | Self::Html => UniversalElementRole::Container,
54 Self::ListItem | Self::TableRow => UniversalElementRole::Container,
55 Self::Error => UniversalElementRole::Error,
56 Self::Token(_) => UniversalElementRole::None,
57 }
58 }
59}
60
61impl From<NoteTokenType> for NoteElementType {
62 fn from(token: NoteTokenType) -> Self {
63 Self::Token(token)
64 }
65}