Skip to main content

oseda_cli/templates/
mod.rs

1pub mod templater;
2
3pub mod html;
4pub mod md;
5
6use std::collections::HashMap;
7
8use serde::{Deserialize, Serialize};
9use strum_macros::{Display, EnumIter, EnumString};
10
11#[derive(Debug, thiserror::Error)]
12pub enum RendererError {
13    #[error("I/O error while rendering template: {0}")]
14    Io(#[from] std::io::Error),
15
16    #[error("Could not render template: {0}")]
17    CouldNotWriteTemplate(String),
18
19    #[error("Unknown error while rendering template")]
20    Unknown,
21}
22
23pub trait Renderer {
24    fn write_to_fs(&self, target_dir: &str) -> Result<(), RendererError>;
25}
26
27pub fn render_template(text: &str, params: &HashMap<String, String>) -> String {
28    let mut update_me = String::from(text);
29
30    // { is escaped with {{, repeat for both halves
31    params.iter().for_each(|(key, value)| {
32        update_me = update_me.replace(&format!("{{{{ {key} }}}}"), value);
33    });
34    update_me
35}
36
37#[derive(Serialize, Deserialize, Debug, Clone, Copy, Display, EnumIter, EnumString)]
38#[strum(ascii_case_insensitive)]
39pub enum CLITemplate {
40    HTML,
41    Markdown,
42}