codegenr_lib/helpers/
regex.rs1use crate::helpers::handlebars_ext::HandlebarsExt;
2use crate::helpers::string_ext::StringExt;
3use handlebars::{HelperDef, RenderError};
4use serde_json::Value;
5
6pub const REGEX_EXTRACT_HELPER: &str = "regex_extract";
7pub const REGEX_TRANSFORM_HELPER: &str = "regex_transform";
8
9pub struct RegexExtractHelper;
27
28impl HelperDef for RegexExtractHelper {
29 fn call_inner<'reg: 'rc, 'rc>(
30 &self,
31 h: &handlebars::Helper<'reg, 'rc>,
32 _: &'reg handlebars::Handlebars<'reg>,
33 _: &'rc handlebars::Context,
34 _: &mut handlebars::RenderContext<'reg, 'rc>,
35 ) -> Result<handlebars::ScopedJson<'reg, 'rc>, handlebars::RenderError> {
36 let arg = h.get_param_as_str_or_fail(0, REGEX_EXTRACT_HELPER)?;
37 let regex_pattern = h.get_param_as_str_or_fail(1, REGEX_EXTRACT_HELPER)?;
38 let regex_replacer = h.get_param_as_str_or_fail(2, REGEX_EXTRACT_HELPER)?;
39 let separator = h.get_param_as_str(3);
40 let result = arg
41 .regex_extract(regex_pattern, Some(regex_replacer), separator)
42 .map_err(|e| RenderError::new(format!("{} error: `{}`.", REGEX_EXTRACT_HELPER, e)))?;
43 Ok(handlebars::ScopedJson::Derived(Value::String(result)))
44 }
45}
46
47pub struct RegexTransformHelper;
65
66impl HelperDef for RegexTransformHelper {
67 fn call_inner<'reg: 'rc, 'rc>(
68 &self,
69 h: &handlebars::Helper<'reg, 'rc>,
70 _: &'reg handlebars::Handlebars<'reg>,
71 _: &'rc handlebars::Context,
72 _: &mut handlebars::RenderContext<'reg, 'rc>,
73 ) -> Result<handlebars::ScopedJson<'reg, 'rc>, handlebars::RenderError> {
74 let arg = h.get_param_as_str_or_fail(0, REGEX_TRANSFORM_HELPER)?;
75 let regex_pattern = h.get_param_as_str_or_fail(1, REGEX_TRANSFORM_HELPER)?;
76 let regex_replacer = h.get_param_as_str_or_fail(2, REGEX_TRANSFORM_HELPER)?;
77 let result = arg
78 .regex_transform(regex_pattern, regex_replacer)
79 .map_err(|e| RenderError::new(format!("{} error: `{}`.", REGEX_TRANSFORM_HELPER, e)))?;
80 Ok(handlebars::ScopedJson::Derived(Value::String(result)))
81 }
82}