1use compact_str::CompactString;
6use serde::Deserialize;
7use wcore::utils::split_yaml_frontmatter;
8
9#[derive(Debug, Clone)]
11pub struct CronEntry {
12 pub name: CompactString,
14 pub schedule: String,
16 pub agent: CompactString,
18 pub message: String,
20}
21
22#[derive(Deserialize)]
24struct CronFrontmatter {
25 name: String,
26 schedule: String,
27 agent: String,
28}
29
30pub fn parse_cron_md(content: &str) -> anyhow::Result<CronEntry> {
35 let (frontmatter, body) = split_yaml_frontmatter(content)?;
36 let fm: CronFrontmatter = serde_yaml::from_str(frontmatter)?;
37
38 Ok(CronEntry {
39 name: CompactString::from(fm.name),
40 schedule: fm.schedule,
41 agent: CompactString::from(fm.agent),
42 message: body.trim().to_owned(),
43 })
44}