@@ -14,18 +14,15 @@ struct PathParser;
14
14
pub fn parse ( selector : & str ) -> Result < Path , String > {
15
15
let selector_rule = PathParser :: parse ( Rule :: selector, selector)
16
16
. map_err ( |e| format ! ( "{}" , e) ) ?
17
- . next ( )
17
+ . nth ( 1 )
18
18
. unwrap ( ) ;
19
19
20
- let mut res = Path :: Root ;
21
- for r in selector_rule. into_inner ( ) {
22
- res = match r. as_rule ( ) {
23
- Rule :: rootSelector => res, // TODO: fix grammar so that this is a silent rule since we don't need it
24
- Rule :: matcher => Path :: Sel ( Box :: new ( res) , parse_selector ( r) ) ,
20
+ Ok ( selector_rule
21
+ . into_inner ( )
22
+ . fold ( Path :: Root , |prev, r| match r. as_rule ( ) {
23
+ Rule :: matcher => Path :: Sel ( Box :: new ( prev) , parse_selector ( r) ) ,
25
24
_ => panic ! ( "invalid parse tree {:?}" , r) ,
26
- }
27
- }
28
- Ok ( res)
25
+ } ) )
29
26
}
30
27
31
28
fn parse_selector ( matcher_rule : pest:: iterators:: Pair < Rule > ) -> Selector {
@@ -41,6 +38,7 @@ fn parse_selector(matcher_rule: pest::iterators::Pair<Rule>) -> Selector {
41
38
42
39
fn parse_child_name ( matcher_rule : pest:: iterators:: Pair < Rule > ) -> String {
43
40
let r = matcher_rule. into_inner ( ) . next ( ) . unwrap ( ) ;
41
+
44
42
match r. as_rule ( ) {
45
43
Rule :: childName => r. as_str ( ) . to_owned ( ) ,
46
44
_ => panic ! ( "invalid parse tree {:?}" , r) ,
@@ -61,15 +59,13 @@ fn parse_union_indices(matcher_rule: pest::iterators::Pair<Rule>) -> Vec<Index>
61
59
}
62
60
63
61
fn parse_union_child ( matcher_rule : pest:: iterators:: Pair < Rule > ) -> Vec < Index > {
64
- let mut res = Vec :: new ( ) ;
65
- for r in matcher_rule. into_inner ( ) {
62
+ matcher_rule. into_inner ( ) . map ( |r|
66
63
match r. as_rule ( ) {
67
- Rule :: doubleInner => res . push ( Index :: Field ( unescape ( r. as_str ( ) ) ) ) ,
68
- Rule :: singleInner => res . push ( Index :: Field ( unescape_single ( r. as_str ( ) ) ) ) ,
64
+ Rule :: doubleInner => Index :: Field ( unescape ( r. as_str ( ) ) ) ,
65
+ Rule :: singleInner => Index :: Field ( unescape_single ( r. as_str ( ) ) ) ,
69
66
_ => panic ! ( "invalid parse tree {:?}" , r) ,
70
67
}
71
- }
72
- res
68
+ ) . collect ( )
73
69
}
74
70
75
71
fn parse_union_array_index ( matcher_rule : pest:: iterators:: Pair < Rule > ) -> Index {
0 commit comments