pub use super::{
Alignment, CodeBlockKind, GitHubAlert, GitHubAlertType, HeadingKind, ListBulletKind,
ListOrderedKindOptions, SetextHeading, TaskState,
};
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Document<T = ()> {
pub blocks: Vec<Block<T>>,
#[cfg_attr(feature = "ast-serde", serde(default))]
pub user_data: T,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Block<T = ()> {
Paragraph {
content: Vec<Inline<T>>,
#[cfg_attr(feature = "ast-serde", serde(default))]
user_data: T,
},
Heading(Heading<T>),
ThematicBreak {
#[cfg_attr(feature = "ast-serde", serde(default))]
user_data: T,
},
BlockQuote {
blocks: Vec<Block<T>>,
#[cfg_attr(feature = "ast-serde", serde(default))]
user_data: T,
},
List(List<T>),
CodeBlock(CodeBlock<T>),
HtmlBlock {
content: String,
#[cfg_attr(feature = "ast-serde", serde(default))]
user_data: T,
},
Definition(LinkDefinition<T>),
Table(Table<T>),
FootnoteDefinition(FootnoteDefinition<T>),
GitHubAlert(GitHubAlertNode<T>),
Empty {
#[cfg_attr(feature = "ast-serde", serde(default))]
user_data: T,
},
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Heading<T = ()> {
pub kind: HeadingKind,
pub content: Vec<Inline<T>>,
#[cfg_attr(feature = "ast-serde", serde(default))]
pub user_data: T,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub struct List<T = ()> {
pub kind: ListKind,
pub items: Vec<ListItem<T>>,
#[cfg_attr(feature = "ast-serde", serde(default))]
pub user_data: T,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub enum ListKind {
Ordered(ListOrderedKindOptions),
Bullet(ListBulletKind),
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ListItem<T = ()> {
pub task: Option<TaskState>,
pub blocks: Vec<Block<T>>,
#[cfg_attr(feature = "ast-serde", serde(default))]
pub user_data: T,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CodeBlock<T = ()> {
pub kind: CodeBlockKind,
pub literal: String,
#[cfg_attr(feature = "ast-serde", serde(default))]
pub user_data: T,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub struct LinkDefinition<T = ()> {
pub label: Vec<Inline<T>>,
pub destination: String,
pub title: Option<String>,
#[cfg_attr(feature = "ast-serde", serde(default))]
pub user_data: T,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Table<T = ()> {
pub rows: Vec<TableRow<T>>,
pub alignments: Vec<Alignment>,
#[cfg_attr(feature = "ast-serde", serde(default))]
pub user_data: T,
}
pub type TableRow<T> = Vec<TableCell<T>>;
pub type TableCell<T> = Vec<Inline<T>>;
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub struct FootnoteDefinition<T = ()> {
pub label: String,
pub blocks: Vec<Block<T>>,
#[cfg_attr(feature = "ast-serde", serde(default))]
pub user_data: T,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub struct GitHubAlertNode<T = ()> {
pub alert_type: GitHubAlertType,
pub blocks: Vec<Block<T>>,
#[cfg_attr(feature = "ast-serde", serde(default))]
pub user_data: T,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Inline<T = ()> {
Text {
content: String,
#[cfg_attr(feature = "ast-serde", serde(default))]
user_data: T,
},
LineBreak {
#[cfg_attr(feature = "ast-serde", serde(default))]
user_data: T,
},
Code {
content: String,
#[cfg_attr(feature = "ast-serde", serde(default))]
user_data: T,
},
Html {
content: String,
#[cfg_attr(feature = "ast-serde", serde(default))]
user_data: T,
},
Link(Link<T>),
LinkReference(LinkReference<T>),
Image(Image<T>),
Emphasis {
content: Vec<Inline<T>>,
#[cfg_attr(feature = "ast-serde", serde(default))]
user_data: T,
},
Strong {
content: Vec<Inline<T>>,
#[cfg_attr(feature = "ast-serde", serde(default))]
user_data: T,
},
Strikethrough {
content: Vec<Inline<T>>,
#[cfg_attr(feature = "ast-serde", serde(default))]
user_data: T,
},
Autolink {
url: String,
#[cfg_attr(feature = "ast-serde", serde(default))]
user_data: T,
},
FootnoteReference {
label: String,
#[cfg_attr(feature = "ast-serde", serde(default))]
user_data: T,
},
Empty {
#[cfg_attr(feature = "ast-serde", serde(default))]
user_data: T,
},
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Link<T = ()> {
pub destination: String,
pub title: Option<String>,
pub children: Vec<Inline<T>>,
#[cfg_attr(feature = "ast-serde", serde(default))]
pub user_data: T,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Image<T = ()> {
pub destination: String,
pub title: Option<String>,
pub alt: String,
#[cfg_attr(feature = "ast-serde", serde(default))]
pub user_data: T,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub struct LinkReference<T = ()> {
pub label: Vec<Inline<T>>,
pub text: Vec<Inline<T>>,
#[cfg_attr(feature = "ast-serde", serde(default))]
pub user_data: T,
}
impl<T: Default> Default for Document<T> {
fn default() -> Self {
Self {
blocks: Vec::new(),
user_data: T::default(),
}
}
}
impl<T: Default> Default for Heading<T> {
fn default() -> Self {
Self {
kind: HeadingKind::Atx(1),
content: Vec::new(),
user_data: T::default(),
}
}
}
impl<T: Default> Default for List<T> {
fn default() -> Self {
Self {
kind: ListKind::Bullet(ListBulletKind::Dash),
items: Vec::new(),
user_data: T::default(),
}
}
}
impl<T: Default> Default for Table<T> {
fn default() -> Self {
Self {
rows: Vec::new(),
alignments: Vec::new(),
user_data: T::default(),
}
}
}