Add the renderer to calls to convert to a context element.

This commit is contained in:
Tom Alexander
2020-05-30 18:16:58 -04:00
parent 917da5a073
commit 737c98d8b7
3 changed files with 42 additions and 34 deletions

View File

@@ -155,7 +155,7 @@ impl<'a> DustRenderer<'a> {
DustTag::DTLiteralStringBlock(literal) => return Ok((*literal).to_owned()),
DustTag::DTReference(reference) => {
let val = walk_path(breadcrumbs, &reference.path.keys)
.map(|ice| ice.into_context_element(breadcrumbs));
.map(|ice| ice.into_context_element(self, breadcrumbs));
match val {
Err(WalkError::CantWalk) => return Ok("".to_owned()),
Ok(final_val) => {
@@ -170,10 +170,10 @@ impl<'a> DustRenderer<'a> {
DustTag::DTSection(container) => {
let injected_context = ParametersContext::new(breadcrumbs, &container.params);
let val = walk_path(breadcrumbs, &container.path.keys)
.map(|ice| ice.into_context_element(breadcrumbs));
.map(|ice| ice.into_context_element(self, breadcrumbs));
match val {
Err(WalkError::CantWalk) => {
let new_breadcrumbs = Self::new_breadcrumbs_section(
let new_breadcrumbs = self.new_breadcrumbs_section(
breadcrumbs,
None,
Some(&injected_context),
@@ -199,7 +199,7 @@ impl<'a> DustRenderer<'a> {
final_val.get_loop_elements();
if loop_elements.is_empty() {
// Scalar value
let new_breadcrumbs = Self::new_breadcrumbs_section(
let new_breadcrumbs = self.new_breadcrumbs_section(
breadcrumbs,
None,
Some(&injected_context),
@@ -221,8 +221,8 @@ impl<'a> DustRenderer<'a> {
.map(|(i, array_elem)| {
let index_context =
IterationContext::new(i, total_length);
let new_breadcrumbs =
Self::new_breadcrumbs_section(
let new_breadcrumbs = self
.new_breadcrumbs_section(
breadcrumbs,
Some(&index_context),
Some(&injected_context),
@@ -248,7 +248,7 @@ impl<'a> DustRenderer<'a> {
// an empty array or null), Dust uses the
// original context before walking the path as
// the context for rendering the else block
let new_breadcrumbs = Self::new_breadcrumbs_section(
let new_breadcrumbs = self.new_breadcrumbs_section(
breadcrumbs,
None,
Some(&injected_context),
@@ -265,14 +265,14 @@ impl<'a> DustRenderer<'a> {
}
}
DustTag::DTExists(container) => {
let new_breadcrumbs = Self::new_breadcrumbs_partial(
let new_breadcrumbs = self.new_breadcrumbs_partial(
breadcrumbs,
breadcrumbs,
None,
&container.explicit_context,
);
let val = walk_path(breadcrumbs, &container.path.keys)
.map(|ice| ice.into_context_element(breadcrumbs));
.map(|ice| ice.into_context_element(self, breadcrumbs));
return if val.map(|v| v.is_truthy()).unwrap_or(false) {
self.render_maybe_body(
&container.contents,
@@ -288,14 +288,14 @@ impl<'a> DustRenderer<'a> {
};
}
DustTag::DTNotExists(container) => {
let new_breadcrumbs = Self::new_breadcrumbs_partial(
let new_breadcrumbs = self.new_breadcrumbs_partial(
breadcrumbs,
breadcrumbs,
None,
&container.explicit_context,
);
let val = walk_path(breadcrumbs, &container.path.keys)
.map(|ice| ice.into_context_element(breadcrumbs));
.map(|ice| ice.into_context_element(self, breadcrumbs));
return if !val.map(|v| v.is_truthy()).unwrap_or(false) {
self.render_maybe_body(
&container.contents,
@@ -313,7 +313,7 @@ impl<'a> DustRenderer<'a> {
DustTag::DTPartial(partial) => {
let partial_name = self.render_partial_name(&partial.name, breadcrumbs, blocks)?;
if partial.params.is_empty() {
let new_breadcrumbs = Self::new_breadcrumbs_partial(
let new_breadcrumbs = self.new_breadcrumbs_partial(
breadcrumbs,
breadcrumbs,
None,
@@ -327,7 +327,7 @@ impl<'a> DustRenderer<'a> {
return Ok(rendered_content);
} else {
let injected_context = ParametersContext::new(breadcrumbs, &partial.params);
let new_breadcrumbs = Self::new_breadcrumbs_partial(
let new_breadcrumbs = self.new_breadcrumbs_partial(
breadcrumbs,
breadcrumbs,
Some(&injected_context),
@@ -346,7 +346,7 @@ impl<'a> DustRenderer<'a> {
return Ok("".to_owned());
}
DustTag::DTBlock(named_block) => {
let new_breadcrumbs = Self::new_breadcrumbs_partial(
let new_breadcrumbs = self.new_breadcrumbs_partial(
breadcrumbs,
blocks.breadcrumbs,
None,
@@ -366,7 +366,7 @@ impl<'a> DustRenderer<'a> {
};
}
DustTag::DTHelperEquals(parameterized_block) => {
let new_breadcrumbs = Self::new_breadcrumbs_partial(
let new_breadcrumbs = self.new_breadcrumbs_partial(
breadcrumbs,
breadcrumbs,
None,
@@ -395,12 +395,12 @@ impl<'a> DustRenderer<'a> {
let left_side: Result<&dyn ContextElement, WalkError> =
match Self::get_rval(breadcrumbs, &param_map, "key") {
None => return Ok("".to_owned()),
Some(res) => res.map(|ice| ice.into_context_element(breadcrumbs)),
Some(res) => res.map(|ice| ice.into_context_element(self, breadcrumbs)),
};
let right_side: Result<&dyn ContextElement, WalkError> =
Self::get_rval(breadcrumbs, &param_map, "value")
.unwrap_or(Err(WalkError::CantWalk))
.map(|ice| ice.into_context_element(breadcrumbs));
.map(|ice| ice.into_context_element(self, breadcrumbs));
if left_side == right_side {
return self.render_maybe_body(
@@ -417,7 +417,7 @@ impl<'a> DustRenderer<'a> {
}
}
DustTag::DTHelperNotEquals(parameterized_block) => {
let new_breadcrumbs = Self::new_breadcrumbs_partial(
let new_breadcrumbs = self.new_breadcrumbs_partial(
breadcrumbs,
breadcrumbs,
None,
@@ -446,12 +446,12 @@ impl<'a> DustRenderer<'a> {
let left_side: Result<&dyn ContextElement, WalkError> =
match Self::get_rval(breadcrumbs, &param_map, "key") {
None => return Ok("".to_owned()),
Some(res) => res.map(|ice| ice.into_context_element(breadcrumbs)),
Some(res) => res.map(|ice| ice.into_context_element(self, breadcrumbs)),
};
let right_side: Result<&dyn ContextElement, WalkError> =
Self::get_rval(breadcrumbs, &param_map, "value")
.unwrap_or(Err(WalkError::CantWalk))
.map(|ice| ice.into_context_element(breadcrumbs));
.map(|ice| ice.into_context_element(self, breadcrumbs));
if left_side != right_side {
return self.render_maybe_body(
&parameterized_block.contents,
@@ -467,7 +467,7 @@ impl<'a> DustRenderer<'a> {
}
}
DustTag::DTHelperGreaterThan(parameterized_block) => {
let new_breadcrumbs = Self::new_breadcrumbs_partial(
let new_breadcrumbs = self.new_breadcrumbs_partial(
breadcrumbs,
breadcrumbs,
None,
@@ -478,12 +478,12 @@ impl<'a> DustRenderer<'a> {
let left_side: Result<&dyn ContextElement, WalkError> =
match Self::get_rval(breadcrumbs, &param_map, "key") {
None => return Ok("".to_owned()),
Some(res) => res.map(|ice| ice.into_context_element(breadcrumbs)),
Some(res) => res.map(|ice| ice.into_context_element(self, breadcrumbs)),
};
let right_side: Result<&dyn ContextElement, WalkError> =
Self::get_rval(breadcrumbs, &param_map, "value")
.unwrap_or(Err(WalkError::CantWalk))
.map(|ice| ice.into_context_element(breadcrumbs));
.map(|ice| ice.into_context_element(self, breadcrumbs));
match (left_side, right_side) {
(Err(_), _) | (_, Err(_)) => {
return self.render_maybe_body(
@@ -510,7 +510,7 @@ impl<'a> DustRenderer<'a> {
}
}
DustTag::DTHelperGreaterThanOrEquals(parameterized_block) => {
let new_breadcrumbs = Self::new_breadcrumbs_partial(
let new_breadcrumbs = self.new_breadcrumbs_partial(
breadcrumbs,
breadcrumbs,
None,
@@ -521,12 +521,12 @@ impl<'a> DustRenderer<'a> {
let left_side: Result<&dyn ContextElement, WalkError> =
match Self::get_rval(breadcrumbs, &param_map, "key") {
None => return Ok("".to_owned()),
Some(res) => res.map(|ice| ice.into_context_element(breadcrumbs)),
Some(res) => res.map(|ice| ice.into_context_element(self, breadcrumbs)),
};
let right_side: Result<&dyn ContextElement, WalkError> =
Self::get_rval(breadcrumbs, &param_map, "value")
.unwrap_or(Err(WalkError::CantWalk))
.map(|ice| ice.into_context_element(breadcrumbs));
.map(|ice| ice.into_context_element(self, breadcrumbs));
match (left_side, right_side) {
(Err(_), _) | (_, Err(_)) => {
return self.render_maybe_body(
@@ -553,7 +553,7 @@ impl<'a> DustRenderer<'a> {
}
}
DustTag::DTHelperLessThan(parameterized_block) => {
let new_breadcrumbs = Self::new_breadcrumbs_partial(
let new_breadcrumbs = self.new_breadcrumbs_partial(
breadcrumbs,
breadcrumbs,
None,
@@ -564,12 +564,12 @@ impl<'a> DustRenderer<'a> {
let left_side: Result<&dyn ContextElement, WalkError> =
match Self::get_rval(breadcrumbs, &param_map, "key") {
None => return Ok("".to_owned()),
Some(res) => res.map(|ice| ice.into_context_element(breadcrumbs)),
Some(res) => res.map(|ice| ice.into_context_element(self, breadcrumbs)),
};
let right_side: Result<&dyn ContextElement, WalkError> =
Self::get_rval(breadcrumbs, &param_map, "value")
.unwrap_or(Err(WalkError::CantWalk))
.map(|ice| ice.into_context_element(breadcrumbs));
.map(|ice| ice.into_context_element(self, breadcrumbs));
match (left_side, right_side) {
(Err(_), _) | (_, Err(_)) => {
return self.render_maybe_body(
@@ -596,7 +596,7 @@ impl<'a> DustRenderer<'a> {
}
}
DustTag::DTHelperLessThanOrEquals(parameterized_block) => {
let new_breadcrumbs = Self::new_breadcrumbs_partial(
let new_breadcrumbs = self.new_breadcrumbs_partial(
breadcrumbs,
breadcrumbs,
None,
@@ -607,12 +607,12 @@ impl<'a> DustRenderer<'a> {
let left_side: Result<&dyn ContextElement, WalkError> =
match Self::get_rval(breadcrumbs, &param_map, "key") {
None => return Ok("".to_owned()),
Some(res) => res.map(|ice| ice.into_context_element(breadcrumbs)),
Some(res) => res.map(|ice| ice.into_context_element(self, breadcrumbs)),
};
let right_side: Result<&dyn ContextElement, WalkError> =
Self::get_rval(breadcrumbs, &param_map, "value")
.unwrap_or(Err(WalkError::CantWalk))
.map(|ice| ice.into_context_element(breadcrumbs));
.map(|ice| ice.into_context_element(self, breadcrumbs));
match (left_side, right_side) {
(Err(_), _) | (_, Err(_)) => {
return self.render_maybe_body(
@@ -707,6 +707,7 @@ impl<'a> DustRenderer<'a> {
}
fn new_breadcrumbs_section<'b>(
&self,
breadcrumbs: &'b Vec<&'b dyn IntoContextElement>,
index_context: Option<&'b dyn IntoContextElement>,
injected_context: Option<&'b dyn IntoContextElement>,
@@ -731,7 +732,7 @@ impl<'a> DustRenderer<'a> {
};
explicit_context.as_ref().map(|path| {
walk_path(breadcrumbs, &path.keys)
.map(|ice| ice.into_context_element(breadcrumbs))
.map(|ice| ice.into_context_element(self, breadcrumbs))
.map(|val| {
if val.is_truthy() {
new_stack.push(val.from_context_element())
@@ -745,6 +746,7 @@ impl<'a> DustRenderer<'a> {
}
fn new_breadcrumbs_partial<'b>(
&self,
breadcrumbs: &'b Vec<&'b dyn IntoContextElement>,
explicit_context_breadcrumbs: &'b Vec<&'b dyn IntoContextElement>,
injected_context: Option<&'b dyn IntoContextElement>,
@@ -778,7 +780,7 @@ impl<'a> DustRenderer<'a> {
explicit_context.as_ref().map(|path| {
walk_path(explicit_context_breadcrumbs, &path.keys)
// TODO should resolving the value here use explicit_context_breadcrumbs or breadcrumbs?
.map(|ice| ice.into_context_element(explicit_context_breadcrumbs))
.map(|ice| ice.into_context_element(self, explicit_context_breadcrumbs))
.map(|val| {
if val.is_truthy() {
new_stack.push(val.from_context_element())