use crate::span::Span;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct SegmentOffset {
pub text_offset: usize,
pub source_offset: usize,
}
impl SegmentOffset {
pub fn new(text_offset: usize, source_offset: usize) -> SegmentOffset {
SegmentOffset {
text_offset,
source_offset,
}
}
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct Heading {
pub level: usize,
pub text: String,
pub span: Span,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct Paragraph {
pub text: String,
pub span: Span,
pub segment_map: Vec<SegmentOffset>,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct ListItem {
pub text: String,
pub span: Span,
pub segment_map: Vec<SegmentOffset>,
pub ordered: bool,
pub marker_span: Span,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct Blockquote {
pub text: String,
pub span: Span,
pub segment_map: Vec<SegmentOffset>,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct Row {
pub cells: Vec<String>,
pub cell_spans: Vec<Span>,
pub span: Span,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct Table {
pub span: Span,
pub header: Row,
pub rows: Vec<Row>,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct Fence {
pub span: Span,
pub info: String,
pub body: String,
pub body_span: Span,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct ThematicBreak {
pub span: Span,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum Block {
Heading(Heading),
Paragraph(Paragraph),
ListItem(ListItem),
Blockquote(Blockquote),
Table(Table),
Fence(Fence),
ThematicBreak(ThematicBreak),
}
impl Block {
pub fn span(&self) -> Span {
match self {
Block::Heading(h) => h.span,
Block::Paragraph(p) => p.span,
Block::ListItem(l) => l.span,
Block::Blockquote(b) => b.span,
Block::Table(t) => t.span,
Block::Fence(f) => f.span,
Block::ThematicBreak(t) => t.span,
}
}
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum TableOrFence {
Table(Table),
Fence(Fence),
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct Example {
pub scope_stack: Vec<String>,
pub span: Span,
pub body: Vec<Block>,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct VarDoc {
pub path: String,
pub source: String,
pub examples: Vec<Example>,
pub orphan_attachments: Vec<TableOrFence>,
}