temply 0.3.0

Simple, opinionated template engine
Documentation
mod util;

use temply::Template;

#[test]
fn test_simple() {
    #[derive(Debug, Template)]
    #[template_inline = "{% macro x |y| %}{{ y }}{% endmacro %}{% call x(42) %}"]
    struct MyTemplate;

    assert_render!(MyTemplate, "42");
}

#[test]
fn test_zero_params() {
    #[derive(Debug, Template)]
    #[template_inline = "{% macro x || %}{{ 12 }}{% endmacro %}{% call x() %}"]
    struct MyTemplate;

    assert_render!(MyTemplate, "12");
}

#[test]
fn test_multiple_params() {
    #[derive(Debug, Template)]
    #[template_inline = "{% macro x |y, z| %}{{ y + z }}{% endmacro %}{% call x(42, 3) %}"]
    struct MyTemplate;

    assert_render!(MyTemplate, "45");
}

#[test]
fn test_trailing_label() {
    #[derive(Debug, Template)]
    #[template_inline = "{% macro x |y, z, | %}{{ y + z }}{% endmacro %}{% call x(42, 3,) %}"]
    struct MyTemplate;

    assert_render!(MyTemplate, "45");
}

#[test]
fn test_recursive() {
    #[derive(Debug, Template)]
    #[template_inline = r#"{% macro fact |x| %}
    {% if x == 0 %}
        1
    {% else %}
        {{ x }} * {% call fact(x - 1) %}
    {% endif %}
{% endmacro %}{% call fact(5) %}"#]
    struct MyTemplate;

    assert_render!(MyTemplate, "5 * 4 * 3 * 2 * 1 * 1");
}

#[test]
fn test_param_pattern() {
    #[derive(Debug, Template)]
    #[template_inline = "{% macro x |(y, z)| %}{{ y + z }}{% endmacro %}{% call x(self.0) %}"]
    struct MyTemplate((u32, u32));

    assert_render!(MyTemplate((2, 3)), "5");
}

#[test]
fn test_param_typed() {
    #[derive(Debug, Template)]
    #[template_inline = "{% macro x |y: i32, z| %}{{ y + z }}{% endmacro %}{% call x(2 + 3, 5 - 2) %}"]
    struct MyTemplate;

    assert_render!(MyTemplate, "8");
}

#[test]
fn test_arg_expr() {
    #[derive(Debug, Template)]
    #[template_inline = "{% macro x |y, z| %}{{ y + z }}{% endmacro %}{% call x(2 + 3, 5 - 2) %}"]
    struct MyTemplate;

    assert_render!(MyTemplate, "8");
}

#[test]
fn test_arg_ref() {
    #[derive(Debug, Template)]
    #[template_inline = "{% macro x |y: &i32| %}{{ *y }}{% endmacro %}{% call x(&2) %}"]
    struct MyTemplate;

    assert_render!(MyTemplate, "2");
}

#[test]
fn test_arg_mut_ref() {
    #[derive(Debug, Template)]
    #[template_inline = "{% macro x |y: &mut i32| %}{% let _ = { *y += 1; }; %}{{ *y }}{% endmacro %}{% call x(&mut 2) %}"]
    struct MyTemplate;

    assert_render!(MyTemplate, "3");
}