codegenr_lib/helpers/
mod.rs

1use 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  //handlebars.register_helper(EACH_WITH_SORT_HELPER, Box::new(EachWithSortHelper));
70
71  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}