/* * Copyright (C) 2022 Aravinth Manivannan * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ use lazy_static::lazy_static; use rust_embed::RustEmbed; use tera::*; pub const PAYLOAD_KEY: &str = "payload"; lazy_static! { pub static ref TEMPLATES: Tera = { let mut tera = Tera::default(); for template in [crate::nginx::CREATE_SITE, crate::nginx::CREATE_SITE_FRAGMENT].iter() { template.register(&mut tera).expect(template.name); } // tera.autoescape_on(vec![".html", ".sql"]); tera }; } #[derive(RustEmbed)] #[folder = "templates/"] pub struct Templates; impl Templates { pub fn get_template(t: &TemplateFile) -> Option { match Self::get(t.path) { Some(file) => Some(String::from_utf8_lossy(&file.data).into_owned()), None => None, } } } pub fn context() -> Context { let mut ctx = Context::new(); ctx } pub struct TemplateFile { pub name: &'static str, pub path: &'static str, } impl TemplateFile { pub const fn new(name: &'static str, path: &'static str) -> Self { Self { name, path } } pub fn register(&self, t: &mut Tera) -> std::result::Result<(), tera::Error> { t.add_raw_template(self.name, &Templates::get_template(self).expect(self.name)) } #[cfg(test)] #[allow(dead_code)] pub fn register_from_file(&self, t: &mut Tera) -> std::result::Result<(), tera::Error> { use std::path::Path; t.add_template_file(Path::new("templates/").join(self.path), Some(self.name)) } }