From 1927c8749635120d752b1a118d59dd0bbe43fa3e Mon Sep 17 00:00:00 2001 From: berrysweet Date: Fri, 7 Jul 2023 22:27:40 +0200 Subject: [PATCH] feat(functions): add include file function --- src/main.rs | 1 + src/util/functions.rs | 17 +++++++++++++++++ src/util/templating.rs | 2 ++ 3 files changed, 20 insertions(+) create mode 100644 src/util/functions.rs diff --git a/src/main.rs b/src/main.rs index a80aaa8..277b089 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,6 +10,7 @@ mod data { mod util { pub mod templating; pub mod filters; + pub mod functions; pub mod journal; } diff --git a/src/util/functions.rs b/src/util/functions.rs new file mode 100644 index 0000000..7a93723 --- /dev/null +++ b/src/util/functions.rs @@ -0,0 +1,17 @@ +use minijinja::{Error, ErrorKind}; + +// https://docs.rs/minijinja/latest/minijinja/functions/index.html +fn include_file(template_dir: String, name: String) -> Result { + let file_path = std::path::PathBuf::from(&template_dir); + let file_path = file_path.join(name); + + std::fs::read_to_string(&file_path) + .map_err(|e| Error::new( + ErrorKind::InvalidOperation, + "cannot load file" + ).with_source(e)) +} + +pub fn register_functions(env: &mut minijinja::Environment<'_>) { + env.add_function("include_file", include_file) +} \ No newline at end of file diff --git a/src/util/templating.rs b/src/util/templating.rs index d17185e..18c1a99 100644 --- a/src/util/templating.rs +++ b/src/util/templating.rs @@ -9,6 +9,7 @@ use crate::data::formats; use crate::util::journal; use super::filters; +use super::functions; pub fn get_templates(template: String) -> HashMap { let template_path: PathBuf = PathBuf::from_str(&template).unwrap(); @@ -34,6 +35,7 @@ pub fn render_html(config: formats::RenderConfig, journal: journal::Journal, tem } filters::register_filters(env); + functions::register_functions(env); let tmpl: minijinja::Template<'_, '_> = env.get_template(&config.template_index).unwrap(); tmpl.render(context!(config => config, journal => journal)).unwrap_or_default() -- libgit2 1.7.2