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 { 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 { if let AnyTexture::Texture2D(x) = self { Some(x) } else { None } } }