use super::pptr::PPtr; use crate::object::{Value, parser::FromValue}; use anyhow::Result; use serde::Serialize; #[derive(Debug, Serialize)] pub struct GameObject { pub components: Vec, pub layer: u32, pub tag: u16, pub name: String, pub is_active: bool, } impl FromValue for GameObject { fn from_value(v: Value) -> Result { let mut fields = v.as_class("GameObject").unwrap(); Ok(GameObject { components: fields .remove("m_Component") .unwrap() .as_vector() .unwrap() .into_iter() .map(|e| { e.as_class("ComponentPair") .unwrap() .field("component") .unwrap() }) .collect(), layer: fields.field("m_Layer")?, tag: fields.field("m_Tag")?, name: fields.field("m_Name")?, is_active: fields.field("m_IsActive")?, }) } }