diff options
author | metamuffin <metamuffin@disroot.org> | 2025-03-10 20:45:18 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-03-10 20:45:18 +0100 |
commit | 30bf5e07e52142a154a5660574213e59e0363ada (patch) | |
tree | a6a619a033269ab76650a820826255acafaa9b6c /src/assets.rs | |
parent | 42a5916cf742779d016eeefd1c59efbdfab64feb (diff) | |
download | unity-tools-30bf5e07e52142a154a5660574213e59e0363ada.tar unity-tools-30bf5e07e52142a154a5660574213e59e0363ada.tar.bz2 unity-tools-30bf5e07e52142a154a5660574213e59e0363ada.tar.zst |
type graph
Diffstat (limited to 'src/assets.rs')
-rw-r--r-- | src/assets.rs | 35 |
1 files changed, 35 insertions, 0 deletions
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<AssetValue>), + Object { + class: String, + fields: BTreeMap<String, AssetValue>, + }, +} + +impl AssetValue { + pub fn from_value(value: Value) -> Result<Self> { + Ok(match value { + Value::Array(elems) => Self::Array( + elems + .into_iter() + .map(|e| AssetValue::from_value(e)) + .collect::<Result<Vec<_>>>()?, + ), + 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::<Result<BTreeMap<_, _>>>()?, + }, + }, + x => Self::Value(x), + }) + } +} |