diff options
Diffstat (limited to 'src/classes/pptr.rs')
-rw-r--r-- | src/classes/pptr.rs | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/classes/pptr.rs b/src/classes/pptr.rs index 1f615ab..b42527d 100644 --- a/src/classes/pptr.rs +++ b/src/classes/pptr.rs @@ -1,4 +1,4 @@ -use super::HValue; +use super::{FromValue, HValue}; use crate::object::Value; use anyhow::Result; use serde::Serialize; @@ -6,13 +6,14 @@ use std::marker::PhantomData; #[derive(Debug, Serialize)] pub struct PPtr<T = HValue> { + #[serde(skip, default)] _class: PhantomData<T>, pub class: String, pub file_id: i32, pub path_id: i64, } -impl PPtr { - pub fn from_value(v: Value) -> Result<Self> { +impl<T> FromValue for PPtr<T> { + fn from_value(v: Value) -> Result<Self> { let Value::Object { class, fields } = v else { unreachable!() }; @@ -28,6 +29,8 @@ impl PPtr { path_id: fields["m_PathID"].as_i64().unwrap(), }) } +} +impl PPtr { pub fn cast<T>(self) -> PPtr<T> { PPtr { _class: PhantomData, |