diff options
author | metamuffin <metamuffin@disroot.org> | 2025-03-12 22:39:58 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-03-12 22:39:58 +0100 |
commit | 5555c8bbefb4f52f5002603eb91b6c95cbdd97e4 (patch) | |
tree | 208e88359deb3cf5f7e2a4135693f12d76ad97e1 /src/bin/yaml.rs | |
parent | 4906844cbfd2717a29b434fb7d8f90c5117fddd5 (diff) | |
download | unity-tools-5555c8bbefb4f52f5002603eb91b6c95cbdd97e4.tar unity-tools-5555c8bbefb4f52f5002603eb91b6c95cbdd97e4.tar.bz2 unity-tools-5555c8bbefb4f52f5002603eb91b6c95cbdd97e4.tar.zst |
more parsing helpers
Diffstat (limited to 'src/bin/yaml.rs')
-rw-r--r-- | src/bin/yaml.rs | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/bin/yaml.rs b/src/bin/yaml.rs index e541c62..e3b1df8 100644 --- a/src/bin/yaml.rs +++ b/src/bin/yaml.rs @@ -1,10 +1,12 @@ +use serde_yml::Value; use std::{ env::args, fs::File, io::{BufReader, Seek, SeekFrom, stdout}, }; use unity_tools::{ - classes::HValue, object::read_value, serialized_file::read_serialized_file, unityfs::UnityFS, + classes::HValue, object::read::read_value, serialized_file::read_serialized_file, + unityfs::UnityFS, }; fn main() -> anyhow::Result<()> { @@ -34,6 +36,10 @@ fn main() -> anyhow::Result<()> { } let value = read_value(typetree, file.endianness, &mut cab)?; let hvalue = HValue::from_value(value)?; + + let mut hvalue = serde_yml::to_value(hvalue)?; + reduce_large_arrays(&mut hvalue); + serde_yml::to_writer(stdout(), &hvalue).unwrap(); println!() } @@ -42,3 +48,17 @@ fn main() -> anyhow::Result<()> { Ok(()) } + +fn reduce_large_arrays(v: &mut Value) { + match v { + Value::Sequence(values) => { + values.iter_mut().for_each(reduce_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), + _ => (), + } +} |