[INFO] cloning repository https://github.com/sunday-robot/RsRay
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/sunday-robot/RsRay" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsunday-robot%2FRsRay", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsunday-robot%2FRsRay'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] d23ef1fb2ca5adc44e0d44a3a413f4540dfc4718
[INFO] checking sunday-robot/RsRay against 165655a2f1981fef27b31c547ad7631979fc5139 for pr-160235
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsunday-robot%2FRsRay" "/workspace/builds/worker-5-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/sunday-robot/RsRay
[INFO] finished tweaking git repo https://github.com/sunday-robot/RsRay
[INFO] tweaked toml for git repo https://github.com/sunday-robot/RsRay written to /workspace/builds/worker-5-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/sunday-robot/RsRay on toolchain 165655a2f1981fef27b31c547ad7631979fc5139
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+165655a2f1981fef27b31c547ad7631979fc5139" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/sunday-robot/RsRay already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+165655a2f1981fef27b31c547ad7631979fc5139" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Blocking waiting for file lock on package cache
[ERROR] error running command: no output for 300 seconds
[INFO] checking sunday-robot/RsRay against 165655a2f1981fef27b31c547ad7631979fc5139 for pr-160235
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsunday-robot%2FRsRay" "/workspace/builds/worker-5-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/sunday-robot/RsRay
[INFO] finished tweaking git repo https://github.com/sunday-robot/RsRay
[INFO] tweaked toml for git repo https://github.com/sunday-robot/RsRay written to /workspace/builds/worker-5-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/sunday-robot/RsRay on toolchain 165655a2f1981fef27b31c547ad7631979fc5139
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+165655a2f1981fef27b31c547ad7631979fc5139" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/sunday-robot/RsRay already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+165655a2f1981fef27b31c547ad7631979fc5139" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:00c5645b54fe3ce5dae1417175e3c7fb6a6646c021d554ecd63a097b8b9f3602" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 142fb093081848f8d8590dabff76d339b9049017b7f42580aaefc84e86c23f62
[INFO] running `Command { std: "docker" "start" "142fb093081848f8d8590dabff76d339b9049017b7f42580aaefc84e86c23f62", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "142fb093081848f8d8590dabff76d339b9049017b7f42580aaefc84e86c23f62", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "142fb093081848f8d8590dabff76d339b9049017b7f42580aaefc84e86c23f62" "/opt/rustwide/cargo-home/bin/cargo" "+165655a2f1981fef27b31c547ad7631979fc5139" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "142fb093081848f8d8590dabff76d339b9049017b7f42580aaefc84e86c23f62", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-w" "/opt/rustwide/workdir" "--user" "0:0" "142fb093081848f8d8590dabff76d339b9049017b7f42580aaefc84e86c23f62" "/opt/rustwide/cargo-home/bin/cargo" "+165655a2f1981fef27b31c547ad7631979fc5139" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling num-traits v0.2.15
[INFO] [stderr]    Compiling libc v0.2.140
[INFO] [stderr]    Compiling num-bigint v0.4.3
[INFO] [stderr]    Compiling num-rational v0.4.1
[INFO] [stderr]    Compiling num-iter v0.1.43
[INFO] [stderr]     Checking getrandom v0.2.8
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking num-integer v0.1.45
[INFO] [stderr]     Checking num-complex v0.4.3
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking num v0.4.0
[INFO] [stderr]     Checking RsRay v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] error[E0425]: cannot find function `save_as_bmp` in module `utils`
[INFO] [stdout]   --> src/main.rs:36:12
[INFO] [stdout]    |
[INFO] [stdout] 36 |     utils::save_as_bmp(image_with, image_height, pixels, "Spheres.bmp");
[INFO] [stdout]    |            ^^^^^^^^^^^ not found in `utils`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find function `save_as_bmp` in module `utils`
[INFO] [stdout]   --> src/main.rs:36:12
[INFO] [stdout]    |
[INFO] [stdout] 36 |     utils::save_as_bmp(image_with, image_height, pixels, "Spheres.bmp");
[INFO] [stdout]    |            ^^^^^^^^^^^ not found in `utils`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]  --> src/create_bvh_tree.rs:9:71
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub fn create(objects: Vec<Box<dyn Hittable>>, exposure_time: f64) -> Box<dyn Hittable> {
[INFO] [stdout]   |        ------                                                         ^^^^^^^^^^^^^^^^^ expected `Box<dyn Hittable>`, found `()`
[INFO] [stdout]   |        |
[INFO] [stdout]   |        implicitly returns `()` as its body has no tail or `return` expression
[INFO] [stdout]   |
[INFO] [stdout]   = note: expected struct `Box<(dyn Hittable + 'static)>`
[INFO] [stdout]           found unit type `()`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]  --> src/create_bvh_tree.rs:9:71
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub fn create(objects: Vec<Box<dyn Hittable>>, exposure_time: f64) -> Box<dyn Hittable> {
[INFO] [stdout]   |        ------                                                         ^^^^^^^^^^^^^^^^^ expected `Box<dyn Hittable>`, found `()`
[INFO] [stdout]   |        |
[INFO] [stdout]   |        implicitly returns `()` as its body has no tail or `return` expression
[INFO] [stdout]   |
[INFO] [stdout]   = note: expected struct `Box<(dyn Hittable + 'static)>`
[INFO] [stdout]           found unit type `()`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0015]: cannot call non-const associated function `Vec3::new` in constants
[INFO] [stdout]  --> src/types/bvh.rs:8:30
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub const DUMMY_VEC3: Vec3 = Vec3::new(0.0, 0.0, 0.0);
[INFO] [stdout]   |                              ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: calls in constants are limited to constant functions, tuple structs and tuple variants
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0015]: cannot call non-const associated function `Vec3::new` in constants
[INFO] [stdout]  --> src/types/bvh.rs:8:30
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub const DUMMY_VEC3: Vec3 = Vec3::new(0.0, 0.0, 0.0);
[INFO] [stdout]   |                              ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: calls in constants are limited to constant functions, tuple structs and tuple variants
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0015]: cannot call non-const associated function `DebugMaterial::new` in constants
[INFO] [stdout]  --> src/types/bvh.rs:9:56
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub const DUMMY_MATERIAL: Box<dyn Material> = Box::new(DebugMaterial::new());
[INFO] [stdout]   |                                                        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: calls in constants are limited to constant functions, tuple structs and tuple variants
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0015]: cannot call non-const associated function `Box::<DebugMaterial>::new` in constants
[INFO] [stdout]  --> src/types/bvh.rs:9:47
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub const DUMMY_MATERIAL: Box<dyn Material> = Box::new(DebugMaterial::new());
[INFO] [stdout]   |                                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: calls in constants are limited to constant functions, tuple structs and tuple variants
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0015]: cannot call non-const associated function `DebugMaterial::new` in constants
[INFO] [stdout]  --> src/types/bvh.rs:9:56
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub const DUMMY_MATERIAL: Box<dyn Material> = Box::new(DebugMaterial::new());
[INFO] [stdout]   |                                                        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: calls in constants are limited to constant functions, tuple structs and tuple variants
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0015]: cannot call non-const associated function `Box::<DebugMaterial>::new` in constants
[INFO] [stdout]  --> src/types/bvh.rs:9:47
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub const DUMMY_MATERIAL: Box<dyn Material> = Box::new(DebugMaterial::new());
[INFO] [stdout]   |                                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: calls in constants are limited to constant functions, tuple structs and tuple variants
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0015]: cannot call non-const associated function `Rgb::new` in statics
[INFO] [stdout]  --> src/types/rgb.rs:9:24
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub static BLACK:Rgb = Rgb::new(0.0, 0.0, 0.0);
[INFO] [stdout]   |                        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: calls in statics are limited to constant functions, tuple structs and tuple variants
[INFO] [stdout]   = note: consider wrapping this expression in `std::sync::LazyLock::new(|| ...)`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0015]: cannot call non-const associated function `Rgb::new` in statics
[INFO] [stdout]  --> src/types/rgb.rs:9:24
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub static BLACK:Rgb = Rgb::new(0.0, 0.0, 0.0);
[INFO] [stdout]   |                        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: calls in statics are limited to constant functions, tuple structs and tuple variants
[INFO] [stdout]   = note: consider wrapping this expression in `std::sync::LazyLock::new(|| ...)`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0605]: non-primitive cast: `&Box<dyn Hittable>` as `Box<dyn Hittable>`
[INFO] [stdout]   --> src/main.rs:24:31
[INFO] [stdout]    |
[INFO] [stdout] 24 |     let z:Box<dyn Hittable> = &world as Box<dyn Hittable>;
[INFO] [stdout]    |                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^ an `as` expression can only be used to convert between primitive types or to coerce to a specific trait object
[INFO] [stdout]    |
[INFO] [stdout]    = note: casting reference expression `&world` because `&` binds tighter than `as`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0605]: non-primitive cast: `&Box<dyn Hittable>` as `Box<dyn Hittable>`
[INFO] [stdout]   --> src/main.rs:24:31
[INFO] [stdout]    |
[INFO] [stdout] 24 |     let z:Box<dyn Hittable> = &world as Box<dyn Hittable>;
[INFO] [stdout]    |                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^ an `as` expression can only be used to convert between primitive types or to coerce to a specific trait object
[INFO] [stdout]    |
[INFO] [stdout]    = note: casting reference expression `&world` because `&` binds tighter than `as`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/create_bvh_tree.rs:13:16
[INFO] [stdout]    |
[INFO] [stdout] 13 | fn create_core(mut objects: Vec<Box<dyn Hittable>>, exposure_time: f64, start: usize, end: usize) -> Box<dyn BvhTrait> {
[INFO] [stdout]    |                ----^^^^^^^
[INFO] [stdout]    |                |
[INFO] [stdout]    |                help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/create_bvh_tree.rs:13:16
[INFO] [stdout]    |
[INFO] [stdout] 13 | fn create_core(mut objects: Vec<Box<dyn Hittable>>, exposure_time: f64, start: usize, end: usize) -> Box<dyn BvhTrait> {
[INFO] [stdout]    |                ----^^^^^^^
[INFO] [stdout]    |                |
[INFO] [stdout]    |                help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of index of `Vec<Box<dyn Hittable>>`
[INFO] [stdout]   --> src/create_bvh_tree.rs:22:17
[INFO] [stdout]    |
[INFO] [stdout] 22 |         let o = objects[start];
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^ move occurs because value has type `Box<dyn Hittable>`, which does not implement the `Copy` trait
[INFO] [stdout]    |
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]    |
[INFO] [stdout] 22 |         let o = &objects[start];
[INFO] [stdout]    |                 +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*objects_sub` as mutable, as it is behind a `&` reference
[INFO] [stdout]   --> src/create_bvh_tree.rs:27:9
[INFO] [stdout]    |
[INFO] [stdout] 27 |         objects_sub.sort_by(|a,b| comparator(*a, *b));
[INFO] [stdout]    |         ^^^^^^^^^^^ `objects_sub` is a `&` reference, so it cannot be borrowed as mutable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `*a` which is behind a shared reference
[INFO] [stdout]   --> src/create_bvh_tree.rs:27:46
[INFO] [stdout]    |
[INFO] [stdout] 27 |         objects_sub.sort_by(|a,b| comparator(*a, *b));
[INFO] [stdout]    |                                              ^^ move occurs because `*a` has type `Box<dyn Hittable>`, which does not implement the `Copy` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `*b` which is behind a shared reference
[INFO] [stdout]   --> src/create_bvh_tree.rs:27:50
[INFO] [stdout]    |
[INFO] [stdout] 27 |         objects_sub.sort_by(|a,b| comparator(*a, *b));
[INFO] [stdout]    |                                                  ^^ move occurs because `*b` has type `Box<dyn Hittable>`, which does not implement the `Copy` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `objects`
[INFO] [stdout]   --> src/create_bvh_tree.rs:30:33
[INFO] [stdout]    |
[INFO] [stdout] 13 | fn create_core(mut objects: Vec<Box<dyn Hittable>>, exposure_time: f64, start: usize, end: usize) -> Box<dyn BvhTrait> {
[INFO] [stdout]    |                ----------- move occurs because `objects` has type `Vec<Box<dyn Hittable>>`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 29 |         let left = create_core(objects, exposure_time, start, mid);
[INFO] [stdout]    |                                ------- value moved here
[INFO] [stdout] 30 |         let right = create_core(objects, exposure_time, mid, end);
[INFO] [stdout]    |                                 ^^^^^^^ value used here after move
[INFO] [stdout]    |
[INFO] [stdout] note: consider changing this parameter type in function `create_core` to borrow instead if owning the value isn't necessary
[INFO] [stdout]   --> src/create_bvh_tree.rs:13:29
[INFO] [stdout]    |
[INFO] [stdout] 13 | fn create_core(mut objects: Vec<Box<dyn Hittable>>, exposure_time: f64, start: usize, end: usize) -> Box<dyn BvhTrait> {
[INFO] [stdout]    |    -----------              ^^^^^^^^^^^^^^^^^^^^^^ this parameter takes ownership of the value
[INFO] [stdout]    |    |
[INFO] [stdout]    |    in this function
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of index of `Vec<Box<dyn Hittable>>`
[INFO] [stdout]   --> src/create_bvh_tree.rs:22:17
[INFO] [stdout]    |
[INFO] [stdout] 22 |         let o = objects[start];
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^ move occurs because value has type `Box<dyn Hittable>`, which does not implement the `Copy` trait
[INFO] [stdout]    |
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]    |
[INFO] [stdout] 22 |         let o = &objects[start];
[INFO] [stdout]    |                 +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*objects_sub` as mutable, as it is behind a `&` reference
[INFO] [stdout]   --> src/create_bvh_tree.rs:27:9
[INFO] [stdout]    |
[INFO] [stdout] 27 |         objects_sub.sort_by(|a,b| comparator(*a, *b));
[INFO] [stdout]    |         ^^^^^^^^^^^ `objects_sub` is a `&` reference, so it cannot be borrowed as mutable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `*a` which is behind a shared reference
[INFO] [stdout]   --> src/create_bvh_tree.rs:27:46
[INFO] [stdout]    |
[INFO] [stdout] 27 |         objects_sub.sort_by(|a,b| comparator(*a, *b));
[INFO] [stdout]    |                                              ^^ move occurs because `*a` has type `Box<dyn Hittable>`, which does not implement the `Copy` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `*b` which is behind a shared reference
[INFO] [stdout]   --> src/create_bvh_tree.rs:27:50
[INFO] [stdout]    |
[INFO] [stdout] 27 |         objects_sub.sort_by(|a,b| comparator(*a, *b));
[INFO] [stdout]    |                                                  ^^ move occurs because `*b` has type `Box<dyn Hittable>`, which does not implement the `Copy` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `objects`
[INFO] [stdout]   --> src/create_bvh_tree.rs:30:33
[INFO] [stdout]    |
[INFO] [stdout] 13 | fn create_core(mut objects: Vec<Box<dyn Hittable>>, exposure_time: f64, start: usize, end: usize) -> Box<dyn BvhTrait> {
[INFO] [stdout]    |                ----------- move occurs because `objects` has type `Vec<Box<dyn Hittable>>`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 29 |         let left = create_core(objects, exposure_time, start, mid);
[INFO] [stdout]    |                                ------- value moved here
[INFO] [stdout] 30 |         let right = create_core(objects, exposure_time, mid, end);
[INFO] [stdout]    |                                 ^^^^^^^ value used here after move
[INFO] [stdout]    |
[INFO] [stdout] note: consider changing this parameter type in function `create_core` to borrow instead if owning the value isn't necessary
[INFO] [stdout]   --> src/create_bvh_tree.rs:13:29
[INFO] [stdout]    |
[INFO] [stdout] 13 | fn create_core(mut objects: Vec<Box<dyn Hittable>>, exposure_time: f64, start: usize, end: usize) -> Box<dyn BvhTrait> {
[INFO] [stdout]    |    -----------              ^^^^^^^^^^^^^^^^^^^^^^ this parameter takes ownership of the value
[INFO] [stdout]    |    |
[INFO] [stdout]    |    in this function
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `exposure_time`
[INFO] [stdout]   --> src/hittables/sphere.rs:31:28
[INFO] [stdout]    |
[INFO] [stdout] 31 |     fn bounding_box(&self, exposure_time: f64) -> crate::types::Aabb {
[INFO] [stdout]    |                            ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_exposure_time`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `exposure_time`
[INFO] [stdout]   --> src/hittables/sphere.rs:31:28
[INFO] [stdout]    |
[INFO] [stdout] 31 |     fn bounding_box(&self, exposure_time: f64) -> crate::types::Aabb {
[INFO] [stdout]    |                            ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_exposure_time`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0384]: cannot assign twice to immutable variable `root`
[INFO] [stdout]   --> src/hittables/sphere.rs:55:13
[INFO] [stdout]    |
[INFO] [stdout] 53 |         let root = (-half_b - d2) / a;
[INFO] [stdout]    |             ---- first assignment to `root`
[INFO] [stdout] 54 |         if root < t_min || t_max < root {
[INFO] [stdout] 55 |             root = (-half_b + d2) / a;
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^^^^^ cannot assign twice to immutable variable
[INFO] [stdout]    |
[INFO] [stdout] help: consider making this binding mutable
[INFO] [stdout]    |
[INFO] [stdout] 53 |         let mut root = (-half_b - d2) / a;
[INFO] [stdout]    |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `self.material` which is behind a shared reference
[INFO] [stdout]   --> src/hittables/sphere.rs:66:48
[INFO] [stdout]    |
[INFO] [stdout] 66 |         return Some(HitRecord::new(root, p, n, self.material, ff, u, v));
[INFO] [stdout]    |                                                ^^^^^^^^^^^^^ move occurs because `self.material` has type `Box<dyn Material>`, which does not implement the `Copy` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0384]: cannot assign twice to immutable variable `root`
[INFO] [stdout]   --> src/hittables/sphere.rs:55:13
[INFO] [stdout]    |
[INFO] [stdout] 53 |         let root = (-half_b - d2) / a;
[INFO] [stdout]    |             ---- first assignment to `root`
[INFO] [stdout] 54 |         if root < t_min || t_max < root {
[INFO] [stdout] 55 |             root = (-half_b + d2) / a;
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^^^^^ cannot assign twice to immutable variable
[INFO] [stdout]    |
[INFO] [stdout] help: consider making this binding mutable
[INFO] [stdout]    |
[INFO] [stdout] 53 |         let mut root = (-half_b - d2) / a;
[INFO] [stdout]    |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `self.material` which is behind a shared reference
[INFO] [stdout]   --> src/hittables/sphere.rs:66:48
[INFO] [stdout]    |
[INFO] [stdout] 66 |         return Some(HitRecord::new(root, p, n, self.material, ff, u, v));
[INFO] [stdout]    |                                                ^^^^^^^^^^^^^ move occurs because `self.material` has type `Box<dyn Material>`, which does not implement the `Copy` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `u`
[INFO] [stdout]   --> src/materials/lambertian.rs:38:23
[INFO] [stdout]    |
[INFO] [stdout] 38 |     fn emitted(&self, u: f64, v: f64, p: Vec3) -> Rgb {
[INFO] [stdout]    |                       ^ help: if this is intentional, prefix it with an underscore: `_u`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v`
[INFO] [stdout]   --> src/materials/lambertian.rs:38:31
[INFO] [stdout]    |
[INFO] [stdout] 38 |     fn emitted(&self, u: f64, v: f64, p: Vec3) -> Rgb {
[INFO] [stdout]    |                               ^ help: if this is intentional, prefix it with an underscore: `_v`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `p`
[INFO] [stdout]   --> src/materials/lambertian.rs:38:39
[INFO] [stdout]    |
[INFO] [stdout] 38 |     fn emitted(&self, u: f64, v: f64, p: Vec3) -> Rgb {
[INFO] [stdout]    |                                       ^ help: if this is intentional, prefix it with an underscore: `_p`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `u`
[INFO] [stdout]   --> src/materials/lambertian.rs:38:23
[INFO] [stdout]    |
[INFO] [stdout] 38 |     fn emitted(&self, u: f64, v: f64, p: Vec3) -> Rgb {
[INFO] [stdout]    |                       ^ help: if this is intentional, prefix it with an underscore: `_u`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v`
[INFO] [stdout]   --> src/materials/lambertian.rs:38:31
[INFO] [stdout]    |
[INFO] [stdout] 38 |     fn emitted(&self, u: f64, v: f64, p: Vec3) -> Rgb {
[INFO] [stdout]    |                               ^ help: if this is intentional, prefix it with an underscore: `_v`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `p`
[INFO] [stdout]   --> src/materials/lambertian.rs:38:39
[INFO] [stdout]    |
[INFO] [stdout] 38 |     fn emitted(&self, u: f64, v: f64, p: Vec3) -> Rgb {
[INFO] [stdout]    |                                       ^ help: if this is intentional, prefix it with an underscore: `_p`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `u`
[INFO] [stdout]   --> src/materials/metal.rs:27:23
[INFO] [stdout]    |
[INFO] [stdout] 27 |     fn emitted(&self, u: f64, v: f64, p: Vec3) -> Rgb {
[INFO] [stdout]    |                       ^ help: if this is intentional, prefix it with an underscore: `_u`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v`
[INFO] [stdout]   --> src/materials/metal.rs:27:31
[INFO] [stdout]    |
[INFO] [stdout] 27 |     fn emitted(&self, u: f64, v: f64, p: Vec3) -> Rgb {
[INFO] [stdout]    |                               ^ help: if this is intentional, prefix it with an underscore: `_v`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `p`
[INFO] [stdout]   --> src/materials/metal.rs:27:39
[INFO] [stdout]    |
[INFO] [stdout] 27 |     fn emitted(&self, u: f64, v: f64, p: Vec3) -> Rgb {
[INFO] [stdout]    |                                       ^ help: if this is intentional, prefix it with an underscore: `_p`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `u`
[INFO] [stdout]   --> src/materials/metal.rs:27:23
[INFO] [stdout]    |
[INFO] [stdout] 27 |     fn emitted(&self, u: f64, v: f64, p: Vec3) -> Rgb {
[INFO] [stdout]    |                       ^ help: if this is intentional, prefix it with an underscore: `_u`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v`
[INFO] [stdout]   --> src/materials/metal.rs:27:31
[INFO] [stdout]    |
[INFO] [stdout] 27 |     fn emitted(&self, u: f64, v: f64, p: Vec3) -> Rgb {
[INFO] [stdout]    |                               ^ help: if this is intentional, prefix it with an underscore: `_v`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `p`
[INFO] [stdout]   --> src/materials/metal.rs:27:39
[INFO] [stdout]    |
[INFO] [stdout] 27 |     fn emitted(&self, u: f64, v: f64, p: Vec3) -> Rgb {
[INFO] [stdout]    |                                       ^ help: if this is intentional, prefix it with an underscore: `_p`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `u`
[INFO] [stdout]   --> src/materials/dielectric.rs:24:23
[INFO] [stdout]    |
[INFO] [stdout] 24 |     fn emitted(&self, u: f64, v: f64, p: Vec3) -> Rgb {
[INFO] [stdout]    |                       ^ help: if this is intentional, prefix it with an underscore: `_u`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `u`
[INFO] [stdout]   --> src/materials/dielectric.rs:24:23
[INFO] [stdout]    |
[INFO] [stdout] 24 |     fn emitted(&self, u: f64, v: f64, p: Vec3) -> Rgb {
[INFO] [stdout]    |                       ^ help: if this is intentional, prefix it with an underscore: `_u`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v`
[INFO] [stdout]   --> src/materials/dielectric.rs:24:31
[INFO] [stdout]    |
[INFO] [stdout] 24 |     fn emitted(&self, u: f64, v: f64, p: Vec3) -> Rgb {
[INFO] [stdout]    |                               ^ help: if this is intentional, prefix it with an underscore: `_v`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `p`
[INFO] [stdout]   --> src/materials/dielectric.rs:24:39
[INFO] [stdout]    |
[INFO] [stdout] 24 |     fn emitted(&self, u: f64, v: f64, p: Vec3) -> Rgb {
[INFO] [stdout]    |                                       ^ help: if this is intentional, prefix it with an underscore: `_p`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `u`
[INFO] [stdout]   --> src/materials/debug_material.rs:22:23
[INFO] [stdout]    |
[INFO] [stdout] 22 |     fn emitted(&self, u: f64, v: f64, p: Vec3) -> Rgb {
[INFO] [stdout]    |                       ^ help: if this is intentional, prefix it with an underscore: `_u`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v`
[INFO] [stdout]   --> src/materials/debug_material.rs:22:31
[INFO] [stdout]    |
[INFO] [stdout] 22 |     fn emitted(&self, u: f64, v: f64, p: Vec3) -> Rgb {
[INFO] [stdout]    |                               ^ help: if this is intentional, prefix it with an underscore: `_v`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `p`
[INFO] [stdout]   --> src/materials/debug_material.rs:22:39
[INFO] [stdout]    |
[INFO] [stdout] 22 |     fn emitted(&self, u: f64, v: f64, p: Vec3) -> Rgb {
[INFO] [stdout]    |                                       ^ help: if this is intentional, prefix it with an underscore: `_p`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ray`
[INFO] [stdout]   --> src/materials/debug_material.rs:26:23
[INFO] [stdout]    |
[INFO] [stdout] 26 |     fn scatter(&self, ray: Ray, rec: HitRecord) -> Option<(Rgb, Ray)> {
[INFO] [stdout]    |                       ^^^ help: if this is intentional, prefix it with an underscore: `_ray`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rec`
[INFO] [stdout]   --> src/materials/debug_material.rs:26:33
[INFO] [stdout]    |
[INFO] [stdout] 26 |     fn scatter(&self, ray: Ray, rec: HitRecord) -> Option<(Rgb, Ray)> {
[INFO] [stdout]    |                                 ^^^ help: if this is intentional, prefix it with an underscore: `_rec`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v`
[INFO] [stdout]   --> src/materials/dielectric.rs:24:31
[INFO] [stdout]    |
[INFO] [stdout] 24 |     fn emitted(&self, u: f64, v: f64, p: Vec3) -> Rgb {
[INFO] [stdout]    |                               ^ help: if this is intentional, prefix it with an underscore: `_v`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `p`
[INFO] [stdout]   --> src/materials/dielectric.rs:24:39
[INFO] [stdout]    |
[INFO] [stdout] 24 |     fn emitted(&self, u: f64, v: f64, p: Vec3) -> Rgb {
[INFO] [stdout]    |                                       ^ help: if this is intentional, prefix it with an underscore: `_p`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `u`
[INFO] [stdout]   --> src/materials/debug_material.rs:22:23
[INFO] [stdout]    |
[INFO] [stdout] 22 |     fn emitted(&self, u: f64, v: f64, p: Vec3) -> Rgb {
[INFO] [stdout]    |                       ^ help: if this is intentional, prefix it with an underscore: `_u`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v`
[INFO] [stdout]   --> src/materials/debug_material.rs:22:31
[INFO] [stdout]    |
[INFO] [stdout] 22 |     fn emitted(&self, u: f64, v: f64, p: Vec3) -> Rgb {
[INFO] [stdout]    |                               ^ help: if this is intentional, prefix it with an underscore: `_v`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `p`
[INFO] [stdout]   --> src/materials/debug_material.rs:22:39
[INFO] [stdout]    |
[INFO] [stdout] 22 |     fn emitted(&self, u: f64, v: f64, p: Vec3) -> Rgb {
[INFO] [stdout]    |                                       ^ help: if this is intentional, prefix it with an underscore: `_p`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ray`
[INFO] [stdout]   --> src/materials/debug_material.rs:26:23
[INFO] [stdout]    |
[INFO] [stdout] 26 |     fn scatter(&self, ray: Ray, rec: HitRecord) -> Option<(Rgb, Ray)> {
[INFO] [stdout]    |                       ^^^ help: if this is intentional, prefix it with an underscore: `_ray`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rec`
[INFO] [stdout]   --> src/materials/debug_material.rs:26:33
[INFO] [stdout]    |
[INFO] [stdout] 26 |     fn scatter(&self, ray: Ray, rec: HitRecord) -> Option<(Rgb, Ray)> {
[INFO] [stdout]    |                                 ^^^ help: if this is intentional, prefix it with an underscore: `_rec`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `u`
[INFO] [stdout]  --> src/textures/solid_color.rs:9:21
[INFO] [stdout]   |
[INFO] [stdout] 9 |     fn value(&self, u: f64, v: f64, p: crate::types::Vec3) -> Rgb {
[INFO] [stdout]   |                     ^ help: if this is intentional, prefix it with an underscore: `_u`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v`
[INFO] [stdout]  --> src/textures/solid_color.rs:9:29
[INFO] [stdout]   |
[INFO] [stdout] 9 |     fn value(&self, u: f64, v: f64, p: crate::types::Vec3) -> Rgb {
[INFO] [stdout]   |                             ^ help: if this is intentional, prefix it with an underscore: `_v`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `p`
[INFO] [stdout]  --> src/textures/solid_color.rs:9:37
[INFO] [stdout]   |
[INFO] [stdout] 9 |     fn value(&self, u: f64, v: f64, p: crate::types::Vec3) -> Rgb {
[INFO] [stdout]   |                                     ^ help: if this is intentional, prefix it with an underscore: `_p`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `u`
[INFO] [stdout]  --> src/textures/solid_color.rs:9:21
[INFO] [stdout]   |
[INFO] [stdout] 9 |     fn value(&self, u: f64, v: f64, p: crate::types::Vec3) -> Rgb {
[INFO] [stdout]   |                     ^ help: if this is intentional, prefix it with an underscore: `_u`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v`
[INFO] [stdout]  --> src/textures/solid_color.rs:9:29
[INFO] [stdout]   |
[INFO] [stdout] 9 |     fn value(&self, u: f64, v: f64, p: crate::types::Vec3) -> Rgb {
[INFO] [stdout]   |                             ^ help: if this is intentional, prefix it with an underscore: `_v`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `p`
[INFO] [stdout]  --> src/textures/solid_color.rs:9:37
[INFO] [stdout]   |
[INFO] [stdout] 9 |     fn value(&self, u: f64, v: f64, p: crate::types::Vec3) -> Rgb {
[INFO] [stdout]   |                                     ^ help: if this is intentional, prefix it with an underscore: `_p`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `self.aabb` which is behind a shared reference
[INFO] [stdout]   --> src/types/bvh.rs:34:9
[INFO] [stdout]    |
[INFO] [stdout] 34 |         self.aabb
[INFO] [stdout]    |         ^^^^^^^^^ move occurs because `self.aabb` has type `Aabb`, which does not implement the `Copy` trait
[INFO] [stdout]    |
[INFO] [stdout] note: if `Aabb` implemented `Clone`, you could clone the value
[INFO] [stdout]   --> src/types/aabb.rs:6:1
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct Aabb {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^ consider implementing `Clone` for this type
[INFO] [stdout]    |
[INFO] [stdout]   ::: src/types/bvh.rs:34:9
[INFO] [stdout]    |
[INFO] [stdout] 34 |         self.aabb
[INFO] [stdout]    |         --------- you could clone this value
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `exposure_time`
[INFO] [stdout]   --> src/types/bvh.rs:33:28
[INFO] [stdout]    |
[INFO] [stdout] 33 |     fn bounding_box(&self, exposure_time: f64) -> Aabb {
[INFO] [stdout]    |                            ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_exposure_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `self.aabb` which is behind a shared reference
[INFO] [stdout]   --> src/types/bvh.rs:34:9
[INFO] [stdout]    |
[INFO] [stdout] 34 |         self.aabb
[INFO] [stdout]    |         ^^^^^^^^^ move occurs because `self.aabb` has type `Aabb`, which does not implement the `Copy` trait
[INFO] [stdout]    |
[INFO] [stdout] note: if `Aabb` implemented `Clone`, you could clone the value
[INFO] [stdout]   --> src/types/aabb.rs:6:1
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct Aabb {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^ consider implementing `Clone` for this type
[INFO] [stdout]    |
[INFO] [stdout]   ::: src/types/bvh.rs:34:9
[INFO] [stdout]    |
[INFO] [stdout] 34 |         self.aabb
[INFO] [stdout]    |         --------- you could clone this value
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `exposure_time`
[INFO] [stdout]   --> src/types/bvh.rs:33:28
[INFO] [stdout]    |
[INFO] [stdout] 33 |     fn bounding_box(&self, exposure_time: f64) -> Aabb {
[INFO] [stdout]    |                            ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_exposure_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `pixels` as mutable, as it is not declared as mutable
[INFO] [stdout]   --> src/renderer.rs:41:17
[INFO] [stdout]    |
[INFO] [stdout] 41 |                 pixels[(y * width + x) as usize] = rgb_sum / (sample_count as f64);
[INFO] [stdout]    |                 ^^^^^^ cannot borrow as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]    |
[INFO] [stdout] 28 |         let mut pixels = Vec::<Rgb>::with_capacity((height * width) as usize);
[INFO] [stdout]    |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `i`
[INFO] [stdout]   --> src/renderer.rs:34:21
[INFO] [stdout]    |
[INFO] [stdout] 34 |                 for i in 0..sample_count {
[INFO] [stdout]    |                     ^ help: if this is intentional, prefix it with an underscore: `_i`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0505]: cannot move out of `hit_record` because it is borrowed
[INFO] [stdout]   --> src/renderer.rs:78:58
[INFO] [stdout]    |
[INFO] [stdout] 73 |             Some(hit_record) => {
[INFO] [stdout]    |                  ---------- binding `hit_record` declared here
[INFO] [stdout] ...
[INFO] [stdout] 78 |                 let s = hit_record.material.scatter(ray, hit_record);
[INFO] [stdout]    |                         ------------------- -------      ^^^^^^^^^^ move out of `hit_record` occurs here
[INFO] [stdout]    |                         |                   |
[INFO] [stdout]    |                         |                   borrow later used by call
[INFO] [stdout]    |                         borrow of `*hit_record.material` occurs here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `pixels` as mutable, as it is not declared as mutable
[INFO] [stdout]   --> src/renderer.rs:41:17
[INFO] [stdout]    |
[INFO] [stdout] 41 |                 pixels[(y * width + x) as usize] = rgb_sum / (sample_count as f64);
[INFO] [stdout]    |                 ^^^^^^ cannot borrow as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]    |
[INFO] [stdout] 28 |         let mut pixels = Vec::<Rgb>::with_capacity((height * width) as usize);
[INFO] [stdout]    |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `i`
[INFO] [stdout]   --> src/renderer.rs:34:21
[INFO] [stdout]    |
[INFO] [stdout] 34 |                 for i in 0..sample_count {
[INFO] [stdout]    |                     ^ help: if this is intentional, prefix it with an underscore: `_i`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0505]: cannot move out of `hit_record` because it is borrowed
[INFO] [stdout]   --> src/renderer.rs:78:58
[INFO] [stdout]    |
[INFO] [stdout] 73 |             Some(hit_record) => {
[INFO] [stdout]    |                  ---------- binding `hit_record` declared here
[INFO] [stdout] ...
[INFO] [stdout] 78 |                 let s = hit_record.material.scatter(ray, hit_record);
[INFO] [stdout]    |                         ------------------- -------      ^^^^^^^^^^ move out of `hit_record` occurs here
[INFO] [stdout]    |                         |                   |
[INFO] [stdout]    |                         |                   borrow later used by call
[INFO] [stdout]    |                         borrow of `*hit_record.material` occurs here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0015, E0308, E0382, E0384, E0425, E0505, E0507, E0596, E0605.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0015`.
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0015, E0308, E0382, E0384, E0425, E0505, E0507, E0596, E0605.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0015`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `RsRay` (bin "RsRay" test) due to 17 previous errors; 21 warnings emitted
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stderr] error: could not compile `RsRay` (bin "RsRay") due to 17 previous errors; 21 warnings emitted
[INFO] running `Command { std: "docker" "inspect" "142fb093081848f8d8590dabff76d339b9049017b7f42580aaefc84e86c23f62", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "142fb093081848f8d8590dabff76d339b9049017b7f42580aaefc84e86c23f62", kill_on_drop: false }`
[INFO] [stdout] 142fb093081848f8d8590dabff76d339b9049017b7f42580aaefc84e86c23f62
