1use handlebars::{
11 Context, Handlebars, Helper, HelperDef, HelperResult, JsonRender, Output, RenderContext,
12 RenderError,
13};
14use serde_json::json;
15use serde_json::value::{Map, Value as Json};
16use std::collections::HashMap;
17
18use brix_errors::BrixError;
19mod helpers;
20
21pub struct ProcessorCore<'a> {
24 handlebars: handlebars::Handlebars<'a>,
25}
26
27impl<'a> ProcessorCore<'a> {
28 pub fn new() -> Self {
29 let mut handlebars = Handlebars::new();
30 handlebars.register_helper("to-upper", Box::new(helpers::ToUpperHelper));
31 handlebars.register_helper("to-lower", Box::new(helpers::ToLowerHelper));
32 handlebars.register_helper("to-title", Box::new(helpers::ToTitleHelper));
33 handlebars.register_helper("to-case", Box::new(helpers::ToCaseHelper));
34 handlebars.register_helper("to-flat", Box::new(helpers::ToFlatHelper));
35 handlebars.register_helper("to-java-package", Box::new(helpers::ToJavaPackageHelper));
36 handlebars.register_helper(
37 "to-java-package-path",
38 Box::new(helpers::ToJavaPackagePathHelper),
39 );
40 Self { handlebars }
41 }
42
43 pub fn process(&self, text: String, context: Map<String, Json>) -> Result<String, BrixError> {
45 let result = self.handlebars.render_template(&text, &context)?;
46 Ok(result)
47 }
48}
49
50pub fn create_context(data: HashMap<String, String>) -> Map<String, Json> {
52 let mut res = Map::new();
53 for (key, value) in data.into_iter() {
54 res.insert(key, json!(value));
55 }
56 res
57}