codegenr_lib/helpers/
mod.rs1use handlebars::Handlebars;
2use serde_json::Value;
3use std::collections::HashMap;
4use thiserror::Error;
5
6pub mod handlebars_ext;
7pub mod string_ext;
8
9mod cases;
10mod debug;
11mod distinct;
12mod empty;
13mod equals;
14mod getset;
15mod json;
16mod math;
17mod openapi3;
18mod params;
19mod regex;
20mod strings;
21
22pub use {
23 self::regex::*, cases::*, debug::*, distinct::*, empty::*, equals::*, getset::*, json::*, math::*, openapi3::*, params::*, strings::*,
24};
25
26#[derive(Error, Debug)]
27pub enum HelpersError {
28 #[error("regex Error: `{0}`.")]
29 Regex(#[from] ::regex::Error),
30}
31
32pub fn handlebars_setup(handlebars: &mut Handlebars, global_params: HashMap<String, Value>) {
33 #[cfg(debug_assertions)]
34 {
35 handlebars.set_dev_mode(true);
36 }
37 handlebars.register_escape_fn(handlebars::no_escape);
38 handlebars.register_helper(DEBUG, Box::new(DebugHelper));
39 handlebars.register_helper(DEBUG_CTX, Box::new(DebugCtxHelper));
40 handlebars.register_helper(DISTINCTIVE, Box::new(DistinctiveHelper::default()));
41 handlebars.register_helper(IF_EMPTY_HELPER, Box::new(IfEmptyHelper));
42 handlebars.register_helper(IF_NOT_EMPTY_HELPER, Box::new(IfNotEmptyHelper));
43 handlebars.register_helper(IF_EQUALS_HELPER, Box::new(IfEqualsHelper));
44 handlebars.register_helper(IF_NOT_EQUALS_HELPER, Box::new(IfNotEqualsHelper));
45 handlebars.register_helper(JSON_HELPER, Box::new(JsonHelper));
46 handlebars.register_helper(HEX, Box::new(Hex));
47 handlebars.register_helper(TRIM_HELPER, Box::new(TrimHelper));
48 handlebars.register_helper(TRIM_START_HELPER, Box::new(TrimStartHelper));
49 handlebars.register_helper(TRIM_END_HELPER, Box::new(TrimEndHelper));
50 handlebars.register_helper(UPPERCASE_HELPER, Box::new(UppercaseHelper));
51 handlebars.register_helper(LOWERCASE_HELPER, Box::new(LowercaseHelper));
52 handlebars.register_helper(UPPERCASE_FIRST_LETTER_HELPER, Box::new(UppercaseFirstLetterHelper));
53 handlebars.register_helper(LOWERCASE_FIRST_LETTER_HELPER, Box::new(LowercaseFirstLetterHelper));
54 handlebars.register_helper(PASCAL_CASE_HELPER, Box::new(PascalcaseHelper));
55 handlebars.register_helper(SNAKE_CASE_HELPER, Box::new(SnakecaseHelper));
56 handlebars.register_helper(CAMEL_CASE_HELPER, Box::new(CamelcaseHelper));
57 handlebars.register_helper(SPLIT_GET_FIRST_HELPER, Box::new(SplitGetFirstHelper));
58 handlebars.register_helper(SPLIT_GET_LAST_HELPER, Box::new(SplitGetLastHelper));
59 handlebars.register_helper(START_WITH_HELPER, Box::new(StartWithHelper));
60 handlebars.register_helper(WITH_MATCHING_HELPER, Box::new(WithMatchingHelper));
61 handlebars.register_helper(IF_ARRAY_CONTAINS, Box::new(IfArrayContainsHelper));
62 handlebars.register_helper(TRIM_BLOCK_HELPER, Box::new(TrimBlockHelper));
63 handlebars.register_helper(TRIM_BLOCK_START_HELPER, Box::new(TrimBlockStartHelper));
64 handlebars.register_helper(TRIM_BLOCK_END_HELPER, Box::new(TrimBlockEndHelper));
65 handlebars.register_helper(ONE_LINE_HELPER, Box::new(OneLineHelper));
66 handlebars.register_helper(NO_EMPTY_LINES_HELPER, Box::new(NoEmptyLinesHelper));
67 handlebars.register_helper(REGEX_EXTRACT_HELPER, Box::new(RegexExtractHelper));
68 handlebars.register_helper(REGEX_TRANSFORM_HELPER, Box::new(RegexTransformHelper));
69 let map = Default::default();
72 handlebars.register_helper(GET_HELPER, Box::new(GetHelper::new(&map)));
73 handlebars.register_helper(SET_HELPER, Box::new(SetHelper::new(&map)));
74 handlebars.register_helper(WITH_SET_HELPER, Box::new(WithSetHelper::new(&map)));
75 handlebars.register_helper(IF_SET_HELPER, Box::new(IfGetHelper::new(&map)));
76 handlebars.register_helper(CLEAR_HELPER, Box::new(ClearHelper::new(&map)));
77
78 handlebars.register_helper(IS_OAPI3_PARAM_REQUIRED, Box::new(IsOApi3ParamRequiredHelper));
79 handlebars.register_helper(IS_OAPI3_PROP_REQUIRED, Box::new(IsOApi3PropRequiredHelper));
80
81 handlebars.register_helper(GLOBAL_PARAMETERS_HELPER, Box::new(GlobalParameterHelper::new(global_params)));
82}
83
84pub fn exec_template(json: serde_json::Value, template: &str) -> String {
85 let mut h = Handlebars::new();
86 handlebars_setup(&mut h, Default::default());
87 h.register_template_string("test", template).expect("Could not register template.");
88 h.render("test", &json).expect("Template render returned an error.")
89}
90
91pub fn exec_template_with_global_params(json: serde_json::Value, template: &str, global_params: HashMap<String, Value>) -> String {
92 let mut h = Handlebars::new();
93 handlebars_setup(&mut h, global_params);
94 h.register_template_string("test", template).expect("Could not register template.");
95 h.render("test", &json).expect("Template render returned an error.")
96}