aboutsummaryrefslogtreecommitdiff
path: root/src/bin/yaml.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-03-13 20:10:32 +0100
committermetamuffin <metamuffin@disroot.org>2025-03-13 20:10:32 +0100
commit8f80baff4d18b67859eded67b8c5097324693862 (patch)
tree380c5a9bfbd427c8363032a231b1da1fb30db960 /src/bin/yaml.rs
parentd3006b6d05f7995c6a49d67401293f1266b3ea1f (diff)
downloadunity-tools-8f80baff4d18b67859eded67b8c5097324693862.tar
unity-tools-8f80baff4d18b67859eded67b8c5097324693862.tar.bz2
unity-tools-8f80baff4d18b67859eded67b8c5097324693862.tar.zst
read object abstraction
Diffstat (limited to 'src/bin/yaml.rs')
-rw-r--r--src/bin/yaml.rs46
1 files changed, 18 insertions, 28 deletions
diff --git a/src/bin/yaml.rs b/src/bin/yaml.rs
index fd3eec6..4ef8933 100644
--- a/src/bin/yaml.rs
+++ b/src/bin/yaml.rs
@@ -2,11 +2,9 @@ use serde_yml::Value;
use std::{
env::args,
fs::File,
- io::{BufReader, Seek, SeekFrom, stdout},
-};
-use unity_tools::{
- classes::HValue, object::read::read_value, serialized_file::SerializedFile, unityfs::UnityFS,
+ io::{BufReader, stdout},
};
+use unity_tools::{classes::HValue, serialized_file::SerializedFile, unityfs::UnityFS};
fn main() -> anyhow::Result<()> {
env_logger::init_from_env("LOG");
@@ -17,44 +15,36 @@ fn main() -> anyhow::Result<()> {
let node = fs.find_main_file().unwrap().to_owned();
let mut cab = fs.read(&node)?;
- let file = SerializedFile::read(&mut cab)?;
- for ob in file.objects {
- cab.seek(SeekFrom::Start(ob.data_offset))?;
- let typetree = if ob.type_id < 0 {
- unimplemented!()
- } else {
- &file.types[ob.type_id as usize]
- };
- if let Some(typetree) = &typetree.type_tree {
- if let Some(f) = &filter {
- if typetree.type_string != *f && ob.path_id.to_string() != *f {
- continue;
- }
+ let mut file = SerializedFile::read(&mut cab)?;
+ for ob in file.objects.clone() {
+ if let Some(f) = &filter {
+ if file.get_object_type_tree(&ob)?.type_string != *f && ob.path_id.to_string() != *f {
+ continue;
}
- let value = read_value(typetree, file.endianness, &mut cab)?;
- let hvalue = HValue::from_value(value)?;
+ }
+ let value = file.read_object(ob)?;
+ let hvalue = HValue::from_value(value)?;
- let mut hvalue = serde_yml::to_value(hvalue)?;
- reduce_large_arrays(&mut hvalue);
+ let mut hvalue = serde_yml::to_value(hvalue)?;
+ trim_large_arrays(&mut hvalue);
- serde_yml::to_writer(stdout(), &hvalue).unwrap();
- println!()
- }
+ serde_yml::to_writer(stdout(), &hvalue).unwrap();
+ println!()
}
Ok(())
}
-fn reduce_large_arrays(v: &mut Value) {
+fn trim_large_arrays(v: &mut Value) {
match v {
Value::Sequence(values) => {
- values.iter_mut().for_each(reduce_large_arrays);
+ values.iter_mut().for_each(trim_large_arrays);
while values.len() > 32 {
values.pop();
}
}
- Value::Mapping(mapping) => mapping.map.values_mut().for_each(reduce_large_arrays),
- Value::Tagged(tagged_value) => reduce_large_arrays(&mut tagged_value.value),
+ Value::Mapping(mapping) => mapping.map.values_mut().for_each(trim_large_arrays),
+ Value::Tagged(tagged_value) => trim_large_arrays(&mut tagged_value.value),
_ => (),
}
}