cow_parser/
lib.rs

1use pest::error::Error as PestError;
2use thiserror::Error;
3
4#[derive(Error, Debug)]
5pub enum ParseError {
6    #[error("Grammar parsing error: {0}")]
7    Pest(#[from] PestError<Rule>),
8}
9
10use pest_derive::Parser;
11
12#[derive(Parser)]
13#[grammar = "cow.pest"]
14pub struct CowParser;
15
16use pest::Parser;
17
18pub fn parse_cow_source(source: &str) -> Result<pest::iterators::Pairs<Rule>, ParseError> {
19    let pairs = CowParser::parse(Rule::program, source)?;
20    Ok(pairs)
21}
22
23pub fn get_commands(source: &str) -> Result<Vec<String>, ParseError> {
24    let pairs = CowParser::parse(Rule::program, source)?;
25
26    let commands = pairs
27        .filter(|pair| pair.as_rule() == Rule::command)
28        .map(|pair| pair.as_str().to_string())
29        .collect();
30
31    Ok(commands)
32}