diff options
Diffstat (limited to 'src/classes/texture.rs')
-rw-r--r-- | src/classes/texture.rs | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/classes/texture.rs b/src/classes/texture.rs new file mode 100644 index 0000000..6d1c102 --- /dev/null +++ b/src/classes/texture.rs @@ -0,0 +1,29 @@ +use super::{cubemap::Cubemap, texture2d::Texture2D}; +use crate::object::{Value, parser::FromValue}; +use anyhow::Result; +use serde::Serialize; + +#[derive(Debug, Serialize)] +pub enum AnyTexture { + Cubemap(Cubemap), + Texture2D(Texture2D), +} + +impl FromValue for AnyTexture { + fn from_value(v: Value) -> Result<Self> { + match v.class_name().unwrap().as_str() { + "Cubemap" => Ok(Self::Cubemap(v.parse()?)), + "Texture2D" => Ok(Self::Texture2D(v.parse()?)), + x => unreachable!("{x}"), + } + } +} +impl AnyTexture { + pub fn as_texture2d(self) -> Option<Texture2D> { + if let AnyTexture::Texture2D(x) = self { + Some(x) + } else { + None + } + } +} |