#[derive(Debug, Clone, Copy)]
pub struct Frontmatter<'a> {
pub yaml: &'a str,
pub body: &'a str,
}
pub fn split_frontmatter(content: &str) -> Option<Frontmatter<'_>> {
let content = content.strip_prefix('\u{feff}').unwrap_or(content);
let mut lines = content.split_inclusive('\n');
let opening = lines.next()?;
if opening.trim_end() != "---" {
return None;
}
let yaml_start = opening.len();
let mut offset = yaml_start;
for line in lines {
if line.trim_end() == "---" {
return Some(Frontmatter {
yaml: &content[yaml_start..offset],
body: &content[offset + line.len()..],
});
}
offset += line.len();
}
None
}
pub fn strip_frontmatter(content: &str) -> String {
split_frontmatter(content).map_or_else(|| content.to_owned(), |f| f.body.trim().to_owned())
}