mirror of
https://github.com/a2x/cs2-dumper.git
synced 2025-09-18 12:50:01 +08:00
Avoid generating files for empty modules
This commit is contained in:
@@ -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)
|
||||
})
|
||||
}
|
||||
|
@@ -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"))
|
||||
}
|
||||
|
@@ -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())?;
|
||||
|
Reference in New Issue
Block a user