feat(functions): add include file function
Diff
src/main.rs | 1 +
src/util/functions.rs | 17 +++++++++++++++++
src/util/templating.rs | 2 ++
3 files changed, 20 insertions(+)
@@ -10,6 +10,7 @@ mod data {
mod util {
pub mod templating;
pub mod filters;
pub mod functions;
pub mod journal;
}
@@ -0,0 +1,17 @@
use minijinja::{Error, ErrorKind};
fn include_file(template_dir: String, name: String) -> Result<String, Error> {
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
@@ -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<String, String> {
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()