Avoid generating files for empty modules

This commit is contained in:
a2x
2024-04-07 18:23:52 +10:00
parent 9f37324266
commit 4944a3a630
72 changed files with 136 additions and 209 deletions

View File

@@ -266,42 +266,46 @@ fn read_type_scopes(
) -> Result<Vec<TypeScope>> {
let type_scopes = &schema_system.type_scopes;
(0..type_scopes.size)
.map(|i| {
let type_scope_ptr = type_scopes.element(process, i as _)?;
let type_scope = type_scope_ptr.read(process)?;
(0..type_scopes.size).try_fold(Vec::new(), |mut acc, i| {
let type_scope_ptr = type_scopes.element(process, i as _)?;
let type_scope = type_scope_ptr.read(process)?;
let module_name = unsafe { CStr::from_ptr(type_scope.name.as_ptr()) }
.to_string_lossy()
.to_string();
let module_name = unsafe { CStr::from_ptr(type_scope.name.as_ptr()) }
.to_string_lossy()
.to_string();
let classes: Vec<_> = type_scope
.class_bindings
.elements(process)?
.iter()
.filter_map(|ptr| read_class_binding(process, *ptr).ok())
.collect();
let classes: Vec<_> = type_scope
.class_bindings
.elements(process)?
.iter()
.filter_map(|ptr| read_class_binding(process, *ptr).ok())
.collect();
let enums: Vec<_> = type_scope
.enum_bindings
.elements(process)?
.iter()
.filter_map(|ptr| read_enum_binding(process, *ptr).ok())
.collect();
let enums: Vec<_> = type_scope
.enum_bindings
.elements(process)?
.iter()
.filter_map(|ptr| read_enum_binding(process, *ptr).ok())
.collect();
debug!(
"found type scope: {} at {:#X} (classes count: {}) (enums count: {})",
module_name,
type_scope_ptr.to_umem(),
classes.len(),
enums.len()
);
if classes.is_empty() && enums.is_empty() {
return Ok(acc);
}
Ok(TypeScope {
module_name,
classes,
enums,
})
})
.collect()
debug!(
"found type scope: {} at {:#X} (classes count: {}) (enums count: {})",
module_name,
type_scope_ptr.to_umem(),
classes.len(),
enums.len(),
);
acc.push(TypeScope {
module_name,
classes,
enums,
});
Ok(acc)
})
}

View File

@@ -234,10 +234,10 @@ impl Results {
self.offsets
.iter()
.find_map(|(module_name, offsets)| {
let (_name, value) = offsets.iter().find(|(name, _)| *name == "dwBuildNumber")?;
let module = process.module_by_name(module_name).ok()?;
let offset = offsets.iter().find(|(name, _)| *name == "dwBuildNumber")?;
process.read(module.base + value).ok()
process.read(module.base + offset.1).ok()
})
.ok_or(Error::Other("unable to read build number"))
}

View File

@@ -15,11 +15,6 @@ impl CodeGen for SchemaMap {
self.write_content(results, indent_size, |fmt| {
fmt.block("namespace CS2Dumper.Schemas", false, |fmt| {
for (module_name, (classes, enums)) in self {
// Skip empty modules.
if classes.is_empty() && enums.is_empty() {
continue;
}
writeln!(fmt, "// Module: {}", module_name)?;
writeln!(fmt, "// Classes count: {}", classes.len())?;
writeln!(fmt, "// Enums count: {}", enums.len())?;
@@ -116,11 +111,6 @@ impl CodeGen for SchemaMap {
fmt.block("namespace cs2_dumper", false, |fmt| {
fmt.block("namespace schemas", false, |fmt| {
for (module_name, (classes, enums)) in self {
// Skip empty modules.
if classes.is_empty() && enums.is_empty() {
continue;
}
writeln!(fmt, "// Module: {}", module_name)?;
writeln!(fmt, "// Classes count: {}", classes.len())?;
writeln!(fmt, "// Enums count: {}", enums.len())?;
@@ -302,11 +292,6 @@ impl CodeGen for SchemaMap {
fmt.block("pub mod cs2_dumper", false, |fmt| {
fmt.block("pub mod schemas", false, |fmt| {
for (module_name, (classes, enums)) in self {
// Skip empty modules.
if classes.is_empty() && enums.is_empty() {
continue;
}
writeln!(fmt, "// Module: {}", module_name)?;
writeln!(fmt, "// Classes count: {}", classes.len())?;
writeln!(fmt, "// Enums count: {}", enums.len())?;