Running into lifetime issues again.
This commit is contained in:
parent
da15439946
commit
303f092c30
@ -106,7 +106,7 @@ pub trait IntoContextElement: Debug + Walkable /* + CloneIntoBoxedContextElement
|
|||||||
&'a self,
|
&'a self,
|
||||||
renderer: &DustRenderer,
|
renderer: &DustRenderer,
|
||||||
breadcrumbs: Option<&'a BreadcrumbTree<'a>>,
|
breadcrumbs: Option<&'a BreadcrumbTree<'a>>,
|
||||||
) -> Option<&'a dyn ContextElement>;
|
) -> Option<IceResult<'a>>;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<C: ContextElement> IntoContextElement for C {
|
impl<C: ContextElement> IntoContextElement for C {
|
||||||
@ -114,8 +114,8 @@ impl<C: ContextElement> IntoContextElement for C {
|
|||||||
&'a self,
|
&'a self,
|
||||||
renderer: &DustRenderer,
|
renderer: &DustRenderer,
|
||||||
breadcrumbs: Option<&'a BreadcrumbTree<'a>>,
|
breadcrumbs: Option<&'a BreadcrumbTree<'a>>,
|
||||||
) -> Option<&'a dyn ContextElement> {
|
) -> Option<IceResult<'a>> {
|
||||||
Some(self)
|
Some(IceResult::Borrowed(self))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,10 +143,11 @@ impl<'a> IntoContextElement for IceResult<'a> {
|
|||||||
&'b self,
|
&'b self,
|
||||||
renderer: &DustRenderer,
|
renderer: &DustRenderer,
|
||||||
breadcrumbs: Option<&'b BreadcrumbTree<'b>>,
|
breadcrumbs: Option<&'b BreadcrumbTree<'b>>,
|
||||||
) -> Option<&'b dyn ContextElement> {
|
) -> Option<IceResult<'b>> {
|
||||||
|
// Some(*self)
|
||||||
match self {
|
match self {
|
||||||
IceResult::Owned(rc_ce) => Some(rc_ce.as_ref()),
|
IceResult::Owned(rc_ce) => Some(IceResult::Borrowed(rc_ce.as_ref())),
|
||||||
IceResult::Borrowed(ce) => Some(*ce),
|
IceResult::Borrowed(ce) => Some(IceResult::Borrowed(*ce)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ use crate::parser::RValue;
|
|||||||
use crate::renderer::breadcrumb_tree::BreadcrumbTree;
|
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::IceResult;
|
||||||
use crate::renderer::context_element::IntoContextElement;
|
use crate::renderer::context_element::IntoContextElement;
|
||||||
use crate::renderer::tree_walking::walk_path;
|
use crate::renderer::tree_walking::walk_path;
|
||||||
use crate::renderer::DustRenderer;
|
use crate::renderer::DustRenderer;
|
||||||
@ -37,24 +38,25 @@ impl<'a> IntoContextElement for RValue<'a> {
|
|||||||
&'b self,
|
&'b self,
|
||||||
renderer: &DustRenderer,
|
renderer: &DustRenderer,
|
||||||
breadcrumbs: Option<&'b BreadcrumbTree<'b>>,
|
breadcrumbs: Option<&'b BreadcrumbTree<'b>>,
|
||||||
) -> Option<&'b dyn ContextElement> {
|
) -> Option<IceResult<'b>> {
|
||||||
match self {
|
todo!()
|
||||||
RValue::RVLiteral(owned_literal) => Some(owned_literal),
|
// match self {
|
||||||
RValue::RVPath(path) => walk_path(breadcrumbs, &path.keys)
|
// RValue::RVLiteral(owned_literal) => Some(owned_literal),
|
||||||
.map(|ice| ice.into_context_element(renderer, breadcrumbs))
|
// RValue::RVPath(path) => walk_path(breadcrumbs, &path.keys)
|
||||||
.ok()
|
// .map(|ice| ice.into_context_element(renderer, breadcrumbs))
|
||||||
.flatten(),
|
// .ok()
|
||||||
RValue::RVTemplate(template) => {
|
// .flatten(),
|
||||||
// TODO
|
// RValue::RVTemplate(template) => {
|
||||||
// renderer
|
// // TODO
|
||||||
// .render_partial_name(template, breadcrumbs)
|
// // renderer
|
||||||
// .map(|rendered| OwnedLiteral::LString(rendered))
|
// // .render_partial_name(template, breadcrumbs)
|
||||||
// .ok()
|
// // .map(|rendered| OwnedLiteral::LString(rendered))
|
||||||
// .as_ref()
|
// // .ok()
|
||||||
// .map(|l| l as _)
|
// // .as_ref()
|
||||||
todo!()
|
// // .map(|l| l as _)
|
||||||
}
|
// todo!()
|
||||||
}
|
// }
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ use crate::renderer::inline_partial_tree::InlinePartialTreeElement;
|
|||||||
use crate::renderer::tree_walking::walk_path;
|
use crate::renderer::tree_walking::walk_path;
|
||||||
use std::borrow::Borrow;
|
use std::borrow::Borrow;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
use std::rc::Rc;
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct DustRenderer<'a> {
|
pub struct DustRenderer<'a> {
|
||||||
@ -153,8 +154,10 @@ impl<'a> DustRenderer<'a> {
|
|||||||
match val {
|
match val {
|
||||||
Err(WalkError::CantWalk) | Ok(None) => return Ok("".to_owned()),
|
Err(WalkError::CantWalk) | Ok(None) => return Ok("".to_owned()),
|
||||||
Ok(Some(final_val)) => {
|
Ok(Some(final_val)) => {
|
||||||
return if final_val.is_truthy() {
|
return if final_val.get_context_element_reference().is_truthy() {
|
||||||
final_val.render(&Self::preprocess_filters(&reference.filters))
|
final_val
|
||||||
|
.get_context_element_reference()
|
||||||
|
.render(&Self::preprocess_filters(&reference.filters))
|
||||||
} else {
|
} else {
|
||||||
Ok("".to_owned())
|
Ok("".to_owned())
|
||||||
};
|
};
|
||||||
@ -223,8 +226,8 @@ impl<'a> DustRenderer<'a> {
|
|||||||
.ok()
|
.ok()
|
||||||
.flatten()
|
.flatten()
|
||||||
.map(|val| {
|
.map(|val| {
|
||||||
if val.is_truthy() {
|
if val.get_context_element_reference().is_truthy() {
|
||||||
new_nodes.push(BreadcrumbTreeElement::Borrowed(val.from_context_element()))
|
new_nodes.push(BreadcrumbTreeElement::Owned(Rc::new(val)))
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user