mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-04-19 07:19:45 +02:00
Lazily render variables (#108)
This commit is contained in:
@@ -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 {};
|
||||
|
||||
Reference in New Issue
Block a user