From 70d22e5162afa1b81f976acd1db534834010d3b8 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Thu, 13 Mar 2025 17:59:49 +0100 Subject: material parser --- src/object/parser.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/object') 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 FromValue for BTreeMap { + fn from_value(v: Value) -> Result { + 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::>>() + } +} -- cgit v1.2.3-70-g09d2