Not a Template Engine
This is not a template engine, but sugar to implicitly call write!(…) like in PHP, ASP, and everything you hate.
The only difference is that the output gets XML escaped automatically unless opted-out explicitly.
E.g.
- templates/greeting.html:
Hello, {{user}}! - src/main.rs:
use Nate; - Output:
Hello, <World>!
No new traits are introduced, instead using #[derive(Nate)] works by implementing fmt::Display.
This also makes nesting of NaTE templates possible.
A more complex example would be:
- src/main.rs:
use Nate; - templates/99-bottles.txt:
{%- for i in (1..=self.limit).rev() { if i == 1 { -%} 1 bottle of beer on the wall. 1 bottle of beer. Take one down, pass it around. {%- } else { -%} {{i}} bottles of beer on the wall. {{i}} bottles of beer. Take one down, pass it around. {% } } -%}
Inside of a {% code block %} you can write any and all rust code.
Values in {{ value blocks }} are printed XML escaped.
Values in {{{ raw blocks }}} are printed verbatim.
For values in {{{{ debug blocks }}}} their debug message is printed as in "{:?}".
For values in {{{{{ verbose blocks }}}}} their debug message is printed verbose as in "{:#?}".
Using hyphens - at the start/end of a block, whitespaces before/after the block are trimmed.