codegenr_lib/helpers/
params.rs1use super::handlebars_ext::HandlebarsExt;
2use handlebars::{HelperDef, RenderError, ScopedJson};
3use serde_json::Value;
4use std::collections::HashMap;
5
6pub const GLOBAL_PARAMETERS_HELPER: &str = "global_parameter";
7
8pub struct GlobalParameterHelper {
34 values: HashMap<String, Value>,
35}
36
37impl GlobalParameterHelper {
38 pub fn new(values: HashMap<String, Value>) -> Self {
39 Self { values }
40 }
41}
42
43impl HelperDef for GlobalParameterHelper {
44 fn call_inner<'reg: 'rc, 'rc>(
45 &self,
46 h: &handlebars::Helper<'reg, 'rc>,
47 _: &'reg handlebars::Handlebars<'reg>,
48 _: &'rc handlebars::Context,
49 _: &mut handlebars::RenderContext<'reg, 'rc>,
50 ) -> Result<ScopedJson<'reg, 'rc>, RenderError> {
51 h.ensure_arguments_count_min(1, GLOBAL_PARAMETERS_HELPER)?;
52 h.ensure_arguments_count_max(2, GLOBAL_PARAMETERS_HELPER)?;
53 let key = h.get_param_as_str_or_fail(0, GLOBAL_PARAMETERS_HELPER)?.to_string();
54
55 match self.values.get(&key).cloned() {
56 Some(v) => Ok(ScopedJson::Derived(v)),
57 None => {
58 let strict_mode = h.get_param_as_bool(1).unwrap_or(false);
59 if strict_mode {
60 Err(RenderError::new(format!(
61 "`{}`, error: Cannot find a value for key `{}`",
62 GLOBAL_PARAMETERS_HELPER, key
63 )))
64 } else {
65 Ok(ScopedJson::Derived(Default::default()))
66 }
67 }
68 }
69 }
70}