1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use crate::{Error, Nodes};
use pest::Parser as PestParser;
use pest::RuleType;
pub trait Parser {
type Rule: RuleType;
#[doc(hidden)]
type AliasedRule: RuleType;
type Parser: PestParser<Self::Rule>;
#[doc(hidden)]
fn rule_alias(rule: Self::Rule) -> Self::AliasedRule;
#[doc(hidden)]
fn allows_shortcut(rule: Self::Rule) -> bool;
fn parse<'i>(
rule: Self::Rule,
input_str: &'i str,
) -> Result<Nodes<'i, Self::Rule, ()>, Error<Self::Rule>> {
Self::parse_with_userdata(rule, input_str, ())
}
fn parse_with_userdata<'i, D>(
rule: Self::Rule,
input_str: &'i str,
user_data: D,
) -> Result<Nodes<'i, Self::Rule, D>, Error<Self::Rule>> {
let pairs = Self::Parser::parse(rule, input_str)?;
Ok(Nodes::new(input_str, pairs, user_data))
}
}