From ea705cf6244e616cf6459f0105fd7c61047679e8 Mon Sep 17 00:00:00 2001
From: viridian <viridian-star@tutanota.com>
Date: Sat, 20 Apr 2024 12:17:53 +0200
Subject: [PATCH] Better error handling

---
 src/lib.rs  | 20 ++++++++++----------
 src/main.rs |  2 +-
 2 files changed, 11 insertions(+), 11 deletions(-)

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<SrcMD> {
     let mut files: Vec<SrcMD> = 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, String>, String) {
+pub fn get_frontmatter(markdown: String) -> (HashMap<String, String>, 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,