envuse_parser/envuse/
create_program.rs

1use super::super::parser::ast::AST;
2use super::super::parser::tokenizer::Tokenizer;
3use super::display_program_error::display_program_error;
4use super::program::Program;
5
6pub fn create_program<T: ToString>(
7    source: T,
8    location: Option<T>,
9) -> Result<Program, Box<dyn std::error::Error>> {
10    let location_val = location.map(|t| t.to_string());
11
12    let result_program: Result<Program, Box<dyn std::error::Error>> = try {
13        Program {
14            location: location_val.clone(),
15            source: source.to_string(),
16            ast: AST::parse(Tokenizer::parse(source.to_string())?)?,
17        }
18    };
19
20    display_program_error(result_program, source, location_val)
21}