Skip to main content

oseda_cli/templates/
templater.rs

1use std::collections::HashMap;
2
3use crate::templates::{
4    html::HtmlRenderer, md::MarkdownRenderer, CLITemplate, Renderer, RendererError,
5};
6
7pub struct Templater {
8    template_type: CLITemplate,
9    params: HashMap<String, String>,
10}
11
12impl Templater {
13    pub fn new(template_type: CLITemplate, params: HashMap<String, String>) -> Self {
14        Self {
15            template_type,
16            params,
17        }
18    }
19
20    pub fn update_template(&self, text: &str) -> String {
21        let mut update_me = String::from(text);
22        self.params.iter().for_each(|(key, value)| {
23            // { is escaped with {, so to replace {{ key }} you need {{{{ {key} }}}}
24            update_me = update_me.replace(&format!("{{{{ {key} }}}}"), value);
25        });
26
27        update_me
28    }
29}
30
31impl Renderer for Templater {
32    fn write_to_fs(&self, target_dir: &str) -> Result<(), RendererError> {
33        match self.template_type {
34            CLITemplate::HTML => {
35                let renderer = HtmlRenderer {
36                    params: self.params.clone(),
37                };
38                renderer.write_to_fs(target_dir)
39            }
40            CLITemplate::Markdown => {
41                let renderer = MarkdownRenderer {
42                    params: self.params.clone(),
43                };
44                renderer.write_to_fs(target_dir)
45            }
46        }
47    }
48}