aboutsummaryrefslogtreecommitdiff
path: root/src/classes
diff options
context:
space:
mode:
Diffstat (limited to 'src/classes')
-rw-r--r--src/classes/assetinfo.rs2
-rw-r--r--src/classes/gameobject.rs2
-rw-r--r--src/classes/mesh.rs34
-rw-r--r--src/classes/pptr.rs16
-rw-r--r--src/classes/streaminginfo.rs2
5 files changed, 32 insertions, 24 deletions
diff --git a/src/classes/assetinfo.rs b/src/classes/assetinfo.rs
index f66444a..c42c33a 100644
--- a/src/classes/assetinfo.rs
+++ b/src/classes/assetinfo.rs
@@ -12,7 +12,7 @@ pub struct AssetInfo {
impl FromValue for AssetInfo {
fn from_value(v: Value) -> Result<Self> {
- let mut fields = v.as_class("AssetInfo").unwrap();
+ let mut fields = v.as_class("AssetInfo")?;
Ok(AssetInfo {
preload_index: fields.field("preloadIndex")?,
preload_size: fields.field("preloadSize")?,
diff --git a/src/classes/gameobject.rs b/src/classes/gameobject.rs
index 494f3db..7e76dea 100644
--- a/src/classes/gameobject.rs
+++ b/src/classes/gameobject.rs
@@ -14,7 +14,7 @@ pub struct GameObject {
impl FromValue for GameObject {
fn from_value(v: Value) -> Result<Self> {
- let mut fields = v.as_class("GameObject").unwrap();
+ let mut fields = v.as_class("GameObject")?;
Ok(GameObject {
components: fields
.remove("m_Component")
diff --git a/src/classes/mesh.rs b/src/classes/mesh.rs
index 328af97..b6e6821 100644
--- a/src/classes/mesh.rs
+++ b/src/classes/mesh.rs
@@ -44,7 +44,7 @@ pub struct ChannelInfo {
impl FromValue for Mesh {
fn from_value(v: Value) -> Result<Self> {
- let mut fields = v.as_class("Mesh").unwrap();
+ let mut fields = v.as_class("Mesh")?;
Ok(Mesh {
name: fields.field("m_Name")?,
index_format: fields.field("m_IndexFormat")?,
@@ -105,10 +105,14 @@ impl Mesh {
impl FromValue for VertexData {
fn from_value(v: Value) -> Result<Self> {
- let mut fields = v.as_class("VertexData").unwrap();
+ let mut fields = v.as_class("VertexData")?;
Ok(VertexData {
vertex_count: fields.field("m_VertexCount")?,
- data: fields.remove("m_DataSize").unwrap().as_typeless().unwrap(),
+ data: fields
+ .remove("m_DataSize")
+ .ok_or(anyhow!("m_DataSize missing"))?
+ .as_typeless()
+ .ok_or(anyhow!("m_DataSize is not typeless"))?,
channels: fields
.remove("m_Channels")
.unwrap()
@@ -168,26 +172,26 @@ impl VertexData {
impl FromValue for ChannelInfo {
fn from_value(v: Value) -> Result<Self> {
- let mut fields = v.as_class("ChannelInfo").unwrap();
+ let mut fields = v.as_class("ChannelInfo")?;
Ok(ChannelInfo {
- dimension: fields.remove("dimension").unwrap().parse().unwrap(),
- format: fields.remove("format").unwrap().parse().unwrap(),
- offset: fields.remove("offset").unwrap().parse().unwrap(),
- stream: fields.remove("stream").unwrap().parse().unwrap(),
+ dimension: fields.field("dimension")?,
+ format: fields.field("format")?,
+ offset: fields.field("offset")?,
+ stream: fields.field("stream")?,
})
}
}
impl FromValue for SubMesh {
fn from_value(v: Value) -> Result<Self> {
- let mut fields = v.as_class("SubMesh").unwrap();
+ let mut fields = v.as_class("SubMesh")?;
Ok(SubMesh {
- topology: fields.remove("topology").unwrap().parse().unwrap(),
- vertex_count: fields.remove("vertexCount").unwrap().parse().unwrap(),
- base_vertex: fields.remove("baseVertex").unwrap().parse().unwrap(),
- first_byte: fields.remove("firstByte").unwrap().parse().unwrap(),
- first_vertex: fields.remove("firstVertex").unwrap().parse().unwrap(),
- index_count: fields.remove("indexCount").unwrap().parse().unwrap(),
+ topology: fields.field("topology")?,
+ vertex_count: fields.field("vertexCount")?,
+ base_vertex: fields.field("baseVertex")?,
+ first_byte: fields.field("firstByte")?,
+ first_vertex: fields.field("firstVertex")?,
+ index_count: fields.field("indexCount")?,
})
}
}
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"))?,
})
}
}
diff --git a/src/classes/streaminginfo.rs b/src/classes/streaminginfo.rs
index 5549efc..83b9f20 100644
--- a/src/classes/streaminginfo.rs
+++ b/src/classes/streaminginfo.rs
@@ -16,7 +16,7 @@ pub struct StreamingInfo {
impl FromValue for StreamingInfo {
fn from_value(v: Value) -> Result<Self> {
- let mut fields = v.as_class("StreamingInfo").unwrap();
+ let mut fields = v.as_class("StreamingInfo")?;
Ok(StreamingInfo {
offset: fields.field("offset")?,
size: fields.field("size")?,