aboutsummaryrefslogtreecommitdiff
path: root/src/bin/yaml.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-03-12 22:39:58 +0100
committermetamuffin <metamuffin@disroot.org>2025-03-12 22:39:58 +0100
commit5555c8bbefb4f52f5002603eb91b6c95cbdd97e4 (patch)
tree208e88359deb3cf5f7e2a4135693f12d76ad97e1 /src/bin/yaml.rs
parent4906844cbfd2717a29b434fb7d8f90c5117fddd5 (diff)
downloadunity-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.rs22
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),
+ _ => (),
+ }
+}