| <h1 align="center">TinyTemplate</h1> | |
| <div align="center">Minimal Lightweight Text Templating</div> | |
| <div align="center"> | |
| <a href="https://docs.rs/tinytemplate/">API Documentation</a> | |
| | | |
| <a href="https://github.com/bheisler/TinyTemplate/blob/master/CHANGELOG.md">Changelog</a> | |
| </div> | |
| <div align="center"> | |
| <a href="https://github.com/bheisler/TinyTemplate/actions"> | |
| <img src="https://github.com/bheisler/TinyTemplate/workflows/Continuous%20integration/badge.svg" alt="Continuous integration"> | |
| </a> | |
| <a href="https://crates.io/crates/tinytemplate"> | |
| <img src="https://img.shields.io/crates/v/tinytemplate.svg" alt="Crates.io"> | |
| </a> | |
| </div> | |
| TinyTemplate is a small, minimalistic text templating system with limited dependencies. | |
| ## Table of Contents | |
| - [Table of Contents](#table-of-contents) | |
| - [Goals](#goals) | |
| - [Why TinyTemplate?](#why-tinytemplate) | |
| - [Quickstart](#quickstart) | |
| - [Compatibility Policy](#compatibility-policy) | |
| - [Contributing](#contributing) | |
| - [Maintenance](#maintenance) | |
| - [License](#license) | |
| ### Goals | |
| The primary design goals are: | |
| - __Small__: TinyTemplate deliberately does not support many features of more powerful template engines. | |
| - __Simple__: TinyTemplate presents a minimal but well-documented user-facing API. | |
| - __Lightweight__: TinyTemplate has minimal required dependencies. | |
| Non-goals include: | |
| - __Extensibility__: TinyTemplate supports custom value formatters, but that is all. | |
| - __Performance__: TinyTemplate provides decent performance, but other template engines are faster. | |
| ### Why TinyTemplate? | |
| I created TinyTemplate after noticing that none of the existing template libraries really suited my | |
| needs for Criterion.rs. Some had large dependency trees to support features that I didn't use. Some | |
| required adding a build script to convert templates into code at runtime, in search of extreme | |
| performance that I didn't need. Some had elaborate macro-based DSL's to generate HTML, where I just | |
| wanted plain text with some markup. Some expect the templates to be provided in a directory of text | |
| files, but I wanted the template to be included in the binary. I just wanted something small and | |
| minimal with good documentation but there was nothing like that out there so I wrote my own. | |
| TinyTemplate is well-suited to generating HTML reports and similar text files. It could be used for | |
| generating HTML or other text in a web-server, but for more-complex use cases another template | |
| engine may be a better fit. | |
| ### Quickstart | |
| First, add TinyTemplate and serde-derive to your `Cargo.toml` file: | |
| ```toml | |
| [dependencies] | |
| tinytemplate = "1.1" | |
| serde = { version = "1.0", features = ["derive"] } | |
| ``` | |
| Then add this code to "src.rs": | |
| ```rust | |
| use serde::Serialize; | |
| use tinytemplate::TinyTemplate; | |
| use std::error::Error; | |
| #[derive(Serialize)] | |
| struct Context { | |
| name: String, | |
| } | |
| static TEMPLATE : &'static str = "Hello {name}!"; | |
| pub fn main() -> Result<(), Box<dyn Error>> { | |
| let mut tt = TinyTemplate::new(); | |
| tt.add_template("hello", TEMPLATE)?; | |
| let context = Context { | |
| name: "World".to_string(), | |
| }; | |
| let rendered = tt.render("hello", &context)?; | |
| println!("{}", rendered); | |
| Ok(()) | |
| } | |
| ``` | |
| This should print "Hello World!" to stdout. | |
| ### Compatibility Policy | |
| TinyTemplate supports the last three stable minor releases of Rust. At time of writing, this means | |
| Rust 1.38 or later. Older versions may work, but are not tested or guaranteed. | |
| Currently, the oldest version of Rust believed to work is 1.36. Future versions of TinyTemplate may | |
| break support for such old versions, and this will not be considered a breaking change. If you | |
| require TinyTemplate to work on old versions of Rust, you will need to stick to a | |
| specific patch version of TinyTemplate. | |
| ### Contributing | |
| Thanks for your interest! Contributions are welcome. | |
| Issues, feature requests, questions and bug reports should be reported via the issue tracker above. | |
| In particular, becuase TinyTemplate aims to be well-documented, please report anything you find | |
| confusing or incorrect in the documentation. | |
| Code or documentation improvements in the form of pull requests are also welcome. Please file or | |
| comment on an issue to allow for discussion before doing a lot of work, though. | |
| For more details, see the [CONTRIBUTING.md file](https://github.com/bheisler/TinyTemplate/blob/master/CONTRIBUTING.md). | |
| ### Maintenance | |
| TinyTemplate was created and is currently maintained by Brook Heisler (@bheisler). | |
| ### License | |
| TinyTemplate is dual-licensed under the Apache 2.0 license and the MIT license. |