Implement less-than.

This commit is contained in:
Tom Alexander 2020-05-16 19:05:03 -04:00
parent 496a5e0ac7
commit 30b7324049
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE
5 changed files with 43 additions and 7 deletions

View File

@ -38,8 +38,8 @@ pub enum DustTag<'a> {
DTHelperNotEquals(ParameterizedBlock<'a>),
DTHelperGreaterThan(ParameterizedBlock<'a>),
DTHelperLessThan(ParameterizedBlock<'a>),
DTHelperGreaterThenOrEquals(ParameterizedBlock<'a>),
DTHelperLessThenOrEquals(ParameterizedBlock<'a>),
DTHelperGreaterThanOrEquals(ParameterizedBlock<'a>),
DTHelperLessThanOrEquals(ParameterizedBlock<'a>),
}
#[derive(Clone, Debug, PartialEq)]
@ -162,8 +162,8 @@ fn dust_tag(i: &str) -> IResult<&str, DustTag> {
named_block("{+", DustTag::DTBlock),
named_block("{<", DustTag::DTInlinePartial),
partial("{>", DustTag::DTPartial),
parameterized_block("{@", "gte", DustTag::DTHelperGreaterThenOrEquals),
parameterized_block("{@", "lte", DustTag::DTHelperLessThenOrEquals),
parameterized_block("{@", "gte", DustTag::DTHelperGreaterThanOrEquals),
parameterized_block("{@", "lte", DustTag::DTHelperLessThanOrEquals),
parameterized_block("{@", "eq", DustTag::DTHelperEquals),
parameterized_block("{@", "ne", DustTag::DTHelperNotEquals),
parameterized_block("{@", "gt", DustTag::DTHelperGreaterThan),

View File

@ -139,7 +139,7 @@ fn extract_inline_partials_from_tag<'a, 'b>(
Some(body) => extract_inline_partials_from_body(blocks, &body),
};
}
DustTag::DTHelperGreaterThenOrEquals(parameterized_block) => {
DustTag::DTHelperGreaterThanOrEquals(parameterized_block) => {
match &parameterized_block.contents {
None => (),
Some(body) => extract_inline_partials_from_body(blocks, &body),
@ -149,7 +149,7 @@ fn extract_inline_partials_from_tag<'a, 'b>(
Some(body) => extract_inline_partials_from_body(blocks, &body),
};
}
DustTag::DTHelperLessThenOrEquals(parameterized_block) => {
DustTag::DTHelperLessThanOrEquals(parameterized_block) => {
match &parameterized_block.contents {
None => (),
Some(body) => extract_inline_partials_from_body(blocks, &body),

View File

@ -323,7 +323,7 @@ impl<'a> DustRenderer<'a> {
}
}
}
DustTag::DTHelperGreaterThenOrEquals(parameterized_block) => {
DustTag::DTHelperGreaterThanOrEquals(parameterized_block) => {
let param_map: HashMap<&str, &RValue<'a>> =
Self::get_rval_map(&parameterized_block.params);
let left_side: Result<&dyn ContextElement, WalkError> =
@ -359,6 +359,42 @@ impl<'a> DustRenderer<'a> {
}
}
}
DustTag::DTHelperLessThan(parameterized_block) => {
let param_map: HashMap<&str, &RValue<'a>> =
Self::get_rval_map(&parameterized_block.params);
let left_side: Result<&dyn ContextElement, WalkError> =
match Self::get_rval(breadcrumbs, &param_map, "key") {
None => return Ok("".to_owned()),
Some(res) => res,
};
let right_side: Result<&dyn ContextElement, WalkError> =
Self::get_rval(breadcrumbs, &param_map, "value")
.unwrap_or(Err(WalkError::CantWalk));
match (left_side, right_side) {
(Err(_), _) | (_, Err(_)) => {
return self.render_maybe_body(
&parameterized_block.else_contents,
breadcrumbs,
blocks,
)
}
(Ok(left_side_unwrapped), Ok(right_side_unwrapped)) => {
if left_side_unwrapped < right_side_unwrapped {
return self.render_maybe_body(
&parameterized_block.contents,
breadcrumbs,
blocks,
);
} else {
return self.render_maybe_body(
&parameterized_block.else_contents,
breadcrumbs,
blocks,
);
}
}
}
}
_ => (), // TODO: Implement the rest
}
Ok("".to_owned())