diff --git a/src/bin.rs b/src/bin.rs index 6c314a3..e02e3d9 100644 --- a/src/bin.rs +++ b/src/bin.rs @@ -126,7 +126,7 @@ impl Walkable for serde_json::Value { } impl Loopable for serde_json::Value { - fn get_loop_elements(&self) -> Result, RenderError> { + fn get_loop_elements(&self) -> Vec<&dyn ContextElement> { match self { serde_json::Value::Null => Ok(Vec::new()), serde_json::Value::Bool(boolean) => { diff --git a/src/renderer/context_element.rs b/src/renderer/context_element.rs index bc12234..dee6680 100644 --- a/src/renderer/context_element.rs +++ b/src/renderer/context_element.rs @@ -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, RenderError>; + fn get_loop_elements(&self) -> Vec<&dyn ContextElement>; } diff --git a/src/renderer/renderer.rs b/src/renderer/renderer.rs index 89bd383..8f74c93 100644 --- a/src/renderer/renderer.rs +++ b/src/renderer/renderer.rs @@ -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, 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(), } } }