Better error handling

This commit is contained in:
viridian 2024-04-20 12:17:53 +02:00
parent ae3c4a9a6f
commit ea705cf624
Signed by: viridian
GPG key ID: DCD4DF95CE23FE8C
2 changed files with 11 additions and 11 deletions

View file

@ -12,9 +12,9 @@ pub fn read_src_files(src_dir: &str) -> Vec<SrcMD> {
let mut files: Vec<SrcMD> = Vec::new(); let mut files: Vec<SrcMD> = Vec::new();
for file in read_dir(src_dir).expect("Cant read src dir") { for file in read_dir(src_dir).expect("Cant read src dir") {
let file = file.unwrap(); let file = file.unwrap();
let kv = get_kv(read_to_string(file.path()).unwrap()).0; let frontmatter = get_frontmatter(read_to_string(file.path()).unwrap()).0;
let title = kv.get("title").unwrap(); let title = frontmatter.get("title").expect("Error getting field: title from frontmatter");
let date = kv.get("date").unwrap(); let date = frontmatter.get("date").expect("Error getting field: date from frontmatter");
files.push(SrcMD::new( files.push(SrcMD::new(
file.path(), file.path(),
title.to_string(), 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}")); .unwrap_or_else(|_| panic!("Error writing {file_name}"));
} }
#[derive(Constructor)] #[derive(Constructor,Debug)]
pub struct SrcMD { pub struct SrcMD {
pub path: PathBuf, pub path: PathBuf,
pub title: String, pub title: String,
@ -40,13 +40,13 @@ pub struct SrcMD {
pub file_name: OsString, 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 markdown = markdown.clone();
let mut tera = Tera::new(&format!("{template_dir}/*")).unwrap(); let mut tera = Tera::new(&format!("{template_dir}/*")).unwrap();
tera.autoescape_on(vec![]); 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( let html_markdown = to_html_with_options(
&markdown, &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 context = Context::from_serialize(&key_value).unwrap();
let templated_html = tera let templated_html = tera
.render(key_value.get("template").unwrap(), &context) .render(key_value.get("template")?, &context)
.unwrap(); .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 re_key_value = Regex::new(r"(?ms)---(.*)---(?:\n)").unwrap();
let key_value_string = re_key_value let key_value_string = re_key_value
.find(markdown.as_str()) .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 let content_markdown = re_key_value
.replace(markdown.clone().as_str(), "") .replace(markdown.clone().as_str(), "")

View file

@ -27,7 +27,7 @@ fn generate() {
let mut markdown = read_to_string(file.path).expect("File does not exist"); let mut markdown = read_to_string(file.path).expect("File does not exist");
markdown = emoji::emoji_pass(&markdown, &config.emoji_config); 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( write_to_fs(
html, html,
&config.output_dir, &config.output_dir,