![](https://img.shields.io/crates/l/incrust.svg)
[![crates.io](https://img.shields.io/crates/v/incrust.svg)](https://crates.io/crates/incrust)
[![Build Status](https://travis-ci.org/alexander-irbis/robots_txt.svg)](https://travis-ci.org/alexander-irbis/incrust)
## {% Incrust %}
> Incrust is a template engine inspired by Jinja2 and written in Rust.
In fact it is a [Jinja2](http://jinja.pocoo.org/), [Django](https://docs.djangoproject.com/en/1.10/topics/templates/),
[Twig](http://twig.sensiolabs.org/), [Swig](http://paularmstrong.github.io/swig/), [Liquid](https://shopify.github.io/liquid/)
(and probably others) template engines constellation, which uses similar methodologies.
### Unstable
The implementation is at a very early stage and the API is a subject of changes.
__Note that Incrust currently requires the nightly version of the Rust compiler.__
## Installation
Incrust is [available on crates.io](https://crates.io/crates/incrust) and can be included in your Cargo enabled project like this:
```toml
[dependencies]
incrust = "=0.2.15"
```
For ease of use hashmaps you may use the [maplit](https://crates.io/crates/maplit)
Then you need to setup your environment:
```rust
#[macro_use]
extern crate maplit;
extern crate incrust;
use incrust::ex;
fn create_env() -> Incrust {
use incrust::{Incrust, FilesystemLoader};
let mut instance = Incrust::default();
instance.loaders.push(FilesystemLoader::new("./assets/tpl"));
instance
}
fn main() {
let incrust = create_env();
let args = hashmap!{ "name".into() => ex("World") };
incrust.render("hello", &args).unwrap();
}
```
Though Incrust has smart loaders, it may be used just as advanced formatter to render directly from string template
```rust
let args = hashmap!{ "name".into() => ex("World") };
incrust.render_text("Hello, {{ name | e }}!", &args).unwrap();
// or with prepared template
let hello = incrust.parse("Hello, {{ name | e }}!");
incrust.render_parsed(&hello, &args).unwrap();
```
## Syntax examples
### Comments
```twig
```
## Alternatives
If you are looking for a template engine for your project, you may also look at these projects.
### With a similar syntax
* [cobalt-org/liquid-rust](https://github.com/cobalt-org/liquid-rust) Liquid templating for Rust
* [colin-kiegel/twig-rust](https://github.com/colin-kiegel/twig-rust) Rust port of the twig-php template library
* [Nercury/twig-rs](https://github.com/Nercury/twig-rs) The Twig templating engine for Rust (work in progress)
* [Keats/tera](https://github.com/Keats/tera) A template engine for Rust
### Others
* [sunng87/handlebars-rust](https://github.com/sunng87/handlebars-rust) Rust templating with Handlebars
* [nickel-org/rust-mustache](https://github.com/nickel-org/rust-mustache) Mustache template library for rust
## License
Licensed under either of
* Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
at your option.
### Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license,
shall be dual licensed as above, without any additional terms or conditions.