aboutsummaryrefslogtreecommitdiff
path: root/src/classes/transform.rs
blob: 518e2483786910dede82cd0cfa2ce733d3155215 (plain)
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
use super::pptr::PPtr;
use crate::object::Value;
use anyhow::Result;
use serde::Serialize;

#[derive(Debug, Serialize)]
pub struct Transform {
    pub father: PPtr<Transform>,
    pub children: Vec<PPtr<Transform>>,
}
impl Transform {
    pub fn from_value(v: Value) -> Result<Self> {
        let mut fields = v.as_class("Transform").unwrap();
        Ok(Self {
            children: fields
                .remove("m_Children")
                .unwrap()
                .as_array()
                .unwrap()
                .into_iter()
                .map(|e| PPtr::from_value(e).unwrap().cast())
                .collect(),
            father: PPtr::from_value(fields.remove("m_Father").unwrap())?.cast(),
        })
    }
}