mecha10-templates 0.8.2

Mecha10 project templates — code generation, init, and template services
Documentation
//! `{{var}}`-substitution rendering over compile-time embedded template content.

/// Render a `{{key}}`-substitution template string against the given `(key, value)` variables.
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");
    }
}