From 3720c7b1cc4fff27f217981901bdc3b533bea530 Mon Sep 17 00:00:00 2001 From: viridian Date: Sun, 31 Mar 2024 22:10:07 +0200 Subject: [PATCH] Refractor --- src/main.rs | 83 ++++++++++++++++++++++++++++------------------------- 1 file changed, 44 insertions(+), 39 deletions(-) diff --git a/src/main.rs b/src/main.rs index 86ce880..dc566ca 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,50 +2,25 @@ use markdown::{to_html_with_options, CompileOptions, Options}; use regex::Regex; use std::collections::HashMap; use std::{env, fs::read_to_string}; -use tera::{Tera, Context}; +use tera::{Context, Tera}; fn main() { let args: Vec = env::args().collect(); if args.len() < 2 { panic!("Please provide md file"); } - let mut markdown = read_to_string(args.get(1).unwrap()).expect("File does not exist"); + let markdown = read_to_string(args.get(1).unwrap()).expect("File does not exist"); + + println!("{}", generate_blog_entry(markdown)); +} + +fn generate_blog_entry(markdown: String) -> String { + let markdown = markdown.clone(); let mut tera = Tera::new("templates/*").unwrap(); tera.autoescape_on(vec![]); - let re_key_value = Regex::new(r"(?ms)---(.*)---(?:\n)").unwrap(); - - let binding_markdown = markdown.clone(); - - let key_value_string = re_key_value - .find(binding_markdown.as_str()) - .expect("Can't find key value map in markdown"); - - markdown = re_key_value - .replace(markdown.clone().as_str(), "") - .to_string(); - - let mut key_value: HashMap<&str, &str> = HashMap::new(); - - for line in key_value_string.as_str().lines() { - if line == "---" { - continue; - } - key_value.insert( - line.split(":") - .collect::>() - .get(0) - .unwrap() - .trim(), - line.split(":") - .collect::>() - .get(1) - .unwrap() - .trim(), - ); - } - + let (mut key_value, markdown) = get_kv(markdown); let html_markdown = to_html_with_options( &markdown, @@ -60,15 +35,45 @@ fn main() { ) .unwrap(); - key_value.insert("blog_content", &html_markdown); + key_value.insert("blog_content".to_string(), html_markdown); - let context = Context::from_serialize(key_value).unwrap(); + let context = Context::from_serialize(&key_value).unwrap(); - let output = tera.render("blog.html", &context).unwrap(); - - println!("{output}"); + tera.render(key_value.get("template").unwrap(), &context) + .unwrap() } +fn get_kv(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"); + let content_markdown = re_key_value + .replace(markdown.clone().as_str(), "") + .to_string(); + let mut key_value: HashMap = HashMap::new(); + + for line in key_value_string.as_str().lines() { + if line == "---" { + continue; + } + key_value.insert( + line.split(':') + .collect::>().first() + .unwrap() + .trim() + .to_string(), + line.split(':') + .collect::>() + .get(1) + .unwrap() + .trim() + .to_string(), + ); + } + + (key_value, content_markdown) +}