1 pub use error::ErrorKind;
2 pub use parser::Token;
3 pub use token::TokenMetadata;
4 
5 use crate::{FastHashMap, Module, ShaderStage};
6 
7 mod lex;
8 
9 mod ast;
10 use ast::Program;
11 
12 mod error;
13 pub use error::ParseError;
14 mod constants;
15 mod functions;
16 mod parser;
17 #[cfg(test)]
18 mod parser_tests;
19 mod token;
20 mod types;
21 mod variables;
22 
23 pub struct Options {
24     pub entry_points: FastHashMap<String, ShaderStage>,
25     pub defines: FastHashMap<String, String>,
26 }
27 
parse_str(source: &str, options: &Options) -> Result<Module, ParseError>28 pub fn parse_str(source: &str, options: &Options) -> Result<Module, ParseError> {
29     let mut program = Program::new(&options.entry_points);
30 
31     let lex = lex::Lexer::new(source, &options.defines);
32     let mut parser = parser::Parser::new(&mut program);
33     for token in lex {
34         parser.parse(token)?;
35     }
36     parser.end_of_input()?;
37 
38     Ok(program.module)
39 }
40