You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
4.6 KiB
131 lines
4.6 KiB
<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.
|