| Crates.io | boilerplate |
| lib.rs | boilerplate |
| version | 1.0.1 |
| created_at | 2017-02-13 02:52:07.681505+00 |
| updated_at | 2024-08-17 21:55:34.68829+00 |
| description | Minimal compile-time Rust template engine |
| homepage | https://github.com/casey/boilerplate |
| repository | https://github.com/casey/boilerplate |
| max_upload_size | |
| id | 8496 |
| size | 40,390 |
boilerplateboilerplate is a statically-checked Rust template engine with no runtime
dependencies. There are two ways to use boilerplate,
boilerplate::boilerplate, a function-like macro, and
boilerplate::Boilerplate, a derive macro.
use boilerplate::boilerplate;
let foo = true;
let bar: Result<&str, &str> = Ok("yassss");
let output = boilerplate!(
"%% if foo {
Foo was true!
%% }
%% match bar {
%% Ok(ok) => {
Pretty good: {{ ok }}
%% }
%% Err(err) => {
Not so great: {{ err }}
%% }
%% }
");
assert_eq!(output, "Foo was true!\nPretty good: yassss\n");
Derive Boilerplate on the type you want to use as a template context:
use boilerplate::Boilerplate;
#[derive(Boilerplate)]
struct MyTemplateTxt {
foo: bool,
bar: Result<String, Box<dyn std::error::Error>>,
}
boilerplate template code and interpolations are Rust, so errors are checked
at compile time and the template language is easy to learn:
%% if self.foo {
Foo was true!
%% }
%% match &self.bar {
%% Ok(ok) => {
Pretty good: {{ ok }}
%% }
%% Err(err) => {
Not so great: {{ err }}
%% }
%% }
The Boilerplate macro provides a Display implementation, so you can
instantiate a template context and convert it to a string:
let rendered = MyTemplateTxt { foo: true, bar: Ok("hello".into()) }.to_string();
Or use it in a format string:
println!("The output is: {}", MyTemplateTxt { foo: false, bar: Err("hello".into()) });
boilerplate's implementation is exceedingly simple. Try using
cargo-expand to expand the
Boilerplate macro and inspect derived Display implementations and debug
template issues.
Add boilerplate to your project's Cargo.toml:
[dependencies]
boilerplate = "*"
Create a template in templates/my-template.txt:
Foo is {{self.n}}!
Define, instantiate, and render the template context:
use boilerplate::Boilerplate;
#[derive(Boilerplate)]
struct MyTemplateTxt {
n: u32,
}
assert_eq!(MyTemplateTxt { n: 10 }.to_string(), "Foo is 10!\n");
See the docs for more information and examples.