devalang_core/core/builder/
mod.rs1use crate::core::audio::renderer::render_audio_with_modules;
2use crate::core::parser::statement::Statement;
3use crate::core::store::global::GlobalStore;
4use crate::utils::logger::Logger;
5use std::io::Write;
6use std::{collections::HashMap, fs::create_dir_all};
7
8pub struct Builder {}
9
10impl Builder {
11 pub fn new() -> Self {
12 Builder {}
13 }
14
15 pub fn build_ast(
16 &self,
17 modules: &HashMap<String, Vec<Statement>>,
18 out_dir: &str,
19 compress: bool,
20 ) {
21 for (name, statements) in modules {
22 let formatted_name = name.split("/").last().unwrap_or(name);
23 let formatted_name = formatted_name.replace(".deva", "");
24
25 create_dir_all(format!("{}/ast", out_dir)).expect("Failed to create AST directory");
26
27 let file_path = format!("{}/ast/{}.json", out_dir, formatted_name);
28 let mut file = std::fs::File::create(file_path).expect("Failed to create AST file");
29 let content = if compress {
30 serde_json::to_string(&statements).expect("Failed to serialize AST")
31 } else {
32 serde_json::to_string_pretty(&statements).expect("Failed to serialize AST")
33 };
34
35 file.write_all(content.as_bytes())
36 .expect("Failed to write AST to file");
37 }
38 }
39
40 pub fn build_audio(
41 &self,
42 modules: &HashMap<String, Vec<Statement>>,
43 normalized_output_dir: &str,
44 global_store: &mut GlobalStore,
45 ) {
46 let logger = Logger::new();
47
48 let audio_engines =
49 render_audio_with_modules(modules.clone(), &normalized_output_dir, global_store);
50
51 create_dir_all(format!("{}/audio", normalized_output_dir))
52 .expect("Failed to create audio directory");
53
54 for (module_name, mut audio_engine) in audio_engines {
55 let formatted_module_name = module_name
56 .split('/')
57 .last()
58 .unwrap_or(&module_name)
59 .replace(".deva", "");
60
61 let output_path = format!(
62 "{}/audio/{}.wav",
63 normalized_output_dir, formatted_module_name
64 );
65
66 match audio_engine.generate_wav_file(&output_path) {
67 Ok(_) => {}
68 Err(msg) => {
69 logger.log_error_with_stacktrace(
70 &format!(
71 "Unable to generate WAV file for module '{}': {}",
72 formatted_module_name, msg
73 ),
74 &module_name,
75 );
76 }
77 }
78 }
79 }
80}