pinch/plugins/
handlebars.rs1use crate::plugins::PluginDefinition;
2use crate::plugins::PluginRole::Transform;
3use crate::{utils, InputFile};
4use handlebars::Handlebars;
5use serde_json::json;
6
7pub fn plugin() -> PluginDefinition {
8 PluginDefinition {
9 name: "handlebars".to_string(),
10 role: Transform,
11 output_filename: None,
12 process: None,
13 pre_process: Some(|config, context| {
14 let mut new_files: Vec<InputFile> = vec![];
15 for file in config.files.as_ref().unwrap() {
16 if file.is_extension(".mustache") {
17 let file_contents = file.read_contents();
18
19 let template_registry = Handlebars::new();
20 let template = template_registry
21 .render_template(file_contents.as_str(), &json!(&context))
22 .unwrap();
23
24 let new_file = file.replace_extensions("");
25 utils::create_file(new_file.path.to_string(), template);
26 new_files.push(new_file);
27 }
28 }
29 (context, Some(new_files))
30 }),
31 applies: None,
32 post_process: Some(|config, _context| {
33 for file in config.files.as_ref().unwrap() {
34 if file.is_extension(".mustache") {
35 utils::remove_file(file.replace_path_extension(""))
36 }
37 }
38 }),
39 }
40}