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), }) } }