From 064027e77b278e1dc18131c66d18659b8657af6c Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sun, 31 May 2020 22:31:05 -0400 Subject: [PATCH] Worked around a lifetime issue with into_context_element. --- src/renderer/context_element.rs | 16 ++++++++-------- src/renderer/parameters_context.rs | 15 ++++++++++----- 2 files changed, 18 insertions(+), 13 deletions(-) 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!() } }