From 9f3ada020ee7af61b80be24c0fb2f9a0b0a5a0bd Mon Sep 17 00:00:00 2001 From: Nadrieril Date: Tue, 10 Sep 2019 14:21:09 +0200 Subject: Use match_inputs for parser entrypoint --- dhall_syntax/src/parser.rs | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'dhall_syntax') diff --git a/dhall_syntax/src/parser.rs b/dhall_syntax/src/parser.rs index 761795a..15515f0 100644 --- a/dhall_syntax/src/parser.rs +++ b/dhall_syntax/src/parser.rs @@ -21,6 +21,8 @@ type ParsedText = InterpolatedText>; type ParsedTextContents = InterpolatedTextContents>; type ParseInput<'input, 'data> = pest_consume::ParseInput<'input, 'data, Rule, Rc>; +type ParseInputs<'input, 'data> = + pest_consume::ParseInputs<'input, 'data, Rule, Rc>; pub type ParseError = pest::error::Error; pub type ParseResult = Result; @@ -152,6 +154,15 @@ struct Parsers; #[make_parser(Rule)] impl Parsers { + fn entrypoint(input_str: &str) -> ParseResult> { + let pairs = DhallParser::parse(Rule::final_expression, input_str)?; + let rc_input_str = input_str.to_string().into(); + let inputs = ParseInputs::new(input_str, pairs, &rc_input_str); + Ok(match_inputs!(inputs; + [expression(e)] => e, + )) + } + fn EOI(_input: ParseInput) -> ParseResult<()> { Ok(()) } @@ -939,6 +950,7 @@ impl Parsers { )) } + #[alias(expression)] fn final_expression(input: ParseInput) -> ParseResult> { Ok(match_inputs!(input.children(); [expression(e), EOI(_)] => e @@ -947,11 +959,5 @@ impl Parsers { } pub fn parse_expr(input_str: &str) -> ParseResult> { - let mut pairs = DhallParser::parse(Rule::final_expression, input_str)?; - // TODO: proper errors - let pair = pairs.next().unwrap(); - assert_eq!(pairs.next(), None); - let rc_input_str = input_str.to_string().into(); - let input = ParseInput::new(pair, &rc_input_str); - Parsers::final_expression(input) + Parsers::entrypoint(input_str) } -- cgit v1.2.3