28 lines
697 B
Rust
28 lines
697 B
Rust
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<dyn Material> {
|
|
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),
|
|
}
|
|
}
|
|
}
|
|
|