[INFO] cloning repository https://github.com/AlvinKuruvilla/PhotoXMP
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/AlvinKuruvilla/PhotoXMP" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FAlvinKuruvilla%2FPhotoXMP", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FAlvinKuruvilla%2FPhotoXMP'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] d12a5a588e683b2a192fe5f9426b768a0d731ff1
[INFO] checking AlvinKuruvilla/PhotoXMP against try#ddcf048784667508cd676fef4667f88ae15628a3 for pr-148271
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FAlvinKuruvilla%2FPhotoXMP" "/workspace/builds/worker-1-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/AlvinKuruvilla/PhotoXMP
[INFO] finished tweaking git repo https://github.com/AlvinKuruvilla/PhotoXMP
[INFO] tweaked toml for git repo https://github.com/AlvinKuruvilla/PhotoXMP written to /workspace/builds/worker-1-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/AlvinKuruvilla/PhotoXMP on toolchain ddcf048784667508cd676fef4667f88ae15628a3
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+ddcf048784667508cd676fef4667f88ae15628a3" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+ddcf048784667508cd676fef4667f88ae15628a3" "generate-lockfile" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]      Locking 1 package to latest compatible version
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+ddcf048784667508cd676fef4667f88ae15628a3" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc2/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+ddcf048784667508cd676fef4667f88ae15628a3" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] c27b92e145bb4d808cf3b5e24fb22aeda0b2d87580e47096c1ae2b19c884c998
[INFO] running `Command { std: "docker" "start" "-a" "c27b92e145bb4d808cf3b5e24fb22aeda0b2d87580e47096c1ae2b19c884c998", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "c27b92e145bb4d808cf3b5e24fb22aeda0b2d87580e47096c1ae2b19c884c998", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "c27b92e145bb4d808cf3b5e24fb22aeda0b2d87580e47096c1ae2b19c884c998", kill_on_drop: false }`
[INFO] [stdout] c27b92e145bb4d808cf3b5e24fb22aeda0b2d87580e47096c1ae2b19c884c998
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc2/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-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" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+ddcf048784667508cd676fef4667f88ae15628a3" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] be0c8467c00df756d336e08feb60c4277b532a6133af2a3956204545477e6029
[INFO] running `Command { std: "docker" "start" "-a" "be0c8467c00df756d336e08feb60c4277b532a6133af2a3956204545477e6029", kill_on_drop: false }`
[INFO] [stderr]     Checking photo_xmp v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused imports: `BufRead` and `Read`
[INFO] [stdout]  --> src/Utils.rs:7:33
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::io::{BufWriter, Write, BufRead, Read};
[INFO] [stdout]   |                                 ^^^^^^^  ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BufRead` and `Read`
[INFO] [stdout]  --> src/Utils.rs:7:33
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::io::{BufWriter, Write, BufRead, Read};
[INFO] [stdout]   |                                 ^^^^^^^  ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]   --> src/lib.rs:93:10
[INFO] [stdout]    |
[INFO] [stdout] 86 |               return false;
[INFO] [stdout]    |               ------------ any code following this expression is unreachable
[INFO] [stdout] ...
[INFO] [stdout] 93 | /          while img_file_path.exists() && xmp_file_path.exists() {
[INFO] [stdout] 94 | |               return true;
[INFO] [stdout] 95 | |           }
[INFO] [stdout]    | |___________^ unreachable expression
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unreachable_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]   --> src/lib.rs:93:10
[INFO] [stdout]    |
[INFO] [stdout] 86 |               return false;
[INFO] [stdout]    |               ------------ any code following this expression is unreachable
[INFO] [stdout] ...
[INFO] [stdout] 93 | /          while img_file_path.exists() && xmp_file_path.exists() {
[INFO] [stdout] 94 | |               return true;
[INFO] [stdout] 95 | |           }
[INFO] [stdout]    | |___________^ unreachable expression
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unreachable_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/lib.rs:93:10
[INFO] [stdout]    |
[INFO] [stdout] 76 |       pub fn retrieve_data(folder: String, start_name: String) -> bool {
[INFO] [stdout]    |                                                                   ---- expected `bool` because of return type
[INFO] [stdout] ...
[INFO] [stdout] 93 | /          while img_file_path.exists() && xmp_file_path.exists() {
[INFO] [stdout] 94 | |               return true;
[INFO] [stdout] 95 | |           }
[INFO] [stdout]    | |___________^ expected `bool`, found `()`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `while` loops evaluate to unit type `()`
[INFO] [stdout] help: consider returning a value here
[INFO] [stdout]    |
[INFO] [stdout] 95 ~           }
[INFO] [stdout] 96 +          /* `bool` value */
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/lib.rs:93:10
[INFO] [stdout]    |
[INFO] [stdout] 76 |       pub fn retrieve_data(folder: String, start_name: String) -> bool {
[INFO] [stdout]    |                                                                   ---- expected `bool` because of return type
[INFO] [stdout] ...
[INFO] [stdout] 93 | /          while img_file_path.exists() && xmp_file_path.exists() {
[INFO] [stdout] 94 | |               return true;
[INFO] [stdout] 95 | |           }
[INFO] [stdout]    | |___________^ expected `bool`, found `()`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `while` loops evaluate to unit type `()`
[INFO] [stdout] help: consider returning a value here
[INFO] [stdout]    |
[INFO] [stdout] 95 ~           }
[INFO] [stdout] 96 +          /* `bool` value */
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `increments`
[INFO] [stdout]   --> src/Exposure.rs:31:13
[INFO] [stdout]    |
[INFO] [stdout] 31 |         let increments = self.expo/tmp;
[INFO] [stdout]    |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_increments`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `images`
[INFO] [stdout]   --> src/Change.rs:16:23
[INFO] [stdout]    |
[INFO] [stdout] 16 |     pub fn create_new(images: Vec<Image>, sln: i32, pln: i32, start: i32, end: i32) -> Change {
[INFO] [stdout]    |                       ^^^^^^ help: if this is intentional, prefix it with an underscore: `_images`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sln`
[INFO] [stdout]   --> src/Change.rs:16:43
[INFO] [stdout]    |
[INFO] [stdout] 16 |     pub fn create_new(images: Vec<Image>, sln: i32, pln: i32, start: i32, end: i32) -> Change {
[INFO] [stdout]    |                                           ^^^ help: if this is intentional, prefix it with an underscore: `_sln`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `increments`
[INFO] [stdout]   --> src/Exposure.rs:31:13
[INFO] [stdout]    |
[INFO] [stdout] 31 |         let increments = self.expo/tmp;
[INFO] [stdout]    |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_increments`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `images`
[INFO] [stdout]   --> src/Change.rs:16:23
[INFO] [stdout]    |
[INFO] [stdout] 16 |     pub fn create_new(images: Vec<Image>, sln: i32, pln: i32, start: i32, end: i32) -> Change {
[INFO] [stdout]    |                       ^^^^^^ help: if this is intentional, prefix it with an underscore: `_images`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sln`
[INFO] [stdout]   --> src/Change.rs:16:43
[INFO] [stdout]    |
[INFO] [stdout] 16 |     pub fn create_new(images: Vec<Image>, sln: i32, pln: i32, start: i32, end: i32) -> Change {
[INFO] [stdout]    |                                           ^^^ help: if this is intentional, prefix it with an underscore: `_sln`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pln`
[INFO] [stdout]   --> src/Change.rs:16:53
[INFO] [stdout]    |
[INFO] [stdout] 16 |     pub fn create_new(images: Vec<Image>, sln: i32, pln: i32, start: i32, end: i32) -> Change {
[INFO] [stdout]    |                                                     ^^^ help: if this is intentional, prefix it with an underscore: `_pln`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pln`
[INFO] [stdout]   --> src/Change.rs:16:53
[INFO] [stdout]    |
[INFO] [stdout] 16 |     pub fn create_new(images: Vec<Image>, sln: i32, pln: i32, start: i32, end: i32) -> Change {
[INFO] [stdout]    |                                                     ^^^ help: if this is intentional, prefix it with an underscore: `_pln`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start`
[INFO] [stdout]   --> src/Change.rs:16:63
[INFO] [stdout]    |
[INFO] [stdout] 16 |     pub fn create_new(images: Vec<Image>, sln: i32, pln: i32, start: i32, end: i32) -> Change {
[INFO] [stdout]    |                                                               ^^^^^ help: if this is intentional, prefix it with an underscore: `_start`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `end`
[INFO] [stdout]   --> src/Change.rs:16:75
[INFO] [stdout]    |
[INFO] [stdout] 16 |     pub fn create_new(images: Vec<Image>, sln: i32, pln: i32, start: i32, end: i32) -> Change {
[INFO] [stdout]    |                                                                           ^^^ help: if this is intentional, prefix it with an underscore: `_end`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start`
[INFO] [stdout]   --> src/Change.rs:16:63
[INFO] [stdout]    |
[INFO] [stdout] 16 |     pub fn create_new(images: Vec<Image>, sln: i32, pln: i32, start: i32, end: i32) -> Change {
[INFO] [stdout]    |                                                               ^^^^^ help: if this is intentional, prefix it with an underscore: `_start`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `end`
[INFO] [stdout]   --> src/Change.rs:16:75
[INFO] [stdout]    |
[INFO] [stdout] 16 |     pub fn create_new(images: Vec<Image>, sln: i32, pln: i32, start: i32, end: i32) -> Change {
[INFO] [stdout]    |                                                                           ^^^ help: if this is intentional, prefix it with an underscore: `_end`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `tmp` as mutable, as it is not declared as mutable
[INFO] [stdout]   --> src/Change.rs:39:13
[INFO] [stdout]    |
[INFO] [stdout] 39 |         let tmp = self.image_queue.iter();
[INFO] [stdout]    |             ^^^ not mutable
[INFO] [stdout] ...
[INFO] [stdout] 43 |              t = tmp.next().unwrap().to_owned();
[INFO] [stdout]    |                  --- cannot borrow as mutable
[INFO] [stdout] ...
[INFO] [stdout] 48 |             let curr = tmp.nth(a.try_into().unwrap()).unwrap();
[INFO] [stdout]    |                        --- cannot borrow as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]    |
[INFO] [stdout] 39 |         let mut tmp = self.image_queue.iter();
[INFO] [stdout]    |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0384]: cannot assign twice to immutable variable `t`
[INFO] [stdout]   --> src/Change.rs:43:14
[INFO] [stdout]    |
[INFO] [stdout] 43 |              t = tmp.next().unwrap().to_owned();
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot assign twice to immutable variable
[INFO] [stdout]    |
[INFO] [stdout] help: consider making this binding mutable
[INFO] [stdout]    |
[INFO] [stdout] 41 |         let mut t: &Image;
[INFO] [stdout]    |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0381]: used binding `t` is possibly-uninitialized
[INFO] [stdout]   --> src/Change.rs:45:32
[INFO] [stdout]    |
[INFO] [stdout] 41 |         let t: &Image;
[INFO] [stdout]    |             - binding declared here but left uninitialized
[INFO] [stdout] 42 |         while i < self.sln {
[INFO] [stdout]    |               ------------ if this condition isn't met and the `while` loop runs 0 times, `t` is not initialized
[INFO] [stdout] ...
[INFO] [stdout] 45 |         let start = Util::find(t.get_xmp().unwrap(), key);
[INFO] [stdout]    |                                ^ `*t` used here but it is possibly-uninitialized
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `tmp` as mutable, as it is not declared as mutable
[INFO] [stdout]   --> src/Change.rs:39:13
[INFO] [stdout]    |
[INFO] [stdout] 39 |         let tmp = self.image_queue.iter();
[INFO] [stdout]    |             ^^^ not mutable
[INFO] [stdout] ...
[INFO] [stdout] 43 |              t = tmp.next().unwrap().to_owned();
[INFO] [stdout]    |                  --- cannot borrow as mutable
[INFO] [stdout] ...
[INFO] [stdout] 48 |             let curr = tmp.nth(a.try_into().unwrap()).unwrap();
[INFO] [stdout]    |                        --- cannot borrow as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]    |
[INFO] [stdout] 39 |         let mut tmp = self.image_queue.iter();
[INFO] [stdout]    |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0384]: cannot assign twice to immutable variable `t`
[INFO] [stdout]   --> src/Change.rs:43:14
[INFO] [stdout]    |
[INFO] [stdout] 43 |              t = tmp.next().unwrap().to_owned();
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot assign twice to immutable variable
[INFO] [stdout]    |
[INFO] [stdout] help: consider making this binding mutable
[INFO] [stdout]    |
[INFO] [stdout] 41 |         let mut t: &Image;
[INFO] [stdout]    |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0381]: used binding `t` is possibly-uninitialized
[INFO] [stdout]   --> src/Change.rs:45:32
[INFO] [stdout]    |
[INFO] [stdout] 41 |         let t: &Image;
[INFO] [stdout]    |             - binding declared here but left uninitialized
[INFO] [stdout] 42 |         while i < self.sln {
[INFO] [stdout]    |               ------------ if this condition isn't met and the `while` loop runs 0 times, `t` is not initialized
[INFO] [stdout] ...
[INFO] [stdout] 45 |         let start = Util::find(t.get_xmp().unwrap(), key);
[INFO] [stdout]    |                                ^ `*t` used here but it is possibly-uninitialized
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `*t` which is behind a shared reference
[INFO] [stdout]    --> src/Change.rs:45:32
[INFO] [stdout]     |
[INFO] [stdout]  45 |         let start = Util::find(t.get_xmp().unwrap(), key);
[INFO] [stdout]     |                                ^ --------- `*t` moved due to this method call
[INFO] [stdout]     |                                |
[INFO] [stdout]     |                                move occurs because `*t` has type `Image`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] note: `Image::get_xmp` takes ownership of the receiver `self`, which moves `*t`
[INFO] [stdout]    --> src/lib.rs:160:20
[INFO] [stdout]     |
[INFO] [stdout] 160 |     pub fn get_xmp(self) -> Option<String> {
[INFO] [stdout]     |                    ^^^^
[INFO] [stdout] note: if `Image` implemented `Clone`, you could clone the value
[INFO] [stdout]    --> src/lib.rs:101:1
[INFO] [stdout]     |
[INFO] [stdout] 101 | pub struct Image {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^ consider implementing `Clone` for this type
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/Change.rs:45:32
[INFO] [stdout]     |
[INFO] [stdout]  45 |         let start = Util::find(t.get_xmp().unwrap(), key);
[INFO] [stdout]     |                                - you could clone this value
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `*t` which is behind a shared reference
[INFO] [stdout]    --> src/Change.rs:45:32
[INFO] [stdout]     |
[INFO] [stdout]  45 |         let start = Util::find(t.get_xmp().unwrap(), key);
[INFO] [stdout]     |                                ^ --------- `*t` moved due to this method call
[INFO] [stdout]     |                                |
[INFO] [stdout]     |                                move occurs because `*t` has type `Image`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] note: `Image::get_xmp` takes ownership of the receiver `self`, which moves `*t`
[INFO] [stdout]    --> src/lib.rs:160:20
[INFO] [stdout]     |
[INFO] [stdout] 160 |     pub fn get_xmp(self) -> Option<String> {
[INFO] [stdout]     |                    ^^^^
[INFO] [stdout] note: if `Image` implemented `Clone`, you could clone the value
[INFO] [stdout]    --> src/lib.rs:101:1
[INFO] [stdout]     |
[INFO] [stdout] 101 | pub struct Image {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^ consider implementing `Clone` for this type
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/Change.rs:45:32
[INFO] [stdout]     |
[INFO] [stdout]  45 |         let start = Util::find(t.get_xmp().unwrap(), key);
[INFO] [stdout]     |                                - you could clone this value
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `*curr` which is behind a shared reference
[INFO] [stdout]    --> src/Change.rs:49:24
[INFO] [stdout]     |
[INFO] [stdout]  49 |             let file = curr.get_xmp().unwrap();
[INFO] [stdout]     |                        ^^^^ --------- `*curr` moved due to this method call
[INFO] [stdout]     |                        |
[INFO] [stdout]     |                        move occurs because `*curr` has type `Image`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] note: if `Image` implemented `Clone`, you could clone the value
[INFO] [stdout]    --> src/lib.rs:101:1
[INFO] [stdout]     |
[INFO] [stdout] 101 | pub struct Image {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^ consider implementing `Clone` for this type
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/Change.rs:49:24
[INFO] [stdout]     |
[INFO] [stdout]  49 |             let file = curr.get_xmp().unwrap();
[INFO] [stdout]     |                        ---- you could clone this value
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `key`
[INFO] [stdout]   --> src/Change.rs:51:48
[INFO] [stdout]    |
[INFO] [stdout] 38 |     pub fn update_metadata(self, key: String) {
[INFO] [stdout]    |                                  --- move occurs because `key` has type `String`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 45 |         let start = Util::find(t.get_xmp().unwrap(), key);
[INFO] [stdout]    |                                                      --- value moved here
[INFO] [stdout] ...
[INFO] [stdout] 51 |             let new_data = Util::replace(file, key, new_val.try_into().unwrap());
[INFO] [stdout]    |                                                ^^^ value used here after move
[INFO] [stdout]    |
[INFO] [stdout] note: consider changing this parameter type in method `find` to borrow instead if owning the value isn't necessary
[INFO] [stdout]   --> src/Utils.rs:53:36
[INFO] [stdout]    |
[INFO] [stdout] 53 |     pub fn find(path: String, key: String) -> String {
[INFO] [stdout]    |            ---- in this method     ^^^^^^ this parameter takes ownership of the value
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]    |
[INFO] [stdout] 45 |         let start = Util::find(t.get_xmp().unwrap(), key.clone());
[INFO] [stdout]    |                                                         ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `*curr` which is behind a shared reference
[INFO] [stdout]    --> src/Change.rs:49:24
[INFO] [stdout]     |
[INFO] [stdout]  49 |             let file = curr.get_xmp().unwrap();
[INFO] [stdout]     |                        ^^^^ --------- `*curr` moved due to this method call
[INFO] [stdout]     |                        |
[INFO] [stdout]     |                        move occurs because `*curr` has type `Image`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] note: if `Image` implemented `Clone`, you could clone the value
[INFO] [stdout]    --> src/lib.rs:101:1
[INFO] [stdout]     |
[INFO] [stdout] 101 | pub struct Image {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^ consider implementing `Clone` for this type
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/Change.rs:49:24
[INFO] [stdout]     |
[INFO] [stdout]  49 |             let file = curr.get_xmp().unwrap();
[INFO] [stdout]     |                        ---- you could clone this value
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `key`
[INFO] [stdout]   --> src/Change.rs:51:48
[INFO] [stdout]    |
[INFO] [stdout] 38 |     pub fn update_metadata(self, key: String) {
[INFO] [stdout]    |                                  --- move occurs because `key` has type `String`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 45 |         let start = Util::find(t.get_xmp().unwrap(), key);
[INFO] [stdout]    |                                                      --- value moved here
[INFO] [stdout] ...
[INFO] [stdout] 51 |             let new_data = Util::replace(file, key, new_val.try_into().unwrap());
[INFO] [stdout]    |                                                ^^^ value used here after move
[INFO] [stdout]    |
[INFO] [stdout] note: consider changing this parameter type in method `find` to borrow instead if owning the value isn't necessary
[INFO] [stdout]   --> src/Utils.rs:53:36
[INFO] [stdout]    |
[INFO] [stdout] 53 |     pub fn find(path: String, key: String) -> String {
[INFO] [stdout]    |            ---- in this method     ^^^^^^ this parameter takes ownership of the value
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]    |
[INFO] [stdout] 45 |         let start = Util::find(t.get_xmp().unwrap(), key.clone());
[INFO] [stdout]    |                                                         ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: borrow of moved value: `key`
[INFO] [stdout]   --> src/Change.rs:53:16
[INFO] [stdout]    |
[INFO] [stdout] 38 |     pub fn update_metadata(self, key: String) {
[INFO] [stdout]    |                                  --- move occurs because `key` has type `String`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 47 |         while a < self.eln {
[INFO] [stdout]    |         ------------------ inside of this loop
[INFO] [stdout] ...
[INFO] [stdout] 51 |             let new_data = Util::replace(file, key, new_val.try_into().unwrap());
[INFO] [stdout]    |                                                --- value moved here
[INFO] [stdout] 52 |             
[INFO] [stdout] 53 |             if key == "Exposure" {
[INFO] [stdout]    |                ^^^ value borrowed here after move
[INFO] [stdout]    |
[INFO] [stdout] note: consider changing this parameter type in method `replace` to borrow instead if owning the value isn't necessary
[INFO] [stdout]   --> src/Utils.rs:72:39
[INFO] [stdout]    |
[INFO] [stdout] 72 |     pub fn replace(path: String, key: String, replace: u64)-> String {
[INFO] [stdout]    |            ------- in this method     ^^^^^^ this parameter takes ownership of the value
[INFO] [stdout] help: consider moving the expression out of the loop so it is only moved once
[INFO] [stdout]    |
[INFO] [stdout] 47 ~         let mut value = Util::replace(file, key, new_val.try_into().unwrap());
[INFO] [stdout] 48 ~         while a < self.eln {
[INFO] [stdout] 49 |             let curr = tmp.nth(a.try_into().unwrap()).unwrap();
[INFO] [stdout] 50 |             let file = curr.get_xmp().unwrap();
[INFO] [stdout] 51 |             let new_val: i32 = start.parse::<i32>().unwrap() + (self.increments * (a - self.sln));
[INFO] [stdout] 52 ~             let new_data = value;
[INFO] [stdout]    |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]    |
[INFO] [stdout] 51 |             let new_data = Util::replace(file, key.clone(), new_val.try_into().unwrap());
[INFO] [stdout]    |                                                   ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: borrow of moved value: `key`
[INFO] [stdout]   --> src/Change.rs:53:16
[INFO] [stdout]    |
[INFO] [stdout] 38 |     pub fn update_metadata(self, key: String) {
[INFO] [stdout]    |                                  --- move occurs because `key` has type `String`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 47 |         while a < self.eln {
[INFO] [stdout]    |         ------------------ inside of this loop
[INFO] [stdout] ...
[INFO] [stdout] 51 |             let new_data = Util::replace(file, key, new_val.try_into().unwrap());
[INFO] [stdout]    |                                                --- value moved here
[INFO] [stdout] 52 |             
[INFO] [stdout] 53 |             if key == "Exposure" {
[INFO] [stdout]    |                ^^^ value borrowed here after move
[INFO] [stdout]    |
[INFO] [stdout] note: consider changing this parameter type in method `replace` to borrow instead if owning the value isn't necessary
[INFO] [stdout]   --> src/Utils.rs:72:39
[INFO] [stdout]    |
[INFO] [stdout] 72 |     pub fn replace(path: String, key: String, replace: u64)-> String {
[INFO] [stdout]    |            ------- in this method     ^^^^^^ this parameter takes ownership of the value
[INFO] [stdout] help: consider moving the expression out of the loop so it is only moved once
[INFO] [stdout]    |
[INFO] [stdout] 47 ~         let mut value = Util::replace(file, key, new_val.try_into().unwrap());
[INFO] [stdout] 48 ~         while a < self.eln {
[INFO] [stdout] 49 |             let curr = tmp.nth(a.try_into().unwrap()).unwrap();
[INFO] [stdout] 50 |             let file = curr.get_xmp().unwrap();
[INFO] [stdout] 51 |             let new_val: i32 = start.parse::<i32>().unwrap() + (self.increments * (a - self.sln));
[INFO] [stdout] 52 ~             let new_data = value;
[INFO] [stdout]    |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]    |
[INFO] [stdout] 51 |             let new_data = Util::replace(file, key.clone(), new_val.try_into().unwrap());
[INFO] [stdout]    |                                                   ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `*t` which is behind a shared reference
[INFO] [stdout]    --> src/Change.rs:54:43
[INFO] [stdout]     |
[INFO] [stdout]  54 |                 let exposure = Util::find(t.get_xmp().unwrap(), "Exposure2012".to_string());
[INFO] [stdout]     |                                           ^ --------- `*t` moved due to this method call
[INFO] [stdout]     |                                           |
[INFO] [stdout]     |                                           move occurs because `*t` has type `Image`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] note: if `Image` implemented `Clone`, you could clone the value
[INFO] [stdout]    --> src/lib.rs:101:1
[INFO] [stdout]     |
[INFO] [stdout] 101 | pub struct Image {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^ consider implementing `Clone` for this type
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/Change.rs:54:43
[INFO] [stdout]     |
[INFO] [stdout]  54 |                 let exposure = Util::find(t.get_xmp().unwrap(), "Exposure2012".to_string());
[INFO] [stdout]     |                                           - you could clone this value
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `*curr` which is behind a shared reference
[INFO] [stdout]    --> src/Change.rs:56:17
[INFO] [stdout]     |
[INFO] [stdout]  56 |                 curr.set_exposure(e);
[INFO] [stdout]     |                 ^^^^ --------------- `*curr` moved due to this method call
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 move occurs because `*curr` has type `Image`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] note: `Image::set_exposure` takes ownership of the receiver `self`, which moves `*curr`
[INFO] [stdout]    --> src/lib.rs:188:25
[INFO] [stdout]     |
[INFO] [stdout] 188 |     pub fn set_exposure(self, e: u64) {
[INFO] [stdout]     |                         ^^^^
[INFO] [stdout] note: if `Image` implemented `Clone`, you could clone the value
[INFO] [stdout]    --> src/lib.rs:101:1
[INFO] [stdout]     |
[INFO] [stdout] 101 | pub struct Image {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^ consider implementing `Clone` for this type
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/Change.rs:56:17
[INFO] [stdout]     |
[INFO] [stdout]  56 |                 curr.set_exposure(e);
[INFO] [stdout]     |                 ---- you could clone this value
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `*t` which is behind a shared reference
[INFO] [stdout]    --> src/Change.rs:60:48
[INFO] [stdout]     |
[INFO] [stdout]  60 |                 let white_balance = Util::find(t.get_xmp().unwrap(), "Temperature".to_string());
[INFO] [stdout]     |                                                ^ --------- `*t` moved due to this method call
[INFO] [stdout]     |                                                |
[INFO] [stdout]     |                                                move occurs because `*t` has type `Image`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] note: if `Image` implemented `Clone`, you could clone the value
[INFO] [stdout]    --> src/lib.rs:101:1
[INFO] [stdout]     |
[INFO] [stdout] 101 | pub struct Image {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^ consider implementing `Clone` for this type
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/Change.rs:60:48
[INFO] [stdout]     |
[INFO] [stdout]  60 |                 let white_balance = Util::find(t.get_xmp().unwrap(), "Temperature".to_string());
[INFO] [stdout]     |                                                - you could clone this value
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `*curr` which is behind a shared reference
[INFO] [stdout]    --> src/Change.rs:62:17
[INFO] [stdout]     |
[INFO] [stdout]  62 |                 curr.set_white_balance(w);
[INFO] [stdout]     |                 ^^^^ -------------------- `*curr` moved due to this method call
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 move occurs because `*curr` has type `Image`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] note: `Image::set_white_balance` takes ownership of the receiver `self`, which moves `*curr`
[INFO] [stdout]    --> src/lib.rs:191:30
[INFO] [stdout]     |
[INFO] [stdout] 191 |     pub fn set_white_balance(self, w: u32) {
[INFO] [stdout]     |                              ^^^^
[INFO] [stdout] note: if `Image` implemented `Clone`, you could clone the value
[INFO] [stdout]    --> src/lib.rs:101:1
[INFO] [stdout]     |
[INFO] [stdout] 101 | pub struct Image {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^ consider implementing `Clone` for this type
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/Change.rs:62:17
[INFO] [stdout]     |
[INFO] [stdout]  62 |                 curr.set_white_balance(w);
[INFO] [stdout]     |                 ---- you could clone this value
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/Utils.rs:16:13
[INFO] [stdout]    |
[INFO] [stdout] 16 |         let mut file = File::create(i.get_xmp().unwrap()).expect("Unable to create requested file");
[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/Utils.rs:23:13
[INFO] [stdout]    |
[INFO] [stdout] 23 |         let mut file = File::create(i.get_xmp().unwrap()).expect("Unable to create requested file");
[INFO] [stdout]    |             ----^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `*i` which is behind a shared reference
[INFO] [stdout]    --> src/Utils.rs:23:37
[INFO] [stdout]     |
[INFO] [stdout]  23 |         let mut file = File::create(i.get_xmp().unwrap()).expect("Unable to create requested file");
[INFO] [stdout]     |                                     ^ --------- `*i` moved due to this method call
[INFO] [stdout]     |                                     |
[INFO] [stdout]     |                                     move occurs because `*i` has type `Image`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] note: `Image::get_xmp` takes ownership of the receiver `self`, which moves `*i`
[INFO] [stdout]    --> src/lib.rs:160:20
[INFO] [stdout]     |
[INFO] [stdout] 160 |     pub fn get_xmp(self) -> Option<String> {
[INFO] [stdout]     |                    ^^^^
[INFO] [stdout] note: if `Image` implemented `Clone`, you could clone the value
[INFO] [stdout]    --> src/lib.rs:101:1
[INFO] [stdout]     |
[INFO] [stdout] 101 | pub struct Image {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^ consider implementing `Clone` for this type
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/Utils.rs:23:37
[INFO] [stdout]     |
[INFO] [stdout]  23 |         let mut file = File::create(i.get_xmp().unwrap()).expect("Unable to create requested file");
[INFO] [stdout]     |                                     - you could clone this value
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `*t` which is behind a shared reference
[INFO] [stdout]    --> src/Change.rs:54:43
[INFO] [stdout]     |
[INFO] [stdout]  54 |                 let exposure = Util::find(t.get_xmp().unwrap(), "Exposure2012".to_string());
[INFO] [stdout]     |                                           ^ --------- `*t` moved due to this method call
[INFO] [stdout]     |                                           |
[INFO] [stdout]     |                                           move occurs because `*t` has type `Image`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] note: if `Image` implemented `Clone`, you could clone the value
[INFO] [stdout]    --> src/lib.rs:101:1
[INFO] [stdout]     |
[INFO] [stdout] 101 | pub struct Image {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^ consider implementing `Clone` for this type
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/Change.rs:54:43
[INFO] [stdout]     |
[INFO] [stdout]  54 |                 let exposure = Util::find(t.get_xmp().unwrap(), "Exposure2012".to_string());
[INFO] [stdout]     |                                           - you could clone this value
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `*curr` which is behind a shared reference
[INFO] [stdout]    --> src/Change.rs:56:17
[INFO] [stdout]     |
[INFO] [stdout]  56 |                 curr.set_exposure(e);
[INFO] [stdout]     |                 ^^^^ --------------- `*curr` moved due to this method call
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 move occurs because `*curr` has type `Image`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] note: `Image::set_exposure` takes ownership of the receiver `self`, which moves `*curr`
[INFO] [stdout]    --> src/lib.rs:188:25
[INFO] [stdout]     |
[INFO] [stdout] 188 |     pub fn set_exposure(self, e: u64) {
[INFO] [stdout]     |                         ^^^^
[INFO] [stdout] note: if `Image` implemented `Clone`, you could clone the value
[INFO] [stdout]    --> src/lib.rs:101:1
[INFO] [stdout]     |
[INFO] [stdout] 101 | pub struct Image {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^ consider implementing `Clone` for this type
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/Change.rs:56:17
[INFO] [stdout]     |
[INFO] [stdout]  56 |                 curr.set_exposure(e);
[INFO] [stdout]     |                 ---- you could clone this value
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `*t` which is behind a shared reference
[INFO] [stdout]    --> src/Change.rs:60:48
[INFO] [stdout]     |
[INFO] [stdout]  60 |                 let white_balance = Util::find(t.get_xmp().unwrap(), "Temperature".to_string());
[INFO] [stdout]     |                                                ^ --------- `*t` moved due to this method call
[INFO] [stdout]     |                                                |
[INFO] [stdout]     |                                                move occurs because `*t` has type `Image`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] note: if `Image` implemented `Clone`, you could clone the value
[INFO] [stdout]    --> src/lib.rs:101:1
[INFO] [stdout]     |
[INFO] [stdout] 101 | pub struct Image {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^ consider implementing `Clone` for this type
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/Change.rs:60:48
[INFO] [stdout]     |
[INFO] [stdout]  60 |                 let white_balance = Util::find(t.get_xmp().unwrap(), "Temperature".to_string());
[INFO] [stdout]     |                                                - you could clone this value
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `photo_xmp` (lib test) due to 19 previous errors; 14 warnings emitted
[INFO] [stdout] error[E0507]: cannot move out of `*curr` which is behind a shared reference
[INFO] [stdout]    --> src/Change.rs:62:17
[INFO] [stdout]     |
[INFO] [stdout]  62 |                 curr.set_white_balance(w);
[INFO] [stdout]     |                 ^^^^ -------------------- `*curr` moved due to this method call
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 move occurs because `*curr` has type `Image`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] note: `Image::set_white_balance` takes ownership of the receiver `self`, which moves `*curr`
[INFO] [stdout]    --> src/lib.rs:191:30
[INFO] [stdout]     |
[INFO] [stdout] 191 |     pub fn set_white_balance(self, w: u32) {
[INFO] [stdout]     |                              ^^^^
[INFO] [stdout] note: if `Image` implemented `Clone`, you could clone the value
[INFO] [stdout]    --> src/lib.rs:101:1
[INFO] [stdout]     |
[INFO] [stdout] 101 | pub struct Image {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^ consider implementing `Clone` for this type
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/Change.rs:62:17
[INFO] [stdout]     |
[INFO] [stdout]  62 |                 curr.set_white_balance(w);
[INFO] [stdout]     |                 ---- you could clone this value
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/Utils.rs:16:13
[INFO] [stdout]    |
[INFO] [stdout] 16 |         let mut file = File::create(i.get_xmp().unwrap()).expect("Unable to create requested file");
[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] [stderr] error: could not compile `photo_xmp` (lib) due to 19 previous errors; 14 warnings emitted
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/Utils.rs:23:13
[INFO] [stdout]    |
[INFO] [stdout] 23 |         let mut file = File::create(i.get_xmp().unwrap()).expect("Unable to create requested file");
[INFO] [stdout]    |             ----^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `*i` which is behind a shared reference
[INFO] [stdout]    --> src/Utils.rs:23:37
[INFO] [stdout]     |
[INFO] [stdout]  23 |         let mut file = File::create(i.get_xmp().unwrap()).expect("Unable to create requested file");
[INFO] [stdout]     |                                     ^ --------- `*i` moved due to this method call
[INFO] [stdout]     |                                     |
[INFO] [stdout]     |                                     move occurs because `*i` has type `Image`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] note: `Image::get_xmp` takes ownership of the receiver `self`, which moves `*i`
[INFO] [stdout]    --> src/lib.rs:160:20
[INFO] [stdout]     |
[INFO] [stdout] 160 |     pub fn get_xmp(self) -> Option<String> {
[INFO] [stdout]     |                    ^^^^
[INFO] [stdout] note: if `Image` implemented `Clone`, you could clone the value
[INFO] [stdout]    --> src/lib.rs:101:1
[INFO] [stdout]     |
[INFO] [stdout] 101 | pub struct Image {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^ consider implementing `Clone` for this type
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/Utils.rs:23:37
[INFO] [stdout]     |
[INFO] [stdout]  23 |         let mut file = File::create(i.get_xmp().unwrap()).expect("Unable to create requested file");
[INFO] [stdout]     |                                     - you could clone this value
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]   --> src/Utils.rs:96:71
[INFO] [stdout]    |
[INFO] [stdout] 96 |     pub fn create_value(path:String, pre_key:String, replace:&String, value:String) -> String
[INFO] [stdout]    |                                                                       ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]   --> src/Utils.rs:96:71
[INFO] [stdout]    |
[INFO] [stdout] 96 |     pub fn create_value(path:String, pre_key:String, replace:&String, value:String) -> String
[INFO] [stdout]    |                                                                       ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/lib.rs:55:25
[INFO] [stdout]    |
[INFO] [stdout] 55 |                     let mut j = count;
[INFO] [stdout]    |                         ----^
[INFO] [stdout]    |                         |
[INFO] [stdout]    |                         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `extension` as mutable, as it is not declared as mutable
[INFO] [stdout]   --> src/lib.rs:59:25
[INFO] [stdout]    |
[INFO] [stdout] 59 |                         extension.push_str(s_slice);
[INFO] [stdout]    |                         ^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]    |
[INFO] [stdout] 48 |         let mut extension = String::new();
[INFO] [stdout]    |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `string_num` as mutable, as it is not declared as mutable
[INFO] [stdout]   --> src/lib.rs:66:17
[INFO] [stdout]    |
[INFO] [stdout] 66 |                 string_num.push_str(s);
[INFO] [stdout]    |                 ^^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]    |
[INFO] [stdout] 49 |         let mut string_num = String::new();
[INFO] [stdout]    |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/lib.rs:55:25
[INFO] [stdout]    |
[INFO] [stdout] 55 |                     let mut j = count;
[INFO] [stdout]    |                         ----^
[INFO] [stdout]    |                         |
[INFO] [stdout]    |                         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `extension` as mutable, as it is not declared as mutable
[INFO] [stdout]   --> src/lib.rs:59:25
[INFO] [stdout]    |
[INFO] [stdout] 59 |                         extension.push_str(s_slice);
[INFO] [stdout]    |                         ^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]    |
[INFO] [stdout] 48 |         let mut extension = String::new();
[INFO] [stdout]    |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `string_num` as mutable, as it is not declared as mutable
[INFO] [stdout]   --> src/lib.rs:66:17
[INFO] [stdout]    |
[INFO] [stdout] 66 |                 string_num.push_str(s);
[INFO] [stdout]    |                 ^^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]    |
[INFO] [stdout] 49 |         let mut string_num = String::new();
[INFO] [stdout]    |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `pre_num` as mutable, as it is not declared as mutable
[INFO] [stdout]   --> src/lib.rs:71:17
[INFO] [stdout]    |
[INFO] [stdout] 71 |                 pre_num.push_str(b);
[INFO] [stdout]    |                 ^^^^^^^ cannot borrow as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]    |
[INFO] [stdout] 47 |         let mut pre_num = String::new();
[INFO] [stdout]    |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `pre_num` as mutable, as it is not declared as mutable
[INFO] [stdout]   --> src/lib.rs:71:17
[INFO] [stdout]    |
[INFO] [stdout] 71 |                 pre_num.push_str(b);
[INFO] [stdout]    |                 ^^^^^^^ cannot borrow as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]    |
[INFO] [stdout] 47 |         let mut pre_num = String::new();
[INFO] [stdout]    |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `folder`
[INFO] [stdout]   --> src/lib.rs:44:27
[INFO] [stdout]    |
[INFO] [stdout] 44 |     pub fn get_next_image(folder: String, curr_image: Image) {
[INFO] [stdout]    |                           ^^^^^^ help: if this is intentional, prefix it with an underscore: `_folder`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `folder`
[INFO] [stdout]   --> src/lib.rs:44:27
[INFO] [stdout]    |
[INFO] [stdout] 44 |     pub fn get_next_image(folder: String, curr_image: Image) {
[INFO] [stdout]    |                           ^^^^^^ help: if this is intentional, prefix it with an underscore: `_folder`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: borrow of moved value: `xmp_path`
[INFO] [stdout]    --> src/lib.rs:135:58
[INFO] [stdout]     |
[INFO] [stdout] 116 |         xmp_path: String,
[INFO] [stdout]     |         -------- move occurs because `xmp_path` has type `String`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 133 |             xmp_path,
[INFO] [stdout]     |             -------- value moved here
[INFO] [stdout] 134 |             exposure,
[INFO] [stdout] 135 |             image_path: String::from(&Util::get_XMP_name(&xmp_path)),
[INFO] [stdout]     |                                                          ^^^^^^^^^ value borrowed here after move
[INFO] [stdout]     |
[INFO] [stdout]     = note: borrow occurs due to deref coercion to `str`
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 133 |             xmp_path: xmp_path.clone(),
[INFO] [stdout]     |                     ++++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `image_path`
[INFO] [stdout]    --> src/lib.rs:117:9
[INFO] [stdout]     |
[INFO] [stdout] 117 |         image_path: String,
[INFO] [stdout]     |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_image_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: borrow of moved value: `xmp_path`
[INFO] [stdout]    --> src/lib.rs:135:58
[INFO] [stdout]     |
[INFO] [stdout] 116 |         xmp_path: String,
[INFO] [stdout]     |         -------- move occurs because `xmp_path` has type `String`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 133 |             xmp_path,
[INFO] [stdout]     |             -------- value moved here
[INFO] [stdout] 134 |             exposure,
[INFO] [stdout] 135 |             image_path: String::from(&Util::get_XMP_name(&xmp_path)),
[INFO] [stdout]     |                                                          ^^^^^^^^^ value borrowed here after move
[INFO] [stdout]     |
[INFO] [stdout]     = note: borrow occurs due to deref coercion to `str`
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 133 |             xmp_path: xmp_path.clone(),
[INFO] [stdout]     |                     ++++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0594]: cannot assign to `self.exposure`, as `self` is not declared as mutable
[INFO] [stdout]    --> src/lib.rs:189:9
[INFO] [stdout]     |
[INFO] [stdout] 189 |         self.exposure = e;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^ cannot assign
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout] 188 |     pub fn set_exposure(mut self, e: u64) {
[INFO] [stdout]     |                         +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `image_path`
[INFO] [stdout]    --> src/lib.rs:117:9
[INFO] [stdout]     |
[INFO] [stdout] 117 |         image_path: String,
[INFO] [stdout]     |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_image_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0594]: cannot assign to `self.white_balance`, as `self` is not declared as mutable
[INFO] [stdout]    --> src/lib.rs:192:9
[INFO] [stdout]     |
[INFO] [stdout] 192 |         self.white_balance = w;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^ cannot assign
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout] 191 |     pub fn set_white_balance(mut self, w: u32) {
[INFO] [stdout]     |                              +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0594]: cannot assign to `self.exposure`, as `self` is not declared as mutable
[INFO] [stdout]    --> src/lib.rs:189:9
[INFO] [stdout]     |
[INFO] [stdout] 189 |         self.exposure = e;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^ cannot assign
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout] 188 |     pub fn set_exposure(mut self, e: u64) {
[INFO] [stdout]     |                         +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0594]: cannot assign to `self.white_balance`, as `self` is not declared as mutable
[INFO] [stdout]    --> src/lib.rs:192:9
[INFO] [stdout]     |
[INFO] [stdout] 192 |         self.white_balance = w;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^ cannot assign
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout] 191 |     pub fn set_white_balance(mut self, w: u32) {
[INFO] [stdout]     |                              +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0308, E0381, E0382, E0384, E0507, E0594, E0596.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0308`.
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0308, E0381, E0382, E0384, E0507, E0594, E0596.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0308`.
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "be0c8467c00df756d336e08feb60c4277b532a6133af2a3956204545477e6029", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "be0c8467c00df756d336e08feb60c4277b532a6133af2a3956204545477e6029", kill_on_drop: false }`
[INFO] [stdout] be0c8467c00df756d336e08feb60c4277b532a6133af2a3956204545477e6029
