diff --git a/src/renderer/context_element.rs b/src/renderer/context_element.rs index 27249d1..49cc72d 100644 --- a/src/renderer/context_element.rs +++ b/src/renderer/context_element.rs @@ -101,19 +101,19 @@ impl FromContextElement for C { } pub trait IntoContextElement: Debug + Walkable /* + CloneIntoBoxedContextElement*/ { - fn into_context_element( - &self, + fn into_context_element<'a>( + &'a self, renderer: &DustRenderer, - breadcrumbs: Option<&BreadcrumbTree>, - ) -> Option<&dyn ContextElement>; + breadcrumbs: Option<&'a BreadcrumbTree<'a>>, + ) -> Option<&'a dyn ContextElement>; } impl IntoContextElement for C { - fn into_context_element( - &self, + fn into_context_element<'a>( + &'a self, renderer: &DustRenderer, - breadcrumbs: Option<&BreadcrumbTree>, - ) -> Option<&dyn ContextElement> { + breadcrumbs: Option<&'a BreadcrumbTree<'a>>, + ) -> Option<&'a dyn ContextElement> { Some(self) } } diff --git a/src/renderer/parameters_context.rs b/src/renderer/parameters_context.rs index f07f2c2..3b7b7ba 100644 --- a/src/renderer/parameters_context.rs +++ b/src/renderer/parameters_context.rs @@ -6,6 +6,7 @@ use crate::renderer::breadcrumb_tree::BreadcrumbTree; use crate::renderer::context_element::CompareContextElement; use crate::renderer::context_element::ContextElement; use crate::renderer::context_element::IntoContextElement; +use crate::renderer::tree_walking::walk_path; use crate::renderer::DustRenderer; use crate::renderer::Loopable; use crate::renderer::RenderError; @@ -32,16 +33,20 @@ impl<'a> ParametersContext<'a> { } impl<'a> IntoContextElement for RValue<'a> { - fn into_context_element( - &self, + fn into_context_element<'b>( + &'b self, renderer: &DustRenderer, - breadcrumbs: Option<&BreadcrumbTree>, - ) -> Option<&dyn ContextElement> { + breadcrumbs: Option<&'b BreadcrumbTree<'b>>, + ) -> Option<&'b dyn ContextElement> { match self { RValue::RVLiteral(owned_literal) => Some(owned_literal), - RValue::RVPath(path) => todo!(), + RValue::RVPath(path) => walk_path(breadcrumbs, &path.keys) + .map(|ice| ice.into_context_element(renderer, breadcrumbs)) + .ok() + .flatten(), RValue::RVTemplate(template) => todo!(), } + // todo!() } }