Factor out the parsing of partial template names into its own parser for reuse as an rvalue.
This commit is contained in:
parent
4932a4bb6f
commit
3352b777ae
@ -11,5 +11,13 @@
|
||||
{
|
||||
"petname": "spot"
|
||||
}
|
||||
],
|
||||
"array_petname": [
|
||||
{
|
||||
"petname": [
|
||||
"foo",
|
||||
"bar"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -6,6 +6,22 @@ Hello {name}, nice {pet}{~n}
|
||||
Hello {name}, nice {pet}{~n}
|
||||
{/people}
|
||||
|
||||
Direct Parameters{~n}
|
||||
================={~n}
|
||||
{#people name="chris" pet=petname petname="whiskers"}
|
||||
Hello {name}, nice {pet}{~n}
|
||||
{/people}
|
||||
{#people}
|
||||
{#truthy name="chris" pet=petname petname="whiskers"}
|
||||
Hello {name}, nice {pet}{~n}
|
||||
{/truthy}
|
||||
{/people}
|
||||
{#people name="chris" pet=petname petname="whiskers"}
|
||||
{#other_petname}
|
||||
Hello {name}, nice {pet}{~n}
|
||||
{/other_petname}
|
||||
{/people}
|
||||
|
||||
Reference Parameters{~n}
|
||||
===================={~n}
|
||||
{#people name="chris" pet="{petname}" petname="whiskers"}
|
||||
@ -33,20 +49,3 @@ Reference Parameters{~n}
|
||||
Hello {name}, nice {pet}{~n}
|
||||
{/other_petname}
|
||||
{/people}
|
||||
|
||||
|
||||
Direct Parameters{~n}
|
||||
================={~n}
|
||||
{#people name="chris" pet=petname petname="whiskers"}
|
||||
Hello {name}, nice {pet}{~n}
|
||||
{/people}
|
||||
{#people}
|
||||
{#truthy name="chris" pet=petname petname="whiskers"}
|
||||
Hello {name}, nice {pet}{~n}
|
||||
{/truthy}
|
||||
{/people}
|
||||
{#people name="chris" pet=petname petname="whiskers"}
|
||||
{#other_petname}
|
||||
Hello {name}, nice {pet}{~n}
|
||||
{/other_petname}
|
||||
{/people}
|
||||
|
@ -110,13 +110,14 @@ pub struct Partial<'a> {
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
pub enum OwnedLiteral {
|
||||
LString(String),
|
||||
LPositiveInteger(u64),
|
||||
LString(String),
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
pub enum RValue<'a> {
|
||||
RVPath(Path<'a>),
|
||||
// RVTemplate(Vec<PartialNameElement>),
|
||||
RVLiteral(OwnedLiteral),
|
||||
}
|
||||
|
||||
@ -308,6 +309,20 @@ fn postitive_integer_literal(i: &str) -> IResult<&str, u64> {
|
||||
)(i)
|
||||
}
|
||||
|
||||
fn template_string_rvalue(i: &str) -> IResult<&str, Vec<PartialNameElement>> {
|
||||
let (i, template_string) = verify(quoted_string, |s: &String| {
|
||||
partial_quoted_tag(s.as_str()).is_ok()
|
||||
})(i)?;
|
||||
|
||||
let (_remaining, parsed_template_elements) = partial_quoted_tag(template_string.as_str())
|
||||
.expect("A successful parse was verified earlier with a call to verify()");
|
||||
let converted_template_elements = parsed_template_elements
|
||||
.into_iter()
|
||||
.map(|e| e.into())
|
||||
.collect();
|
||||
Ok((i, converted_template_elements))
|
||||
}
|
||||
|
||||
/// Either a literal or a path to a value
|
||||
fn rvalue(i: &str) -> IResult<&str, RValue> {
|
||||
alt((
|
||||
@ -528,9 +543,7 @@ fn partial_with_quoted_tag<'a>(
|
||||
let (i, (name, maybe_explicit_context, params)) = delimited(
|
||||
tag(open_matcher),
|
||||
tuple((
|
||||
verify(quoted_string, |s: &String| {
|
||||
partial_quoted_tag(s.as_str()).is_ok()
|
||||
}),
|
||||
template_string_rvalue,
|
||||
opt(preceded(tag(":"), path)),
|
||||
opt(delimited(
|
||||
space1,
|
||||
@ -541,17 +554,10 @@ fn partial_with_quoted_tag<'a>(
|
||||
tag("/}"),
|
||||
)(i)?;
|
||||
|
||||
let (_remaining, template_name_elements) = partial_quoted_tag(name.as_str())
|
||||
.expect("A successful parse was verified earlier with a call to verify()");
|
||||
let partial_name_elements = template_name_elements
|
||||
.into_iter()
|
||||
.map(|e| e.into())
|
||||
.collect();
|
||||
|
||||
Ok((
|
||||
i,
|
||||
Partial {
|
||||
name: partial_name_elements,
|
||||
name: name,
|
||||
explicit_context: maybe_explicit_context,
|
||||
params: params.unwrap_or(Vec::new()),
|
||||
},
|
||||
|
Loading…
x
Reference in New Issue
Block a user