From 792ecfb57424ec407ee7b5f0de903cd0c902b68d Mon Sep 17 00:00:00 2001 From: metamuffin Date: Tue, 11 Mar 2025 17:08:42 +0100 Subject: move classes to modules --- src/classes/pptr.rs | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/classes/pptr.rs (limited to 'src/classes/pptr.rs') diff --git a/src/classes/pptr.rs b/src/classes/pptr.rs new file mode 100644 index 0000000..1f615ab --- /dev/null +++ b/src/classes/pptr.rs @@ -0,0 +1,39 @@ +use super::HValue; +use crate::object::Value; +use anyhow::Result; +use serde::Serialize; +use std::marker::PhantomData; + +#[derive(Debug, Serialize)] +pub struct PPtr { + _class: PhantomData, + pub class: String, + pub file_id: i32, + pub path_id: i64, +} +impl PPtr { + pub fn from_value(v: Value) -> Result { + let Value::Object { class, fields } = v else { + unreachable!() + }; + let inner = class + .strip_prefix("PPtr<") + .unwrap() + .strip_suffix(">") + .unwrap(); + Ok(PPtr { + class: inner.to_owned(), + _class: PhantomData, + file_id: fields["m_FileID"].as_i32().unwrap(), + path_id: fields["m_PathID"].as_i64().unwrap(), + }) + } + pub fn cast(self) -> PPtr { + PPtr { + _class: PhantomData, + class: self.class, + file_id: self.file_id, + path_id: self.path_id, + } + } +} -- cgit v1.2.3-70-g09d2