diff --git a/front_matter/src/lib.rs b/front_matter/src/lib.rs index cdf0f9df1..9a4798efe 100644 --- a/front_matter/src/lib.rs +++ b/front_matter/src/lib.rs @@ -109,6 +109,30 @@ pub fn normalize( ); } + // validate format of 'path' + { + let mut path = front_matter.path.as_str(); + let mut rq_fmt = "YYYY/MM/DD/slug-of-your-choice"; + if inside_rust { + rq_fmt = "inside-rust/YYYY/MM/DD/slug-of-your-choice"; + if !path.starts_with("inside-rust/") { + bail!("the path of inside-rust posts must start with 'inside-rust/'"); + } + path = path.trim_start_matches("inside-rust/"); + } + let components = path.split('/').collect::>(); + if components.len() != 4 + || components[0].len() != 4 + || components[0].parse::().is_err() + || components[1].len() != 2 + || components[1].parse::().is_err() + || components[2].len() != 2 + || components[2].parse::().is_err() + { + bail!("invalid 'path' key in front matter, required format: {rq_fmt}"); + } + } + if front_matter.extra.team.is_some() ^ front_matter.extra.team_url.is_some() { bail!("extra.team and extra.team_url must always come in a pair"); }