rusteal_codegen/rust_gen/
mod.rs1pub mod enums;
4pub mod structs;
5pub mod classes;
6pub mod properties;
7pub mod delegates;
8pub mod module;
9pub mod func_ids;
10pub mod param_helpers;
11pub mod cargo_toml;
12pub mod manual;
13pub mod prelude;
14
15use std::path::Path;
16
17use crate::context::CodegenContext;
18
19pub fn generate(ctx: &CodegenContext, out_dir: &Path) {
21 std::fs::create_dir_all(out_dir).expect("Failed to create Rust output directory");
23
24 for module_name in ctx.enabled_modules.iter() {
26 let module_dir = out_dir.join(module_name);
27 if module_dir.exists() {
30 std::fs::remove_dir_all(&module_dir).expect("Failed to clear module directory");
31 }
32 std::fs::create_dir_all(&module_dir).expect("Failed to create module directory");
33
34 if let Some(module_enums) = ctx.module_enums.get(module_name) {
36 for e in module_enums {
37 let code = enums::generate_enum(e);
38 let filename = crate::naming::to_snake_case(&e.name) + ".rs";
39 std::fs::write(module_dir.join(&filename), code)
40 .unwrap_or_else(|err| panic!("Failed to write {filename}: {err}"));
41 }
42 }
43
44 if let Some(module_structs) = ctx.module_structs.get(module_name) {
46 for s in module_structs {
47 let code = structs::generate_struct(s, ctx);
48 let filename = crate::naming::to_snake_case(&s.name) + ".rs";
49 std::fs::write(module_dir.join(&filename), code)
50 .unwrap_or_else(|err| panic!("Failed to write {filename}: {err}"));
51 }
52 }
53
54 if let Some(module_classes) = ctx.module_classes.get(module_name) {
56 for c in module_classes {
57 let code = classes::generate_class(c, ctx);
58 let filename = crate::naming::to_snake_case(&c.name) + ".rs";
59 std::fs::write(module_dir.join(&filename), code)
60 .unwrap_or_else(|err| panic!("Failed to write {filename}: {err}"));
61 }
62 }
63
64 let mod_code = module::generate_module_mod(
66 module_name,
67 ctx.module_enums.get(module_name).map(|v| v.as_slice()),
68 ctx.module_structs.get(module_name).map(|v| v.as_slice()),
69 ctx.module_classes.get(module_name).map(|v| v.as_slice()),
70 );
71 std::fs::write(module_dir.join("mod.rs"), mod_code)
72 .expect("Failed to write module mod.rs");
73 }
74
75 let func_ids_code = func_ids::generate_rust_func_ids(&ctx.func_table);
77 std::fs::write(out_dir.join("func_ids.rs"), func_ids_code)
78 .expect("Failed to write func_ids.rs");
79
80 let lib_code = module::generate_lib_rs(ctx);
82 std::fs::write(out_dir.join("lib.rs"), lib_code).expect("Failed to write lib.rs");
83}