rusteal_codegen/rust_gen/
module.rs1use crate::context::CodegenContext;
2use crate::naming::{is_reserved, to_snake_case};
3use crate::schema::{ClassInfo, EnumInfo, StructInfo};
4
5pub fn generate_module_mod(
6 _module_name: &str,
7 enums: Option<&[EnumInfo]>,
8 structs: Option<&[StructInfo]>,
9 classes: Option<&[ClassInfo]>,
10) -> String {
11 let mut out = String::with_capacity(4096);
12 out.push_str("// Auto-generated by rusteal-codegen. Do not edit.\n\n");
13
14 if let Some(enums) = enums {
15 for e in enums {
16 let mod_name = to_snake_case(&e.name);
17 write_mod_use(&mut out, &mod_name);
18 }
19 }
20
21 if let Some(structs) = structs {
22 for s in structs {
23 let mod_name = to_snake_case(&s.name);
24 write_mod_use(&mut out, &mod_name);
25 }
26 }
27
28 if let Some(classes) = classes {
29 for c in classes {
30 let mod_name = to_snake_case(&c.name);
31 write_mod_use(&mut out, &mod_name);
32 }
33 }
34
35 out
36}
37
38fn write_mod_use(out: &mut String, mod_name: &str) {
39 if is_reserved(mod_name) {
40 out.push_str(&format!("#[path = \"{mod_name}.rs\"]\n"));
41 out.push_str(&format!("mod r#{mod_name};\n"));
42 out.push_str(&format!("pub use r#{mod_name}::*;\n\n"));
43 } else {
44 out.push_str(&format!("mod {mod_name};\n"));
45 out.push_str(&format!("pub use {mod_name}::*;\n\n"));
46 }
47}
48
49pub fn generate_lib_rs(ctx: &CodegenContext) -> String {
50 let mut out = String::with_capacity(1024);
51 out.push_str("// Auto-generated by rusteal-codegen. Do not edit.\n\n");
52 out.push_str("#![allow(non_camel_case_types, non_snake_case, dead_code, unused_imports)]\n");
53 out.push_str("#![allow(clippy::all)]\n\n");
54 out.push_str("pub mod func_ids;\n\n");
55
56 let mut modules: Vec<&String> = ctx.enabled_modules.iter().collect();
57 modules.sort();
58
59 for module in modules {
60 if let Some(feature) = ctx.feature_for_module(module) {
61 out.push_str(&format!(
62 "#[cfg(feature = \"{feature}\")]\npub mod {module};\n\n"
63 ));
64 } else {
65 out.push_str(&format!("pub mod {module};\n\n"));
66 }
67 }
68
69 out.push_str("pub mod manual;\n\n");
70 out.push_str("pub mod prelude;\n\n");
71
72 out
73}