diff --git a/src/renderer/context_element.rs b/src/renderer/context_element.rs index f69fcd3..27249d1 100644 --- a/src/renderer/context_element.rs +++ b/src/renderer/context_element.rs @@ -105,7 +105,7 @@ pub trait IntoContextElement: Debug + Walkable /* + CloneIntoBoxedContextElement &self, renderer: &DustRenderer, breadcrumbs: Option<&BreadcrumbTree>, - ) -> &dyn ContextElement; + ) -> Option<&dyn ContextElement>; } impl IntoContextElement for C { @@ -113,7 +113,7 @@ impl IntoContextElement for C { &self, renderer: &DustRenderer, breadcrumbs: Option<&BreadcrumbTree>, - ) -> &dyn ContextElement { - self + ) -> Option<&dyn ContextElement> { + Some(self) } } diff --git a/src/renderer/parameters_context.rs b/src/renderer/parameters_context.rs index 4a81476..f07f2c2 100644 --- a/src/renderer/parameters_context.rs +++ b/src/renderer/parameters_context.rs @@ -36,9 +36,9 @@ impl<'a> IntoContextElement for RValue<'a> { &self, renderer: &DustRenderer, breadcrumbs: Option<&BreadcrumbTree>, - ) -> &dyn ContextElement { + ) -> Option<&dyn ContextElement> { match self { - RValue::RVLiteral(owned_literal) => owned_literal, + RValue::RVLiteral(owned_literal) => Some(owned_literal), RValue::RVPath(path) => todo!(), RValue::RVTemplate(template) => todo!(), } diff --git a/src/renderer/renderer.rs b/src/renderer/renderer.rs index 0cd3a38..d6319ce 100644 --- a/src/renderer/renderer.rs +++ b/src/renderer/renderer.rs @@ -151,8 +151,8 @@ impl<'a> DustRenderer<'a> { let val = walk_path(breadcrumbs, &reference.path.keys) .map(|ice| ice.into_context_element(self, breadcrumbs)); match val { - Err(WalkError::CantWalk) => return Ok("".to_owned()), - Ok(final_val) => { + Err(WalkError::CantWalk) | Ok(None) => return Ok("".to_owned()), + Ok(Some(final_val)) => { return if final_val.is_truthy() { final_val.render(&Self::preprocess_filters(&reference.filters)) } else { @@ -218,8 +218,10 @@ impl<'a> DustRenderer<'a> { let mut new_nodes: Vec = Vec::new(); explicit_context.as_ref().map(|path| { - let x = walk_path(maybe_breadcrumbs, &path.keys); - x.map(|ice| ice.into_context_element(self, maybe_breadcrumbs)) + walk_path(maybe_breadcrumbs, &path.keys) + .map(|ice| ice.into_context_element(self, maybe_breadcrumbs)) + .ok() + .flatten() .map(|val| { if val.is_truthy() { new_nodes.push(BreadcrumbTreeElement::Borrowed(val.from_context_element())) @@ -283,11 +285,13 @@ impl<'a> DustRenderer<'a> { } }); explicit_context.as_ref().map(|path| { - let x = walk_path(maybe_breadcrumbs, &path.keys); // TODO: should resolving the value here use // explicit_context_maybe_breadcrumbs or // maybe_breadcrumbs? - x.map(|ice| ice.into_context_element(self, maybe_breadcrumbs)) + walk_path(maybe_breadcrumbs, &path.keys) + .map(|ice| ice.into_context_element(self, maybe_breadcrumbs)) + .ok() + .flatten() .map(|val| { if val.is_truthy() { new_nodes.push(BreadcrumbTreeElement::Borrowed(val.from_context_element()))