diff options
Diffstat (limited to 'src/classes/shader.rs')
-rw-r--r-- | src/classes/shader.rs | 42 |
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")?, + }) + } +} |