diff --git a/src/lib.rs b/src/lib.rs index db2af21..3db1ab4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -12,9 +12,9 @@ pub fn read_src_files(src_dir: &str) -> Vec { let mut files: Vec = Vec::new(); for file in read_dir(src_dir).expect("Cant read src dir") { let file = file.unwrap(); - let kv = get_kv(read_to_string(file.path()).unwrap()).0; - let title = kv.get("title").unwrap(); - let date = kv.get("date").unwrap(); + let frontmatter = get_frontmatter(read_to_string(file.path()).unwrap()).0; + let title = frontmatter.get("title").expect("Error getting field: title from frontmatter"); + let date = frontmatter.get("date").expect("Error getting field: date from frontmatter"); files.push(SrcMD::new( file.path(), title.to_string(), @@ -32,7 +32,7 @@ pub fn write_to_fs(html: String, output_dir: &String, file_name: &String) { .unwrap_or_else(|_| panic!("Error writing {file_name}")); } -#[derive(Constructor)] +#[derive(Constructor,Debug)] pub struct SrcMD { pub path: PathBuf, pub title: String, @@ -40,13 +40,13 @@ pub struct SrcMD { pub file_name: OsString, } -pub fn generate_blog_entry(markdown: String, template_dir: &String) -> (String, String) { +pub fn generate_blog_entry(markdown: String, template_dir: &String) -> Option<(String, String)> { let markdown = markdown.clone(); let mut tera = Tera::new(&format!("{template_dir}/*")).unwrap(); tera.autoescape_on(vec![]); - let (mut key_value, markdown) = get_kv(markdown); + let (mut key_value, markdown) = get_frontmatter(markdown); let html_markdown = to_html_with_options( &markdown, @@ -66,17 +66,17 @@ pub fn generate_blog_entry(markdown: String, template_dir: &String) -> (String, let context = Context::from_serialize(&key_value).unwrap(); let templated_html = tera - .render(key_value.get("template").unwrap(), &context) + .render(key_value.get("template")?, &context) .unwrap(); - (templated_html, html_markdown) + Some((templated_html, html_markdown)) } -pub fn get_kv(markdown: String) -> (HashMap, String) { +pub fn get_frontmatter(markdown: String) -> (HashMap, String) { let re_key_value = Regex::new(r"(?ms)---(.*)---(?:\n)").unwrap(); let key_value_string = re_key_value .find(markdown.as_str()) - .expect("Can't find key value map in markdown"); + .expect("Can't find frontmatter in markdown"); let content_markdown = re_key_value .replace(markdown.clone().as_str(), "") diff --git a/src/main.rs b/src/main.rs index 8317389..eaf5f0c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -27,7 +27,7 @@ fn generate() { let mut markdown = read_to_string(file.path).expect("File does not exist"); markdown = emoji::emoji_pass(&markdown, &config.emoji_config); - let (html, index_content) = generate_blog_entry(markdown, &config.templates_dir); + let (html, index_content) = generate_blog_entry(markdown, &config.templates_dir).expect(&format!("Error generating entry {}",&file.title)); write_to_fs( html, &config.output_dir,