Skip to main content

broccoli_cli/template/
mod.rs

1pub mod variables;
2
3use std::fs;
4use std::path::Path;
5
6use anyhow::Result;
7
8use self::variables::TemplateVars;
9
10/// Replace all `{{var_name}}` placeholders in a template string.
11pub fn render(template: &str, vars: &TemplateVars) -> String {
12    template
13        .replace("{{plugin_name}}", &vars.plugin_name)
14        .replace("{{plugin_name_snake}}", &vars.plugin_name_snake)
15        .replace("{{plugin_name_pascal}}", &vars.plugin_name_pascal)
16        .replace("{{server_sdk_dep}}", &vars.server_sdk_dep)
17        .replace("{{web_sdk_dep}}", &vars.web_sdk_dep)
18        .replace("{{web_root}}", &vars.web_root)
19}
20
21/// Render a template and write it to the given output path, creating parent
22/// directories as needed.
23pub fn write_template(template: &str, output: &Path, vars: &TemplateVars) -> Result<()> {
24    let content = render(template, vars);
25    if let Some(parent) = output.parent() {
26        fs::create_dir_all(parent)?;
27    }
28    fs::write(output, content)?;
29    Ok(())
30}