chiark / gitweb /
tera: Make nwtemplates use tera_standalone
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 13 Jun 2021 14:23:34 +0000 (15:23 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 13 Jun 2021 14:23:34 +0000 (15:23 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/nwtemplates.rs

index 29680a75f44345c6cebaa2254e59ca2bc300969d..42cf490bce2da2a102ab1b31d3a6e217fa6f04d4 100644 (file)
@@ -10,7 +10,7 @@ use parking_lot::{const_rwlock, RwLock, RwLockReadGuard};
 static STATE: RwLock<Option<State>> = const_rwlock(None);
 
 struct State {
-  tera: tera::Tera,
+  tera: tera_standalone::Tera,
 }
 
 #[throws(StartupError)]
@@ -20,7 +20,7 @@ pub fn init() {
   let config = config();
   let nwtemplate_dir = &config.nwtemplate_dir;
   let glob = format!("{}/*.tera", nwtemplate_dir);
-  let tera = tera::Tera::new(&glob)
+  let tera = tera_standalone::Tera::new(&glob)
     .map_err(|e| anyhow!("{}", e))
     .context("load tamplates")
     .with_context(|| nwtemplate_dir.to_string())?;
@@ -31,12 +31,19 @@ pub fn init() {
 }
 
 #[throws(anyhow::Error)]
-pub fn render<D: Serialize>(template_name: &str, data: &D) -> String {
-  fn get_tera() -> MappedRwLockReadGuard<'static, tera::Tera> {
+pub fn render<D>(template_name: &str, data: &D) -> String
+where D: Serialize + Debug
+{
+  fn get_tera() -> MappedRwLockReadGuard<'static, tera_standalone::Tera> {
     let g = STATE.read();
     RwLockReadGuard::map(g, |g| &g.as_ref().unwrap().tera)
   }
-  get_tera().render(template_name, data).map_err(|e| {
+  let context = tera_standalone::Context::from_serialize(data)
+    .with_context(
+      || format!("failed make context from serializable {:?}", data)
+    )
+    .map_err(IE::from)?;
+  get_tera().render(template_name, &context).map_err(|e| {
     error!("template render error: {:?}", &e);
     anyhow!(e.to_string())
   })?