pub mod convert;
pub mod generic;
pub(crate) mod index;
pub mod map_data_visitor;
mod github_alerts;
pub use github_alerts::{GitHubAlert, GitHubAlertType};
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Document {
pub blocks: Vec<Block>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Block {
Paragraph(Vec<Inline>),
Heading(Heading),
ThematicBreak,
BlockQuote(Vec<Block>),
List(List),
CodeBlock(CodeBlock),
HtmlBlock(String),
Definition(LinkDefinition),
Table(Table),
FootnoteDefinition(FootnoteDefinition),
GitHubAlert(GitHubAlert),
Empty,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Heading {
pub kind: HeadingKind,
pub content: Vec<Inline>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub enum HeadingKind {
Atx(u8),
Setext(SetextHeading),
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub enum SetextHeading {
Level1,
Level2,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub struct List {
pub kind: ListKind,
pub items: Vec<ListItem>,
}
#[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 ListOrderedKindOptions {
pub start: u64,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub enum ListBulletKind {
Dash,
Star,
Plus,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ListItem {
pub task: Option<TaskState>,
pub blocks: Vec<Block>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub enum TaskState {
Incomplete,
Complete,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CodeBlock {
pub kind: CodeBlockKind,
pub literal: String,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub enum CodeBlockKind {
Indented,
Fenced {
info: Option<String>,
},
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub struct LinkDefinition {
pub label: Vec<Inline>,
pub destination: String,
pub title: Option<String>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Table {
pub rows: Vec<TableRow>,
pub alignments: Vec<Alignment>,
}
pub type TableRow = Vec<TableCell>;
pub type TableCell = Vec<Inline>;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Alignment {
None,
#[default]
Left,
Center,
Right,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub struct FootnoteDefinition {
pub label: String,
pub blocks: Vec<Block>,
}
#[derive(Debug, Clone, PartialEq, Hash, Eq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Inline {
Text(String),
LineBreak,
Code(String),
Html(String),
Link(Link),
LinkReference(LinkReference),
Image(Image),
Emphasis(Vec<Inline>),
Strong(Vec<Inline>),
Strikethrough(Vec<Inline>),
Autolink(String),
FootnoteReference(String),
Empty,
}
#[derive(Debug, Clone, PartialEq, Hash, Eq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Link {
pub destination: String,
pub title: Option<String>,
pub children: Vec<Inline>,
}
#[derive(Debug, Clone, PartialEq, Hash, Eq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Image {
pub destination: String,
pub title: Option<String>,
pub alt: String,
}
#[derive(Debug, Clone, PartialEq, Hash, Eq)]
#[cfg_attr(feature = "ast-serde", derive(serde::Serialize, serde::Deserialize))]
pub struct LinkReference {
pub label: Vec<Inline>,
pub text: Vec<Inline>,
}
pub type SimpleDocument = generic::Document<()>;
pub type SimpleBlock = generic::Block<()>;
pub type SimpleInline = generic::Inline<()>;
pub type SimpleHeading = generic::Heading<()>;
pub type SimpleList = generic::List<()>;
pub type SimpleListItem = generic::ListItem<()>;
pub type SimpleCodeBlock = generic::CodeBlock<()>;
pub type SimpleLinkDefinition = generic::LinkDefinition<()>;
pub type SimpleTable = generic::Table<()>;
pub type SimpleTableRow = generic::TableRow<()>;
pub type SimpleTableCell = generic::TableCell<()>;
pub type SimpleFootnoteDefinition = generic::FootnoteDefinition<()>;
pub type SimpleGitHubAlert = generic::GitHubAlertNode<()>;
pub type SimpleLink = generic::Link<()>;
pub type SimpleImage = generic::Image<()>;
pub type SimpleLinkReference = generic::LinkReference<()>;