rskit_util/template/
renderer.rs1use super::Placeholder;
2use super::error::TemplateError;
3use super::{Template, TemplatePart};
4use std::fmt;
5
6impl<P> Template<P>
7where
8 P: Placeholder,
9{
10 pub fn render_with<F, E>(&self, mut render: F) -> Result<String, TemplateError>
12 where
13 F: FnMut(P) -> Result<String, E>,
14 E: fmt::Display,
15 {
16 let mut rendered = String::new();
17 for part in &self.parts {
18 match part {
19 TemplatePart::Literal(value) => rendered.push_str(value),
20 TemplatePart::Placeholder(placeholder) => {
21 let val = render(*placeholder)
22 .map_err(|error| TemplateError::Render(error.to_string()))?;
23 rendered.push_str(&val);
24 }
25 }
26 }
27 Ok(rendered)
28 }
29}