use std::sync::Arc; use serde::Deserialize; use crate::objects::materials::{dielectric::Dielectric, lambertian::{Lambertian, Metal}, normal::Normal, traits::Material}; #[derive(Deserialize)] #[serde(tag = "type", rename_all = "lowercase")] pub(crate) enum MaterialDef { Lambertian(Lambertian), Metal(Metal), Dielectric(Dielectric), Normal(Normal), } impl MaterialDef { pub(crate) fn into_arc(self) -> Arc { match self { MaterialDef::Lambertian(l) => Arc::new(l), MaterialDef::Metal(m) => Arc::new(m), MaterialDef::Dielectric(d) => Arc::new(d), MaterialDef::Normal(n) => Arc::new(n), } } }