aboutsummaryrefslogtreecommitdiff
path: root/src/classes/shader.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-03-15 15:18:40 +0100
committermetamuffin <metamuffin@disroot.org>2025-03-15 15:18:40 +0100
commitd836e24357b81496c61f3cc9195ba36758523578 (patch)
tree0028aee5a453cc761dd39e92430a35c55147537f /src/classes/shader.rs
parent07fc3656274117c211ca0d6a54926d390a4d9b68 (diff)
downloadunity-tools-d836e24357b81496c61f3cc9195ba36758523578.tar
unity-tools-d836e24357b81496c61f3cc9195ba36758523578.tar.bz2
unity-tools-d836e24357b81496c61f3cc9195ba36758523578.tar.zst
more abstraction around unityfs to read multiple files from a single reader
Diffstat (limited to 'src/classes/shader.rs')
-rw-r--r--src/classes/shader.rs42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/classes/shader.rs b/src/classes/shader.rs
new file mode 100644
index 0000000..86f32b8
--- /dev/null
+++ b/src/classes/shader.rs
@@ -0,0 +1,42 @@
+use super::pptr::PPtr;
+use crate::object::{Value, parser::FromValue};
+use anyhow::Result;
+use serde::Serialize;
+
+#[derive(Debug, Serialize)]
+pub struct Shader {
+ pub dependencies: Vec<PPtr<Shader>>,
+ pub name: String,
+ pub parsed: SerializedShader,
+}
+
+#[derive(Debug, Serialize)]
+pub struct SerializedShader {
+ pub name: String,
+}
+
+impl FromValue for Shader {
+ fn from_value(v: Value) -> Result<Self> {
+ let mut fields = v.as_class("Shader")?;
+ Ok(Self {
+ name: fields.field("m_Name")?,
+ parsed: fields.field("m_ParsedForm")?,
+ dependencies: fields
+ .remove("m_Dependencies")
+ .unwrap()
+ .as_vector()
+ .unwrap()
+ .into_iter()
+ .map(|e| e.parse().unwrap())
+ .collect(),
+ })
+ }
+}
+impl FromValue for SerializedShader {
+ fn from_value(v: Value) -> Result<Self> {
+ let mut fields = v.as_class("SerializedShader")?;
+ Ok(Self {
+ name: fields.field("m_Name")?,
+ })
+ }
+}