aboutsummaryrefslogtreecommitdiff
path: root/src/classes/pptr.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-03-13 20:20:25 +0100
committermetamuffin <metamuffin@disroot.org>2025-03-13 20:20:25 +0100
commit56cbc53c8b9b82e7705e268e3cb1bc1e36cdadac (patch)
treefc30586011e227d09aace65dc0511bdd51dacd57 /src/classes/pptr.rs
parent8f80baff4d18b67859eded67b8c5097324693862 (diff)
downloadunity-tools-56cbc53c8b9b82e7705e268e3cb1bc1e36cdadac.tar
unity-tools-56cbc53c8b9b82e7705e268e3cb1bc1e36cdadac.tar.bz2
unity-tools-56cbc53c8b9b82e7705e268e3cb1bc1e36cdadac.tar.zst
remove a few unwraps
Diffstat (limited to 'src/classes/pptr.rs')
-rw-r--r--src/classes/pptr.rs16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/classes/pptr.rs b/src/classes/pptr.rs
index 9d9becc..d6e4bb6 100644
--- a/src/classes/pptr.rs
+++ b/src/classes/pptr.rs
@@ -1,6 +1,6 @@
use super::HValue;
use crate::object::{Value, parser::FromValue};
-use anyhow::Result;
+use anyhow::{Result, anyhow, bail};
use serde::Serialize;
use std::marker::PhantomData;
@@ -16,18 +16,22 @@ pub struct PPtr<T = HValue> {
impl<T> FromValue for PPtr<T> {
fn from_value(v: Value) -> Result<Self> {
let Value::Object { class, fields } = v else {
- unreachable!()
+ bail!("PPtr expected but not an object")
};
let inner = class
.strip_prefix("PPtr<")
- .unwrap()
+ .ok_or(anyhow!("not a PPtr"))?
.strip_suffix(">")
- .unwrap();
+ .ok_or(anyhow!("PPtr '>' missing"))?;
Ok(PPtr {
class: inner.to_owned(),
_class: PhantomData,
- file_id: fields["m_FileID"].as_i32().unwrap(),
- path_id: fields["m_PathID"].as_i64().unwrap(),
+ file_id: fields["m_FileID"]
+ .as_i32()
+ .ok_or(anyhow!("PPtr m_FileID is not i32"))?,
+ path_id: fields["m_PathID"]
+ .as_i64()
+ .ok_or(anyhow!("PPtr m_FileID is not i64"))?,
})
}
}