From 30bf5e07e52142a154a5660574213e59e0363ada Mon Sep 17 00:00:00 2001 From: metamuffin Date: Mon, 10 Mar 2025 20:45:18 +0100 Subject: type graph --- src/assets.rs | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/assets.rs (limited to 'src/assets.rs') diff --git a/src/assets.rs b/src/assets.rs new file mode 100644 index 0000000..a272920 --- /dev/null +++ b/src/assets.rs @@ -0,0 +1,35 @@ +use crate::object::Value; +use anyhow::Result; +use std::collections::BTreeMap; + +pub enum AssetValue { + Value(Value), + Array(Vec), + Object { + class: String, + fields: BTreeMap, + }, +} + +impl AssetValue { + pub fn from_value(value: Value) -> Result { + Ok(match value { + Value::Array(elems) => Self::Array( + elems + .into_iter() + .map(|e| AssetValue::from_value(e)) + .collect::>>()?, + ), + Value::Object { class, fields } => match class.as_str() { + _ => Self::Object { + class, + fields: fields + .into_iter() + .map(|(k, v)| Ok((k, AssetValue::from_value(v)?))) + .collect::>>()?, + }, + }, + x => Self::Value(x), + }) + } +} -- cgit v1.2.3-70-g09d2