diff options
author | metamuffin <metamuffin@disroot.org> | 2025-03-13 17:59:49 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-03-13 17:59:49 +0100 |
commit | 70d22e5162afa1b81f976acd1db534834010d3b8 (patch) | |
tree | 92982d4570eb459bb14f7a9c58bcb15de4e4cd9d /src/object/parser.rs | |
parent | 55dae4b68013a5c091abba86c725300bccfe1459 (diff) | |
download | unity-tools-70d22e5162afa1b81f976acd1db534834010d3b8.tar unity-tools-70d22e5162afa1b81f976acd1db534834010d3b8.tar.bz2 unity-tools-70d22e5162afa1b81f976acd1db534834010d3b8.tar.zst |
material parser
Diffstat (limited to 'src/object/parser.rs')
-rw-r--r-- | src/object/parser.rs | 16 |
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<_, _>>>() + } +} |