Lazily render variables (#108)

This commit is contained in:
Gregory Schier
2024-09-24 10:18:56 -07:00
committed by GitHub
parent 3818154e82
commit 296221a22e
2 changed files with 25 additions and 29 deletions

View File

@@ -47,7 +47,10 @@ async fn render_tag<T: TemplateCallback>(
match val {
Val::Str { text } => text.into(),
Val::Var { name } => match vars.get(name.as_str()) {
Some(v) => v.to_string(),
Some(v) => {
let r = Box::pin(parse_and_render(v, vars, cb)).await;
r.to_string()
},
None => "".into(),
},
Val::Bool { value } => value.to_string(),
@@ -143,6 +146,22 @@ mod tests {
);
}
#[tokio::test]
async fn render_recursive_var() {
let empty_cb = EmptyCB {};
let template = "${[ foo ]}";
let mut vars = HashMap::new();
vars.insert("foo".to_string(), "foo: ${[ bar ]}".to_string());
vars.insert("bar".to_string(), "bar: ${[ baz ]}".to_string());
vars.insert("baz".to_string(), "baz".to_string());
let result = "foo: bar: baz";
assert_eq!(
parse_and_render(template, &vars, &empty_cb).await,
result.to_string()
);
}
#[tokio::test]
async fn render_surrounded() {
let empty_cb = EmptyCB {};