A flexible text template engine that allows templates with named placeholders within it.
Placeholders are defined by default following the handlebars syntax, but can be overriden with specific boundaries.
In order to provide the context in which our placeholders will be replaced the following options are available:
As the name implies we can pass a HashMap
in order to provide the context. The
methods available are:
fill_with_hashmap
which replaces empty placeholders with an empty string.fill_with_hashmap_strict
which returns a Error::PlaceholderError
when:
```rust use text_placeholder::Template; use std::collections::HashMap;
let default_template = Template::new("Hello {{first}} {{second}}!");
let mut table = HashMap::new(); table.insert("first", "text"); table.insert("second", "placeholder");
asserteq!(defaulttemplate.fillwithhashmap(&table), "Hello text placeholder!");
// We can also specify our own boundaries:
let customtemplate = Template::newwith_placeholder("Hello $[first]] $[second]!", "$[", "]");
asserteq!(defaulttemplate.fillwithhashmap(&table), "Hello text placeholder!"); ```
This is an optional feature that depends on serde
. In order to enable it specify in your Cargo.toml
dependencies the following:
toml
text_placeholder = { version = "0.2", features = ["struct_context"] }
As the name implies we can pass a Struct
in order that implements the serde::Serialize
trait in order to provide the context. The methods available are:
fill_with_struct
which replaces empty placeholders with an empty string.fill_with_struct_strict
which returns a Error::PlaceholderError
when:
```rust use text_placeholder::Template;
struct Context { first: String, second: String }
let defaulttemplate = Template::new("Hello {{first}} {{second}}!"); let context = Context { first: "text".tostring(), second: "placeholder".to_string() };
asserteq!(defaulttemplate.fillwithstruct(&context), "Hello text placeholder!");
// We can also specify our own boundaries:
let customtemplate = Template::newwith_placeholder("Hello $[first]] $[second]!", "$[", "]");
asserteq!(defaulttemplate.fillwithstruct(&context), "Hello text placeholder!"); ```
std::ops::Index
instead of depending directly on a HashMap.