aboutsummaryrefslogtreecommitdiff
path: root/src/object
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-03-13 17:59:49 +0100
committermetamuffin <metamuffin@disroot.org>2025-03-13 17:59:49 +0100
commit70d22e5162afa1b81f976acd1db534834010d3b8 (patch)
tree92982d4570eb459bb14f7a9c58bcb15de4e4cd9d /src/object
parent55dae4b68013a5c091abba86c725300bccfe1459 (diff)
downloadunity-tools-70d22e5162afa1b81f976acd1db534834010d3b8.tar
unity-tools-70d22e5162afa1b81f976acd1db534834010d3b8.tar.bz2
unity-tools-70d22e5162afa1b81f976acd1db534834010d3b8.tar.zst
material parser
Diffstat (limited to 'src/object')
-rw-r--r--src/object/parser.rs16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/object/parser.rs b/src/object/parser.rs
index 5879e9a..d80e38c 100644
--- a/src/object/parser.rs
+++ b/src/object/parser.rs
@@ -90,3 +90,19 @@ impl Value {
self.as_class("vector").ok()?.remove("Array")?.as_array()
}
}
+
+impl<K: FromValue + Ord, V: FromValue> FromValue for BTreeMap<K, V> {
+ fn from_value(v: Value) -> Result<Self> {
+ v.as_class("map")?
+ .remove("Array")
+ .ok_or(anyhow!("map is missing Array field"))?
+ .as_array()
+ .ok_or(anyhow!("map Array field is not an array"))?
+ .into_iter()
+ .map(|e| {
+ let mut fields = e.as_class("pair")?;
+ Ok((fields.field("first")?, fields.field("second")?))
+ })
+ .collect::<Result<BTreeMap<_, _>>>()
+ }
+}