1use core::range::Range;
2use serde::{Deserialize, Serialize};
3
4#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
6pub struct MarkdownRoot {
7 pub blocks: Vec<Block>,
9}
10
11#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
13pub enum Block {
14 Heading(Heading),
16 Paragraph(Paragraph),
18 CodeBlock(CodeBlock),
20 List(List),
22 Blockquote(Blockquote),
24 HorizontalRule(HorizontalRule),
26 Table(Table),
28 Html(Html),
30}
31
32#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
34pub struct Heading {
35 pub level: u32,
37 pub content: String,
39 #[serde(with = "oak_core::serde_range")]
41 pub span: Range<usize>,
42}
43
44#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
46pub struct Paragraph {
47 pub content: String,
49 #[serde(with = "oak_core::serde_range")]
51 pub span: Range<usize>,
52}
53
54#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
56pub struct CodeBlock {
57 pub language: Option<String>,
59 pub content: String,
61 #[serde(with = "oak_core::serde_range")]
63 pub span: Range<usize>,
64}
65
66#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
68pub struct List {
69 pub is_ordered: bool,
71 pub items: Vec<ListItem>,
73 #[serde(with = "oak_core::serde_range")]
75 pub span: Range<usize>,
76}
77
78#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
80pub struct ListItem {
81 pub content: Vec<Block>,
83 pub is_task: bool,
85 pub is_checked: Option<bool>,
87 #[serde(with = "oak_core::serde_range")]
89 pub span: Range<usize>,
90}
91
92#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
94pub struct Blockquote {
95 pub content: Vec<Block>,
97 #[serde(with = "oak_core::serde_range")]
99 pub span: Range<usize>,
100}
101
102#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
104pub struct HorizontalRule {
105 #[serde(with = "oak_core::serde_range")]
107 pub span: Range<usize>,
108}
109
110#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
112pub struct Table {
113 pub header: TableRow,
115 pub rows: Vec<TableRow>,
117 #[serde(with = "oak_core::serde_range")]
119 pub span: Range<usize>,
120}
121
122#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
124pub struct TableRow {
125 pub cells: Vec<TableCell>,
127 #[serde(with = "oak_core::serde_range")]
129 pub span: Range<usize>,
130}
131
132#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
134pub struct TableCell {
135 pub content: String,
137 #[serde(with = "oak_core::serde_range")]
139 pub span: Range<usize>,
140}
141
142#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
144pub struct Html {
145 pub content: String,
147 #[serde(with = "oak_core::serde_range")]
149 pub span: Range<usize>,
150}