pub fn render(template: &str, vars: &[(&str, &str)]) -> String {
let mut rendered = template.to_string();
for (key, value) in vars {
rendered = rendered.replace(&format!("{{{{{key}}}}}"), value);
}
rendered
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn render_substitutes_all_variables() {
let out = render(
"Hello {{name}}, you are {{PascalName}}!",
&[("name", "bob"), ("PascalName", "Bob")],
);
assert_eq!(out, "Hello bob, you are Bob!");
}
#[test]
fn render_leaves_unmatched_placeholders_untouched() {
let out = render("{{known}} {{unknown}}", &[("known", "value")]);
assert_eq!(out, "value {{unknown}}");
}
#[test]
fn render_leaves_single_braces_untouched() {
let out = render(r#"info!("count: {}", n); {{name}}"#, &[("name", "x")]);
assert_eq!(out, r#"info!("count: {}", n); x"#);
}
#[test]
fn render_supports_repeated_variables() {
let out = render("{{name}}-{{name}}", &[("name", "dup")]);
assert_eq!(out, "dup-dup");
}
}