diff options
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), + _ => (), + } +} |