shrs_vi/
parser.rs

1use thiserror::Error;
2
3use crate::{ast, grammar::CommandParser};
4
5// TODO better errors for unsuccessful parses
6#[derive(Error, Debug)]
7pub enum Error {
8    #[error("unsuccessful parse")]
9    UnsuccessfulParse,
10}
11
12pub struct Parser {
13    parser: CommandParser,
14}
15
16impl Default for Parser {
17    fn default() -> Self {
18        Parser {
19            parser: CommandParser::new(),
20        }
21    }
22}
23
24impl Parser {
25    pub fn parse(&mut self, input: &str) -> Result<ast::Command, Error> {
26        self.parser
27            .parse(input)
28            .map_err(|_| Error::UnsuccessfulParse)
29    }
30}