summaryrefslogtreecommitdiff
path: root/racer-tracer/src/scene.rs
diff options
context:
space:
mode:
Diffstat (limited to 'racer-tracer/src/scene.rs')
-rw-r--r--racer-tracer/src/scene.rs19
1 files changed, 7 insertions, 12 deletions
diff --git a/racer-tracer/src/scene.rs b/racer-tracer/src/scene.rs
index 12e2296..e730db0 100644
--- a/racer-tracer/src/scene.rs
+++ b/racer-tracer/src/scene.rs
@@ -12,8 +12,13 @@ pub struct Scene {
}
impl Scene {
- #[allow(dead_code)]
- pub fn try_new(loader: Box<dyn SceneLoader>) -> Result<Self, TracerError> {
+ pub fn try_new(config_loader: &CSLoader) -> Result<Self, TracerError> {
+ let loader: Box<dyn SceneLoader> = match config_loader {
+ CSLoader::Yml { path } => Box::new(YmlLoader::new(path.clone())),
+ CSLoader::Random => Box::new(Random::new()),
+ CSLoader::None => Box::new(NoneLoader::new()),
+ };
+
loader.load().map(|objects| Self { objects })
}
@@ -47,13 +52,3 @@ impl Hittable for Scene {
pub trait SceneLoader: Send + Sync {
fn load(&self) -> Result<Vec<Box<dyn Hittable>>, TracerError>;
}
-
-impl From<&CSLoader> for Box<dyn SceneLoader> {
- fn from(loader: &CSLoader) -> Self {
- match loader {
- CSLoader::Yml { path } => Box::new(YmlLoader::new(path.clone())),
- CSLoader::Random => Box::new(Random::new()),
- CSLoader::None => Box::new(NoneLoader::new()),
- }
- }
-}