use super::stamp;
use super::EmbeddedSkill;
const FRONTMATTER_START: &str = "---\n";
const FRONTMATTER_END: &str = "\n---\n";
pub fn skill_file(skill: &EmbeddedSkill) -> String {
let header = stamp::header(skill.content);
if let Some(rest) = skill.content.strip_prefix(FRONTMATTER_START) {
if let Some(end) = rest.find(FRONTMATTER_END) {
let insertion = FRONTMATTER_START.len() + end + FRONTMATTER_END.len();
return format!(
"{}{}\n{}",
&skill.content[..insertion],
header,
&skill.content[insertion..]
);
}
}
format!("{header}\n{}", skill.content)
}
pub fn frontmatter_field<'a>(content: &'a str, field: &str) -> Option<&'a str> {
let mut lines = content.lines();
if lines.next()? != "---" {
return None;
}
let prefix = format!("{field}:");
for line in lines {
if line == "---" {
return None;
}
if let Some(value) = line.strip_prefix(&prefix) {
return Some(value.trim());
}
}
None
}