| 30 | } |
| 31 | |
| 32 | pub fn parse_rule(input: &str) -> IResult<&str, Rule> { |
| 33 | let (input, name) = ws(parse_identifier)(input)?; |
| 34 | let (input, _) = ws(tag("as"))(input)?; |
| 35 | let (input, _) = ws(tag("match"))(input)?; |
| 36 | |
| 37 | let (input, patterns) = parse_patterns0(input)?; |
| 38 | |
| 39 | let (input, _) = ws(tag("infer"))(input)?; |
| 40 | let (input, inference_type) = parse_inference_type(input)?; |
| 41 | let (input, inferences) = parse_inferences1(input)?; |
| 42 | let (input, _) = ws(char(';'))(input)?; |
| 43 | |
| 44 | let rule = Rule { |
| 45 | name: name.to_string(), |
| 46 | patterns, |
| 47 | compute_clauses: None, |
| 48 | inference_type, |
| 49 | inferences, |
| 50 | }; |
| 51 | |
| 52 | Ok((input, rule)) |
| 53 | } |
| 54 | |
| 55 | #[cfg(test)] |
| 56 | mod tests { |