An ATProtocol powered blogging engine.
at main 2.0 kB view raw
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}