diff options
author | metamuffin <metamuffin@disroot.org> | 2025-03-13 20:20:25 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-03-13 20:20:25 +0100 |
commit | 56cbc53c8b9b82e7705e268e3cb1bc1e36cdadac (patch) | |
tree | fc30586011e227d09aace65dc0511bdd51dacd57 /src/classes/pptr.rs | |
parent | 8f80baff4d18b67859eded67b8c5097324693862 (diff) | |
download | unity-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.rs | 16 |
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"))?, }) } } |