Some improvements

This commit is contained in:
a2x
2023-10-05 19:24:14 +10:00
parent 85e6224275
commit d392a319ac
79 changed files with 653 additions and 426 deletions

View File

@@ -1,36 +1,14 @@
use std::collections::HashMap;
use regex::Regex;
use crate::builder::FileBuilderEnum;
use crate::dumpers::Entry;
use crate::error::Result;
use crate::remote::Process;
use crate::sdk::SchemaSystem;
use super::{generate_file, Entries};
use super::{generate_files, Entries};
pub fn dump_schemas(builders: &mut Vec<FileBuilderEnum>, process: &Process) -> Result<()> {
let schema_system = SchemaSystem::new(&process)?;
let type_map = HashMap::from([
("uint8", "uint8_t"),
("uint16", "uint16_t"),
("uint32", "uint32_t"),
("uint64", "uint64_t"),
("int8", "int8_t"),
("int16", "int16_t"),
("int32", "int32_t"),
("int64", "int64_t"),
("float32", "float"),
("float64", "double"),
]);
let regex_map: HashMap<String, Regex> = type_map
.iter()
.map(|(k, _v)| ((k.to_string()), Regex::new(&format!(r"\b{}\b", k)).unwrap()))
.collect();
for type_scope in schema_system.type_scopes()? {
let module_name = type_scope.module_name()?;
@@ -44,20 +22,13 @@ pub fn dump_schemas(builders: &mut Vec<FileBuilderEnum>, process: &Process) -> R
for field in class.fields()? {
let field_name = field.name()?;
let field_offset = field.offset()?;
let mut type_name = field.r#type()?.name()?.replace(" ", "");
for k in type_map.keys() {
let re = &regex_map[*k];
type_name = re.replace_all(&type_name, type_map[*k]).to_string();
}
let field_type_name = field.r#type()?.name()?;
log::debug!(
" └─ {} = {:#X} // {}",
field_name,
field_offset,
type_name
field_type_name
);
entries
@@ -66,16 +37,12 @@ pub fn dump_schemas(builders: &mut Vec<FileBuilderEnum>, process: &Process) -> R
.push(Entry {
name: field_name,
value: field_offset as usize,
comment: Some(type_name),
comment: Some(field_type_name),
});
}
}
if !entries.is_empty() {
for builder in builders.iter_mut() {
generate_file(builder, &module_name, &entries)?;
}
}
generate_files(builders, &entries, &module_name)?;
}
Ok(())