(
rel_chain: &mut Vec<(RelPattern, NodePattern)>,
first_node: &mut Option<NodePattern>,
pair: Pair<'_, Rule>,
un_named_counter: &mut usize,
)
| 527 | } |
| 528 | |
| 529 | fn parse_pattern_element( |
| 530 | rel_chain: &mut Vec<(RelPattern, NodePattern)>, |
| 531 | first_node: &mut Option<NodePattern>, |
| 532 | pair: Pair<'_, Rule>, |
| 533 | un_named_counter: &mut usize, |
| 534 | ) -> Result<(), ParseError> { |
| 535 | let mut rels = vec![]; |
| 536 | let mut nodes = vec![]; |
| 537 | |
| 538 | for pair in pair.into_inner() { |
| 539 | match pair.as_rule() { |
| 540 | Rule::NodePattern => { |
| 541 | if first_node.is_none() { |
| 542 | let np = parse_node_pattern(pair, un_named_counter)?; |
| 543 | *first_node = Some(np); |
| 544 | } else { |
| 545 | nodes.push(parse_node_pattern(pair, un_named_counter)?); |
| 546 | } |
| 547 | } |
| 548 | Rule::RelationshipPattern => { |
| 549 | rels.push(parse_rel_pattern(pair, un_named_counter)?); |
| 550 | } |
| 551 | rule => return unsupported("parse_pattern_element", &rule), |
| 552 | } |
| 553 | } |
| 554 | // interleave nodes and rels |
| 555 | |
| 556 | for hop in rels.into_iter().zip(nodes) { |
| 557 | rel_chain.push(hop); |
| 558 | } |
| 559 | |
| 560 | Ok(()) |
| 561 | } |
| 562 | |
| 563 | fn parse_rel_detail( |
| 564 | pair: Pair<'_, Rule>, |
no test coverage detected