aboutsummaryrefslogtreecommitdiff
path: root/src/classes/shader.rs
diff options
context:
space:
mode:
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")?,
+ })
+ }
+}