use std::{borrow::Cow, fmt}; use paige::Frontmatter; #[derive(Clone, Debug)] pub struct PageFrontmatter<'r> { description: Option>, } impl<'r> PageFrontmatter<'r> { pub fn description(&self) -> Option<&Cow<'r, str>> { self.description.as_ref() } pub fn set_description>>(&mut self, description: D) { self.description = Some(description.into()); } pub fn has_any(&self) -> bool { self.description.is_some() } pub fn from_frontmatter(&mut self, fm: &'r Frontmatter<'r>) { self.description = fm.get("description").map(|s| Cow::Borrowed(s)); } } impl<'r> Default for PageFrontmatter<'r> { fn default() -> Self { Self { description: None } } } impl<'r> fmt::Display for PageFrontmatter<'r> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { if !self.has_any() { return Ok(()); } macro_rules! write_field { ($field:ident) => { writeln!(f, "{}={}", stringify!($field), $field)?; }; } writeln!(f, "---")?; if let Some(description) = self.description.as_ref() { write_field!(description); } write!(f, "---") } }