From 79e341769d04a6daa5c1edae87d6ff8a9adba9c6 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Tue, 11 Mar 2025 21:57:44 +0100 Subject: fromvalue trait --- src/classes/gameobject.rs | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) (limited to 'src/classes/gameobject.rs') diff --git a/src/classes/gameobject.rs b/src/classes/gameobject.rs index fde042d..94436fa 100644 --- a/src/classes/gameobject.rs +++ b/src/classes/gameobject.rs @@ -1,7 +1,7 @@ +use super::{FromValue, pptr::PPtr}; +use crate::object::Value; use anyhow::Result; use serde::Serialize; -use crate::object::Value; -use super::pptr::PPtr; #[derive(Debug, Serialize)] pub struct GameObject { @@ -11,24 +11,27 @@ pub struct GameObject { pub name: String, pub is_active: bool, } -impl GameObject { - pub fn from_value(v: Value) -> Result { +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_class("vector") + .unwrap() + .remove("Array") + .unwrap() .as_array() .unwrap() .into_iter() .map(|e| { - PPtr::from_value( - e.as_class("ComponentPair") - .unwrap() - .remove("component") - .unwrap(), - ) - .unwrap() + e.as_class("ComponentPair") + .unwrap() + .remove("component") + .unwrap() + .parse::() + .unwrap() }) .collect(), layer: fields["m_Layer"].as_u32().unwrap(), -- cgit v1.2.3-70-g09d2