use crate::error;
use crate::model::block::{BlockContent, Label};
use crate::model::inline::{HasInlineContent, InlineContent};
use crate::model::{block::HasLabel, HasInnerContent};
#[cfg(feature = "fmt_json")]
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug)]
#[cfg_attr(feature = "fmt_json", derive(Serialize, Deserialize))]
pub struct DefinitionList {
#[cfg_attr(feature = "fmt_json", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "fmt_json", serde(default))]
label: Option<Label>,
inner: Vec<Definition>,
}
#[derive(Clone, Debug)]
#[cfg_attr(feature = "fmt_json", derive(Serialize, Deserialize))]
pub struct Definition {
#[cfg_attr(feature = "fmt_json", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "fmt_json", serde(default))]
label: Option<Label>,
term: String,
text: DefinitionPart,
}
#[derive(Clone, Debug)]
#[cfg_attr(feature = "fmt_json", derive(Serialize, Deserialize))]
pub struct DefinitionPart {
inner: Vec<InlineContent>,
}
impl Default for DefinitionList {
fn default() -> Self {
Self {
label: None,
inner: Default::default(),
}
}
}
label_impl!(DefinitionList);
block_impls!(DefinitionList);
impl DefinitionList {
pub fn has_inner(&self) -> bool {
!self.inner.is_empty()
}
pub fn inner(&self) -> &Vec<Definition> {
&self.inner
}
pub fn add_definition(&mut self, item: Definition) -> &mut Self {
self.inner.push(item);
self
}
pub fn add_definition_from(&mut self, term: &str, text: DefinitionPart) -> &mut Self {
self.add_definition(Definition::new(term, text))
}
}
label_impl!(Definition);
impl Definition {
pub fn new(term: &str, text: DefinitionPart) -> Self {
Self {
label: None,
term: term.to_string(),
text,
}
}
pub fn term(&self) -> &String {
&self.term
}
pub fn text(&self) -> &DefinitionPart {
&self.text
}
}
impl Default for DefinitionPart {
fn default() -> Self {
Self {
inner: Default::default(),
}
}
}
has_inline_impls!(DefinitionPart);