use ansi_term::Colour;
use pulldown_cmark::CowStr;
#[derive(Debug, PartialEq)]
pub struct LinkReferenceDefinition<'a> {
pub(crate) index: u16,
pub(crate) target: CowStr<'a>,
pub(crate) title: CowStr<'a>,
pub(crate) colour: Colour,
}
#[derive(Debug)]
pub struct StateData<'a> {
pub(super) pending_link_definitions: Vec<LinkReferenceDefinition<'a>>,
pub(super) next_link: u16,
}
impl<'a> StateData<'a> {
pub(crate) fn add_link(
mut self,
target: CowStr<'a>,
title: CowStr<'a>,
colour: Colour,
) -> (Self, u16) {
let index = self.next_link;
self.next_link += 1;
self.pending_link_definitions.push(LinkReferenceDefinition {
index,
target,
title,
colour,
});
(self, index)
}
pub(crate) fn take_links(self) -> (Self, Vec<LinkReferenceDefinition<'a>>) {
let links = self.pending_link_definitions;
(
StateData {
pending_link_definitions: Vec::new(),
..self
},
links,
)
}
}
impl<'a> Default for StateData<'a> {
fn default() -> Self {
StateData {
pending_link_definitions: Vec::new(),
next_link: 1,
}
}
}