aboutsummaryrefslogtreecommitdiff
path: root/src/classes/pptr.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-03-11 17:08:42 +0100
committermetamuffin <metamuffin@disroot.org>2025-03-11 17:08:42 +0100
commit792ecfb57424ec407ee7b5f0de903cd0c902b68d (patch)
treee4319d44c6afbdbb87a2c7582eb71701266752d7 /src/classes/pptr.rs
parent7250587f46ca51ad662a0895a51742669b9cbb8f (diff)
downloadunity-tools-792ecfb57424ec407ee7b5f0de903cd0c902b68d.tar
unity-tools-792ecfb57424ec407ee7b5f0de903cd0c902b68d.tar.bz2
unity-tools-792ecfb57424ec407ee7b5f0de903cd0c902b68d.tar.zst
move classes to modules
Diffstat (limited to 'src/classes/pptr.rs')
-rw-r--r--src/classes/pptr.rs39
1 files changed, 39 insertions, 0 deletions
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<T = HValue> {
+ _class: PhantomData<T>,
+ pub class: String,
+ pub file_id: i32,
+ pub path_id: i64,
+}
+impl PPtr {
+ pub fn from_value(v: Value) -> Result<Self> {
+ 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<T>(self) -> PPtr<T> {
+ PPtr {
+ _class: PhantomData,
+ class: self.class,
+ file_id: self.file_id,
+ path_id: self.path_id,
+ }
+ }
+}