An ATProtocol powered blogging engine.
1//! Template engine configuration for embedded and reloadable templates.
2//!
3//! Provides template engines with embedded assets (production) or
4//! filesystem auto-reloading (development). Feature-flag controlled.
5
6#[cfg(feature = "reload")]
7use minijinja_autoreload::AutoReloader;
8
9#[cfg(feature = "embed")]
10use minijinja::Environment;
11
12#[cfg(feature = "reload")]
13/// Build template environment with auto-reloading for development
14pub fn build_env(external_base: String) -> AutoReloader {
15 reload_env::build_env(external_base)
16}
17
18#[cfg(feature = "embed")]
19/// Build template environment with embedded templates for production
20pub fn build_env(external_base: String, version: String) -> Environment<'static> {
21 embed_env::build_env(external_base, version)
22}
23
24#[cfg(feature = "reload")]
25mod reload_env {
26 use std::path::PathBuf;
27
28 use minijinja::{Environment, path_loader};
29 use minijinja_autoreload::AutoReloader;
30
31 pub fn build_env(external_base: String) -> AutoReloader {
32 let inner_external_base = external_base.clone();
33 AutoReloader::new(move |notifier| {
34 let template_path = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("templates");
35 let mut env = Environment::new();
36 env.set_trim_blocks(true);
37 env.set_lstrip_blocks(true);
38 env.add_global("external_base", inner_external_base.as_str());
39 env.set_loader(path_loader(&template_path));
40 notifier.set_fast_reload(true);
41 notifier.watch_path(&template_path, true);
42 Ok(env)
43 })
44 }
45}
46
47#[cfg(feature = "embed")]
48mod embed_env {
49 use minijinja::Environment;
50
51 pub fn build_env(external_base: String, version: String) -> Environment<'static> {
52 let mut env = Environment::new();
53 env.set_trim_blocks(true);
54 env.set_lstrip_blocks(true);
55 env.add_global("external_base", external_base);
56 env.add_global("version", version.clone());
57 minijinja_embed::load_templates!(&mut env);
58 env
59 }
60}