cat_gateway/
jinja.rs

1//! `minijinja` static global variables
2
3use std::sync::LazyLock;
4
5use minijinja::{Environment, Template};
6
7use crate::db::event::signed_docs::{
8    FILTERED_COUNT_SIGNED_DOCS_TEMPLATE, FILTERED_SELECT_FULL_SIGNED_DOCS_TEMPLATE,
9    FILTERED_SELECT_SIGNED_DOCS_TEMPLATE, SELECT_SIGNED_DOCS_TEMPLATE,
10};
11
12/// Jinja template source struct.
13pub(crate) struct JinjaTemplateSource {
14    /// Jinja template name
15    pub(crate) name: &'static str,
16    /// Jinja template source
17    pub(crate) source: &'static str,
18}
19
20/// Global static `minijinja::Environment` with all preloaded templates
21#[allow(clippy::unwrap_used)]
22static JINJA_ENV: LazyLock<Environment> = LazyLock::new(|| {
23    let mut env = minijinja::Environment::new();
24
25    // Preload templates
26    env.add_template(
27        SELECT_SIGNED_DOCS_TEMPLATE.name,
28        SELECT_SIGNED_DOCS_TEMPLATE.source,
29    )
30    .unwrap();
31    env.add_template(
32        FILTERED_SELECT_SIGNED_DOCS_TEMPLATE.name,
33        FILTERED_SELECT_SIGNED_DOCS_TEMPLATE.source,
34    )
35    .unwrap();
36    env.add_template(
37        FILTERED_SELECT_FULL_SIGNED_DOCS_TEMPLATE.name,
38        FILTERED_SELECT_FULL_SIGNED_DOCS_TEMPLATE.source,
39    )
40    .unwrap();
41    env.add_template(
42        FILTERED_COUNT_SIGNED_DOCS_TEMPLATE.name,
43        FILTERED_COUNT_SIGNED_DOCS_TEMPLATE.source,
44    )
45    .unwrap();
46
47    env
48});
49
50/// Returns a template from the jinja environment, returns error if it does not exit.
51pub(crate) fn get_template(temp: &JinjaTemplateSource) -> anyhow::Result<Template<'static, '_>> {
52    let template = JINJA_ENV.get_template(temp.name)?;
53    Ok(template)
54}