1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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),
})
}
}
|