Worked around a lifetime issue with into_context_element.

This commit is contained in:
Tom Alexander 2020-05-31 22:31:05 -04:00
parent b74dc394a8
commit 064027e77b
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE
2 changed files with 18 additions and 13 deletions

View File

@ -101,19 +101,19 @@ impl<C: ContextElement> FromContextElement for C {
} }
pub trait IntoContextElement: Debug + Walkable /* + CloneIntoBoxedContextElement*/ { pub trait IntoContextElement: Debug + Walkable /* + CloneIntoBoxedContextElement*/ {
fn into_context_element( fn into_context_element<'a>(
&self, &'a self,
renderer: &DustRenderer, renderer: &DustRenderer,
breadcrumbs: Option<&BreadcrumbTree>, breadcrumbs: Option<&'a BreadcrumbTree<'a>>,
) -> Option<&dyn ContextElement>; ) -> Option<&'a dyn ContextElement>;
} }
impl<C: ContextElement> IntoContextElement for C { impl<C: ContextElement> IntoContextElement for C {
fn into_context_element( fn into_context_element<'a>(
&self, &'a self,
renderer: &DustRenderer, renderer: &DustRenderer,
breadcrumbs: Option<&BreadcrumbTree>, breadcrumbs: Option<&'a BreadcrumbTree<'a>>,
) -> Option<&dyn ContextElement> { ) -> Option<&'a dyn ContextElement> {
Some(self) Some(self)
} }
} }

View File

@ -6,6 +6,7 @@ use crate::renderer::breadcrumb_tree::BreadcrumbTree;
use crate::renderer::context_element::CompareContextElement; use crate::renderer::context_element::CompareContextElement;
use crate::renderer::context_element::ContextElement; use crate::renderer::context_element::ContextElement;
use crate::renderer::context_element::IntoContextElement; use crate::renderer::context_element::IntoContextElement;
use crate::renderer::tree_walking::walk_path;
use crate::renderer::DustRenderer; use crate::renderer::DustRenderer;
use crate::renderer::Loopable; use crate::renderer::Loopable;
use crate::renderer::RenderError; use crate::renderer::RenderError;
@ -32,16 +33,20 @@ impl<'a> ParametersContext<'a> {
} }
impl<'a> IntoContextElement for RValue<'a> { impl<'a> IntoContextElement for RValue<'a> {
fn into_context_element( fn into_context_element<'b>(
&self, &'b self,
renderer: &DustRenderer, renderer: &DustRenderer,
breadcrumbs: Option<&BreadcrumbTree>, breadcrumbs: Option<&'b BreadcrumbTree<'b>>,
) -> Option<&dyn ContextElement> { ) -> Option<&'b dyn ContextElement> {
match self { match self {
RValue::RVLiteral(owned_literal) => Some(owned_literal), 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!(), RValue::RVTemplate(template) => todo!(),
} }
// todo!()
} }
} }