katana_markdown_engine/document/
types.rs1use crate::{SourceSpan, TextFingerprint};
2use serde::{Deserialize, Serialize};
3use std::path::PathBuf;
4
5#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
6pub struct KmeNodeId(pub String);
7
8#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
9pub struct KmeDocument {
10 pub path: PathBuf,
11 pub fingerprint: TextFingerprint,
12 pub nodes: Vec<KmeNode>,
13}
14
15#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
16pub struct KmeNode {
17 pub id: KmeNodeId,
18 pub kind: KmeNodeKind,
19 pub source: SourceSpan,
20 pub children: Vec<KmeNode>,
21}
22
23#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
24pub enum KmeNodeKind {
25 Heading(HeadingNode),
26 Paragraph,
27 Emoji(EmojiNode),
28 HtmlBlock(HtmlBlockRole),
29 List(ListNode),
30 CodeBlock(CodeBlockRole),
31 Table(TableNode),
32 BlockQuote,
33 Alert { label: String },
34 DescriptionList { items: Vec<DescriptionItem> },
35 ThematicBreak,
36 RawBlock { reason: String },
37}
38
39#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
40pub struct HeadingNode {
41 pub level: u8,
42 pub text: String,
43}
44
45#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
46pub struct EmojiNode {
47 pub value: String,
48 pub shortcode: Option<String>,
49}
50
51#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
52pub enum HtmlBlockRole {
53 Generic,
54 Centered,
55 BadgeRow,
56}
57
58#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
59pub struct ListNode {
60 pub ordered: bool,
61 pub task_markers: Vec<String>,
62}
63
64#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
65pub enum CodeBlockRole {
66 Plain { language: Option<String> },
67 Diagram { kind: DiagramKind },
68 Math,
69}
70
71#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
72pub enum DiagramKind {
73 Mermaid,
74 DrawIo,
75 PlantUml,
76}
77
78#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
79pub struct TableNode {
80 pub alignments: Vec<TableAlignment>,
81 pub rows: Vec<TableRow>,
82}
83
84#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
85pub enum TableAlignment {
86 Left,
87 Center,
88 Right,
89 Unspecified,
90}
91
92#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
93pub struct TableRow {
94 pub cells: Vec<TableCell>,
95}
96
97#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
98pub struct TableCell {
99 pub text: String,
100 pub source: SourceSpan,
101}
102
103#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
104pub struct DescriptionItem {
105 pub term: String,
106 pub description: String,
107}