malachi/parser/
command.rs1use nom::Finish;
7
8use super::{
9 capture::{
10 parse_capture,
11 parse_group,
12 parse_priority_group,
13 },
14 literal::parse_literal,
15 prelude::*,
16 Segment,
17 SyntaxError,
18};
19
20pub fn parse_segment(input: &'_ str) -> IResult<&'_ str, Segment<'_>> {
21 alt((
22 map(parse_priority_group, Segment::PriorityGroup),
24 map(parse_group, Segment::Group),
26 map(parse_capture, Segment::Capture),
28 map(parse_literal, Segment::Text),
30 ))(input)
31}
32
33fn parse_cmd(input: &'_ str) -> IResult<&'_ str, Vec<Segment<'_>>> {
34 many0(wrap_space0(parse_segment))(input)
35}
36
37pub fn parse_command(input: &'_ str) -> Result<Vec<Segment<'_>>, SyntaxError> {
38 parse_cmd(input)
39 .finish()
40 .map_err(|e| SyntaxError::from_nom(e, input))
41 .map(|tup| tup.1)
42}