Ported the get_loop_elements wrapper.

This commit is contained in:
Tom Alexander 2020-05-09 14:14:22 -04:00
parent 2712126b3c
commit d758a71fb4
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE
3 changed files with 7 additions and 9 deletions

View File

@ -126,7 +126,7 @@ impl Walkable for serde_json::Value {
}
impl Loopable for serde_json::Value {
fn get_loop_elements(&self) -> Result<Vec<&dyn ContextElement>, RenderError> {
fn get_loop_elements(&self) -> Vec<&dyn ContextElement> {
match self {
serde_json::Value::Null => Ok(Vec::new()),
serde_json::Value::Bool(boolean) => {

View File

@ -23,5 +23,5 @@ pub trait Loopable {
/// once with the context being the element at that path. Finally,
/// if its an array-like value then it will render n-times, once
/// for each element of the array.
fn get_loop_elements(&self) -> Result<Vec<&dyn ContextElement>, RenderError>;
fn get_loop_elements(&self) -> Vec<&dyn ContextElement>;
}

View File

@ -197,13 +197,11 @@ impl<'a> DustRenderer<'a> {
/// block, this will return an empty vector.
fn get_loop_elements<'b>(
&'a self,
walk_result: Result<&'b dyn ContextElement, RenderError<'b>>,
) -> Result<Vec<&'b dyn ContextElement>, RenderError<'b>> {
if let Err(RenderError::NotFound { .. }) = walk_result {
// If reference does not exist in the context, render the else block
Ok(vec![])
} else {
Ok(walk_result?.get_loop_elements()?)
walk_result: Result<&'b dyn ContextElement, WalkError>,
) -> Vec<&'b dyn ContextElement> {
match walk_result {
Err(WalkError::CantWalk) => Vec::new(),
Ok(walk_target) => walk_target.get_loop_elements(),
}
}
}