template-nest 0.2.2

TemplateNest is a template engine for Rust, designed to process nested templates quickly and efficiently.
Documentation
use std::collections::HashMap;
use template_nest::{filling, filling_list, Filling, TemplateNest, TemplateNestError};

#[cfg(test)]
use pretty_assertions::assert_eq;

#[test]
fn render_simple_page() -> Result<(), TemplateNestError> {
    let nest = TemplateNest::new("templates")?;
    let simple_page = filling!(
        "TEMPLATE": "00-simple-page",
        "variable": "Simple Variable",
        "simple_component":  {
            "TEMPLATE":"01-simple-component",
            "variable": "Simple Variable in Simple Component"
        }
    );
    let simple_page_output = filling!(
        "TEMPLATE": "output/01-simple-page",
    );
    assert_eq!(
        nest.render(&simple_page)?,
        nest.render(&simple_page_output)?,
    );
    Ok(())
}

#[test]
fn render_incomplete_page() -> Result<(), TemplateNestError> {
    let nest = TemplateNest::new("templates")?;
    let incomplete_page = filling!(
        "TEMPLATE": "00-simple-page",
        "variable": "Simple Variable",
        "simple_component":  {
            "TEMPLATE":"01-simple-component",
        }
    );
    let incomplete_page_output = filling!(
        "TEMPLATE": "output/03-incomplete-page",
    );
    assert_eq!(
        nest.render(&incomplete_page)?,
        nest.render(&incomplete_page_output)?
    );
    Ok(())
}

#[test]
fn render_complex_page() -> Result<(), TemplateNestError> {
    let nest = TemplateNest::new("templates")?;
    let complex_page = filling!(
        "TEMPLATE": "10-complex-page",
        "title": "Complex Page",
        "pre_body": {
            "TEMPLATE": "18-styles",
        },
        "navigation": {
            "TEMPLATE": "11-navigation",
            "banner": {
                "TEMPLATE": "12-navigation-banner",
            },
            "items": [
                { "TEMPLATE": "13-navigation-item-00-services" },
                { "TEMPLATE": "13-navigation-item-01-resources" },
            ]
        },
        "hero_section": {
            "TEMPLATE": "14-hero-section",
        },
        "main_content": [
            { "TEMPLATE": "15-isdc-card", },
            {
                "TEMPLATE": "16-vb-brand-cards",
                "cards": [
                    {
                        "TEMPLATE": "17-vb-brand-card-00",
                        "parent_classes": "p-card brand-card col-4",
                    },
                    {
                        "TEMPLATE": "17-vb-brand-card-01",
                        "parent_classes": "p-card brand-card col-4",
                    },
                    {
                        "TEMPLATE": "17-vb-brand-card-02",
                        "parent_classes": "p-card brand-card col-4",
                    },
                ]
            }
        ],
        "post_footer": {
            "TEMPLATE": "19-scripts"
        }
    );
    let complex_page_output = filling!(
        "TEMPLATE": "output/02-complex-page",
    );
    assert_eq!(
        nest.render(&complex_page)?,
        nest.render(&complex_page_output)?
    );

    Ok(())
}

#[test]
fn render_array_of_template_hash() -> Result<(), TemplateNestError> {
    let nest = TemplateNest::new("templates")?;
    let page = filling_list!([
        {
            "TEMPLATE": "01-simple-component",
            "variable": "This is a variable",
        }, {
            "TEMPLATE": "01-simple-component",
            "variable": "This is another variable",
        }
    ]);
    let page_output = filling!(
        "TEMPLATE": "output/13-render-with-array-of-template-hash",
    );
    assert_eq!(nest.render(&page)?, nest.render(&page_output)?);

    Ok(())
}