1pub mod ast;
2pub mod lexer;
3pub mod parser;
4pub mod validate;
5
6use ast::VarFile;
7use lexer::LexError;
8use parser::ParseError;
9use validate::ValidationError;
10
11#[derive(Debug)]
12pub enum Error {
13 Lex(LexError),
14 Parse(ParseError),
15 Validation(Vec<ValidationError>),
16}
17
18pub fn parse_and_validate(source: &str) -> Result<VarFile, Error> {
19 let tokens = lexer::lex(source).map_err(Error::Lex)?;
20 let var_file = parser::parse(tokens).map_err(Error::Parse)?;
21 validate::validate(&var_file).map_err(Error::Validation)?;
22 Ok(var_file)
23}