5 releases
0.2.1 | Mar 26, 2022 |
---|---|
0.2.0 | Feb 26, 2022 |
0.2.0-beta.1 | Jan 23, 2022 |
0.1.0 | Jan 28, 2020 |
#251 in Template engine
32KB
668 lines
FAR
Find And Replace string template engine
Overview
Provided with a template and a map, FAR will attempt to find all the keys
(delimited with {{
and }}
) in the template and replace them with the
corresponding value in the map. By default, map values are
rendered by their Display
impl. For example:
# use far::{find, Render, Errors};
# fn main() -> Result<(), Errors> {
let template = "{{specific}} are my favorite {{category}}.";
#[derive(Render)]
struct Replacements {
specific: String,
category: String,
}
let found = find(template)?;
let replacements = Replacements {
specific: "Cats".to_owned(),
category: "animal".to_owned(),
};
let s = found.replace(&replacements);
assert_eq!(s, "Cats are my favorite animal.");
# Ok(())
# }
If it fails for some reason, an explanation of why will be returned:
# use far::{find, Render};
// Note the typo ----------------------------> vvvvvvvv
let template = "{{specific}} are my favorite {{catglory}}.";
#[derive(Debug, Render)]
struct Replacements {
specific: String,
category: String,
}
let errors = find::<_, Replacements>(template).unwrap_err();
assert_eq!(
format!("{}", errors),
r#"missing key "category", extraneous key "catglory""#
);
Template authors can write {{{{}}
or {{}}}}
to get a literal {{
or }}
respectively.
Additional examples and weird edge-case behaviors can be found in
core/src/tests
.
License
This project is licensed under either of
at your option.
Dependencies
~4MB
~81K SLoC