[INFO] cloning repository https://github.com/lreynolds18/cryptopals [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/lreynolds18/cryptopals" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Flreynolds18%2Fcryptopals", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Flreynolds18%2Fcryptopals'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] a144dc8081fb7cf99e7c15ea1426e03c73f78842 [INFO] checking lreynolds18/cryptopals against master#419b3e2d3e350822550eee0e82eeded4d324d584 for pr-135536 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Flreynolds18%2Fcryptopals" "/workspace/builds/worker-6-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc1/source'... [INFO] [stderr] done. [INFO] validating manifest of git repo https://github.com/lreynolds18/cryptopals on toolchain 419b3e2d3e350822550eee0e82eeded4d324d584 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+419b3e2d3e350822550eee0e82eeded4d324d584" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] started tweaking git repo https://github.com/lreynolds18/cryptopals [INFO] finished tweaking git repo https://github.com/lreynolds18/cryptopals [INFO] tweaked toml for git repo https://github.com/lreynolds18/cryptopals written to /workspace/builds/worker-6-tc1/source/Cargo.toml [INFO] crate git repo https://github.com/lreynolds18/cryptopals 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" "+419b3e2d3e350822550eee0e82eeded4d324d584" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] warning: no edition set: defaulting to the 2015 edition while the latest is 2024 [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded cargo_metadata v0.5.5 [INFO] [stderr] Downloaded serde v1.0.64 [INFO] [stderr] Downloaded serde_json v1.0.19 [INFO] [stderr] Downloaded serde_derive v1.0.64 [INFO] [stderr] Downloaded clippy_lints v0.0.206 [INFO] [stderr] Downloaded clippy v0.0.206 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/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:819108c5571ea2e421544af4d832f968d213c87fbe3707a016657f43d2f853bc" "/opt/rustwide/cargo-home/bin/cargo" "+419b3e2d3e350822550eee0e82eeded4d324d584" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] a3449fc2d197a82f0c9fe275d79051c35ede6a2a24a6571fc96c531ddc365f2b [INFO] running `Command { std: "docker" "start" "-a" "a3449fc2d197a82f0c9fe275d79051c35ede6a2a24a6571fc96c531ddc365f2b", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "a3449fc2d197a82f0c9fe275d79051c35ede6a2a24a6571fc96c531ddc365f2b", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "a3449fc2d197a82f0c9fe275d79051c35ede6a2a24a6571fc96c531ddc365f2b", kill_on_drop: false }` [INFO] [stdout] a3449fc2d197a82f0c9fe275d79051c35ede6a2a24a6571fc96c531ddc365f2b [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/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:819108c5571ea2e421544af4d832f968d213c87fbe3707a016657f43d2f853bc" "/opt/rustwide/cargo-home/bin/cargo" "+419b3e2d3e350822550eee0e82eeded4d324d584" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 518a5bcbdd6026e03903804ed3dea050e6c29ae556a9645c461bfbea8c70a836 [INFO] running `Command { std: "docker" "start" "-a" "518a5bcbdd6026e03903804ed3dea050e6c29ae556a9645c461bfbea8c70a836", kill_on_drop: false }` [INFO] [stderr] warning: no edition set: defaulting to the 2015 edition while the latest is 2024 [INFO] [stderr] Checking unicode-width v0.1.5 [INFO] [stderr] Checking libc v0.2.41 [INFO] [stderr] Checking bitflags v1.0.4 [INFO] [stderr] Checking vec_map v0.8.1 [INFO] [stderr] Checking strsim v0.8.0 [INFO] [stderr] Checking ansi_term v0.11.0 [INFO] [stderr] Checking textwrap v0.11.0 [INFO] [stderr] Checking atty v0.2.11 [INFO] [stderr] Checking clap v2.33.0 [INFO] [stderr] Checking cryptopals v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] error[E0603]: struct `Builder` is private [INFO] [stdout] --> src/set1/mod.rs:5:16 [INFO] [stdout] | [INFO] [stdout] 5 | use challenge::Builder; [INFO] [stdout] | ^^^^^^^ private struct [INFO] [stdout] | [INFO] [stdout] note: the struct `Builder` is defined here [INFO] [stdout] --> src/challenge.rs:51:1 [INFO] [stdout] | [INFO] [stdout] 51 | struct Builder { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `challenge::Challenge` [INFO] [stdout] --> src/set1/mod.rs:4:5 [INFO] [stdout] | [INFO] [stdout] 4 | use challenge::Challenge; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/storage.rs:118:19 [INFO] [stdout] | [INFO] [stdout] 118 | 48...57 => u - 48, // 0 - 9 [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: `#[warn(ellipsis_inclusive_range_patterns)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/storage.rs:119:19 [INFO] [stdout] | [INFO] [stdout] 119 | 97...102 => u - 87, // a - f [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/storage.rs:120:19 [INFO] [stdout] | [INFO] [stdout] 120 | 65...70 => u - 55, // A - F [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/storage.rs:126:19 [INFO] [stdout] | [INFO] [stdout] 126 | 65...90 => u - 65, // A - Z [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/storage.rs:127:19 [INFO] [stdout] | [INFO] [stdout] 127 | 97...122 => u - 71, // a - z [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/storage.rs:128:19 [INFO] [stdout] | [INFO] [stdout] 128 | 48...57 => u + 4, // 0 - 9 [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/storage.rs:152:18 [INFO] [stdout] | [INFO] [stdout] 152 | 0...9 => (u + 48) as char, // 0 - 9 [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/storage.rs:153:19 [INFO] [stdout] | [INFO] [stdout] 153 | 10...15 => (u + 87) as char, // a - f [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/storage.rs:159:18 [INFO] [stdout] | [INFO] [stdout] 159 | 0...25 => (u + 65) as char, // A - Z [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/storage.rs:160:19 [INFO] [stdout] | [INFO] [stdout] 160 | 26...51 => (u + 71) as char, // a - z [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/storage.rs:161:19 [INFO] [stdout] | [INFO] [stdout] 161 | 52...61 => (u - 4) as char, // 0 - 9 [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `storage::Storage` [INFO] [stdout] --> src/challenge.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use storage::Storage; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0603]: struct `Builder` is private [INFO] [stdout] --> src/set1/mod.rs:5:16 [INFO] [stdout] | [INFO] [stdout] 5 | use challenge::Builder; [INFO] [stdout] | ^^^^^^^ private struct [INFO] [stdout] | [INFO] [stdout] note: the struct `Builder` is defined here [INFO] [stdout] --> src/challenge.rs:51:1 [INFO] [stdout] | [INFO] [stdout] 51 | struct Builder { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `challenge::Challenge` [INFO] [stdout] --> src/set1/mod.rs:4:5 [INFO] [stdout] | [INFO] [stdout] 4 | use challenge::Challenge; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/storage.rs:118:19 [INFO] [stdout] | [INFO] [stdout] 118 | 48...57 => u - 48, // 0 - 9 [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: `#[warn(ellipsis_inclusive_range_patterns)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/storage.rs:119:19 [INFO] [stdout] | [INFO] [stdout] 119 | 97...102 => u - 87, // a - f [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/storage.rs:120:19 [INFO] [stdout] | [INFO] [stdout] 120 | 65...70 => u - 55, // A - F [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/storage.rs:126:19 [INFO] [stdout] | [INFO] [stdout] 126 | 65...90 => u - 65, // A - Z [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/storage.rs:127:19 [INFO] [stdout] | [INFO] [stdout] 127 | 97...122 => u - 71, // a - z [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/storage.rs:128:19 [INFO] [stdout] | [INFO] [stdout] 128 | 48...57 => u + 4, // 0 - 9 [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/storage.rs:152:18 [INFO] [stdout] | [INFO] [stdout] 152 | 0...9 => (u + 48) as char, // 0 - 9 [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/storage.rs:153:19 [INFO] [stdout] | [INFO] [stdout] 153 | 10...15 => (u + 87) as char, // a - f [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/storage.rs:159:18 [INFO] [stdout] | [INFO] [stdout] 159 | 0...25 => (u + 65) as char, // A - Z [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/storage.rs:160:19 [INFO] [stdout] | [INFO] [stdout] 160 | 26...51 => (u + 71) as char, // a - z [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `...` range patterns are deprecated [INFO] [stdout] --> src/storage.rs:161:19 [INFO] [stdout] | [INFO] [stdout] 161 | 52...61 => (u - 4) as char, // 0 - 9 [INFO] [stdout] | ^^^ help: use `..=` for an inclusive range [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `storage::Storage` [INFO] [stdout] --> src/challenge.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use storage::Storage; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `header` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:337:34 [INFO] [stdout] | [INFO] [stdout] 337 | fn header(&mut self, header: &str) -> &mut Self { [INFO] [stdout] | ^^^^ expected `String`, found `&str` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:28:34 [INFO] [stdout] | [INFO] [stdout] 28 | fn header(&mut self, header: String) -> &mut Self; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, String) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, &str) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 337 | fn header(&mut self, header: String) -> &mut Self { [INFO] [stdout] | ~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `input` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:341:32 [INFO] [stdout] | [INFO] [stdout] 341 | fn input(&mut self, input: &str) -> &mut Self { [INFO] [stdout] | ^^^^ expected `Option`, found `&str` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:29:32 [INFO] [stdout] | [INFO] [stdout] 29 | fn input(&mut self, input: Option) -> &mut Self; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, Option) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, &str) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 341 | fn input(&mut self, input: Option) -> &mut Self { [INFO] [stdout] | ~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `input_file` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:345:42 [INFO] [stdout] | [INFO] [stdout] 345 | fn input_file(&mut self, input_file: &str) -> &mut Self { [INFO] [stdout] | ^^^^ expected `Option`, found `&str` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:30:42 [INFO] [stdout] | [INFO] [stdout] 30 | fn input_file(&mut self, input_file: Option) -> &mut Self; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, Option) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, &str) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 345 | fn input_file(&mut self, input_file: Option) -> &mut Self { [INFO] [stdout] | ~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `input_type` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:349:42 [INFO] [stdout] | [INFO] [stdout] 349 | fn input_type(&mut self, input_type: &str) -> &mut Self { [INFO] [stdout] | ^^^^ expected `Option`, found `&str` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:31:42 [INFO] [stdout] | [INFO] [stdout] 31 | fn input_type(&mut self, input_type: Option) -> &mut Self; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, Option) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, &str) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 349 | fn input_type(&mut self, input_type: Option) -> &mut Self { [INFO] [stdout] | ~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `input2` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:353:34 [INFO] [stdout] | [INFO] [stdout] 353 | fn input2(&mut self, input2: &str) -> &mut Self { [INFO] [stdout] | ^^^^ expected `Option`, found `&str` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:32:34 [INFO] [stdout] | [INFO] [stdout] 32 | fn input2(&mut self, input2: Option) -> &mut Self; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, Option) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, &str) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 353 | fn input2(&mut self, input2: Option) -> &mut Self { [INFO] [stdout] | ~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `input2_type` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:357:44 [INFO] [stdout] | [INFO] [stdout] 357 | fn input2_type(&mut self, input2_type: &str) -> &mut Self { [INFO] [stdout] | ^^^^ expected `Option`, found `&str` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:33:44 [INFO] [stdout] | [INFO] [stdout] 33 | fn input2_type(&mut self, input2_type: Option) -> &mut Self; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, Option) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, &str) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 357 | fn input2_type(&mut self, input2_type: Option) -> &mut Self { [INFO] [stdout] | ~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `key` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:361:28 [INFO] [stdout] | [INFO] [stdout] 361 | fn key(&mut self, key: &str) -> &mut Self { [INFO] [stdout] | ^^^^ expected `Option`, found `&str` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:34:28 [INFO] [stdout] | [INFO] [stdout] 34 | fn key(&mut self, key: Option) -> &mut Self; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, Option) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, &str) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 361 | fn key(&mut self, key: Option) -> &mut Self { [INFO] [stdout] | ~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `key_type` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:365:38 [INFO] [stdout] | [INFO] [stdout] 365 | fn key_type(&mut self, key_type: &str) -> &mut Self { [INFO] [stdout] | ^^^^ expected `Option`, found `&str` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:35:38 [INFO] [stdout] | [INFO] [stdout] 35 | fn key_type(&mut self, key_type: Option) -> &mut Self; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, Option) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, &str) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 365 | fn key_type(&mut self, key_type: Option) -> &mut Self { [INFO] [stdout] | ~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `expected_type` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:369:48 [INFO] [stdout] | [INFO] [stdout] 369 | fn expected_type(&mut self, expected_type: &str) -> &mut Self { [INFO] [stdout] | ^^^^ expected `Option`, found `&str` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:36:48 [INFO] [stdout] | [INFO] [stdout] 36 | fn expected_type(&mut self, expected_type: Option) -> &mut Self; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, Option) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, &str) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 369 | fn expected_type(&mut self, expected_type: Option) -> &mut Self { [INFO] [stdout] | ~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `expected_line` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:373:48 [INFO] [stdout] | [INFO] [stdout] 373 | fn expected_line(&mut self, expected_line: i32) -> &mut Self { [INFO] [stdout] | ^^^ expected `Option`, found `i32` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:38:48 [INFO] [stdout] | [INFO] [stdout] 38 | fn expected_line(&mut self, expected_line: Option) -> &mut Self; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, Option) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, i32) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 373 | fn expected_line(&mut self, expected_line: Option) -> &mut Self { [INFO] [stdout] | ~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `expected_size` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:377:48 [INFO] [stdout] | [INFO] [stdout] 377 | fn expected_size(&mut self, expected_size: usize) -> &mut Self { [INFO] [stdout] | ^^^^^ expected `Option`, found `usize` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:40:48 [INFO] [stdout] | [INFO] [stdout] 40 | fn expected_size(&mut self, expected_size: Option) -> &mut Self; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, Option) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, usize) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 377 | fn expected_size(&mut self, expected_size: Option) -> &mut Self { [INFO] [stdout] | ~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `expected_key` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:381:46 [INFO] [stdout] | [INFO] [stdout] 381 | fn expected_key(&mut self, expected_key: &str) -> &mut Self { [INFO] [stdout] | ^^^^ expected `Option`, found `&str` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:42:46 [INFO] [stdout] | [INFO] [stdout] 42 | fn expected_key(&mut self, expected_key: Option) -> &mut Self; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, Option) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, &str) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 381 | fn expected_key(&mut self, expected_key: Option) -> &mut Self { [INFO] [stdout] | ~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `expected_key_type` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:385:56 [INFO] [stdout] | [INFO] [stdout] 385 | fn expected_key_type(&mut self, expected_key_type: &str) -> &mut Self { [INFO] [stdout] | ^^^^ expected `Option`, found `&str` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:44:56 [INFO] [stdout] | [INFO] [stdout] 44 | fn expected_key_type(&mut self, expected_key_type: Option) -> &mut Self; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, Option) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, &str) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 385 | fn expected_key_type(&mut self, expected_key_type: Option) -> &mut Self { [INFO] [stdout] | ~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `expected_answer` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:389:52 [INFO] [stdout] | [INFO] [stdout] 389 | fn expected_answer(&mut self, expected_answer: &str) -> &mut Self { [INFO] [stdout] | ^^^^ expected `Option`, found `&str` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:46:52 [INFO] [stdout] | [INFO] [stdout] 46 | fn expected_answer(&mut self, expected_answer: Option) -> &mut Self; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, Option) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, &str) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 389 | fn expected_answer(&mut self, expected_answer: Option) -> &mut Self { [INFO] [stdout] | ~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0046]: not all trait items implemented, missing: `actual_type`, `actual_line`, `actual_size`, `actual_key`, `actual_key_type`, `actual_answer` [INFO] [stdout] --> src/challenge.rs:336:1 [INFO] [stdout] | [INFO] [stdout] 37 | fn actual_type(&mut self, actual_type: Option) -> &mut Self; [INFO] [stdout] | -------------------------------------------------------------------- `actual_type` from trait [INFO] [stdout] 38 | fn expected_line(&mut self, expected_line: Option) -> &mut Self; [INFO] [stdout] 39 | fn actual_line(&mut self, actual_line: Option) -> &mut Self; [INFO] [stdout] | ----------------------------------------------------------------- `actual_line` from trait [INFO] [stdout] 40 | fn expected_size(&mut self, expected_size: Option) -> &mut Self; [INFO] [stdout] 41 | fn actual_size(&mut self, actual_answer: Option) -> &mut Self; [INFO] [stdout] | --------------------------------------------------------------------- `actual_size` from trait [INFO] [stdout] 42 | fn expected_key(&mut self, expected_key: Option) -> &mut Self; [INFO] [stdout] 43 | fn actual_key(&mut self, actual_key: Option) -> &mut Self; [INFO] [stdout] | ------------------------------------------------------------------ `actual_key` from trait [INFO] [stdout] 44 | fn expected_key_type(&mut self, expected_key_type: Option) -> &mut Self; [INFO] [stdout] 45 | fn actual_key_type(&mut self, actual_key_type: Option) -> &mut Self; [INFO] [stdout] | ---------------------------------------------------------------------------- `actual_key_type` from trait [INFO] [stdout] 46 | fn expected_answer(&mut self, expected_answer: Option) -> &mut Self; [INFO] [stdout] 47 | fn actual_answer(&mut self, actual_answer: Option) -> &mut Self; [INFO] [stdout] | ------------------------------------------------------------------------ `actual_answer` from trait [INFO] [stdout] ... [INFO] [stdout] 336 | impl ChallengeBuilder for Builder { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `actual_type`, `actual_line`, `actual_size`, `actual_key`, `actual_key_type`, `actual_answer` in implementation [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `header` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:337:34 [INFO] [stdout] | [INFO] [stdout] 337 | fn header(&mut self, header: &str) -> &mut Self { [INFO] [stdout] | ^^^^ expected `String`, found `&str` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:28:34 [INFO] [stdout] | [INFO] [stdout] 28 | fn header(&mut self, header: String) -> &mut Self; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, String) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, &str) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 337 | fn header(&mut self, header: String) -> &mut Self { [INFO] [stdout] | ~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `input` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:341:32 [INFO] [stdout] | [INFO] [stdout] 341 | fn input(&mut self, input: &str) -> &mut Self { [INFO] [stdout] | ^^^^ expected `Option`, found `&str` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:29:32 [INFO] [stdout] | [INFO] [stdout] 29 | fn input(&mut self, input: Option) -> &mut Self; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, Option) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, &str) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 341 | fn input(&mut self, input: Option) -> &mut Self { [INFO] [stdout] | ~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `input_file` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:345:42 [INFO] [stdout] | [INFO] [stdout] 345 | fn input_file(&mut self, input_file: &str) -> &mut Self { [INFO] [stdout] | ^^^^ expected `Option`, found `&str` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:30:42 [INFO] [stdout] | [INFO] [stdout] 30 | fn input_file(&mut self, input_file: Option) -> &mut Self; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, Option) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, &str) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 345 | fn input_file(&mut self, input_file: Option) -> &mut Self { [INFO] [stdout] | ~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `input_type` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:349:42 [INFO] [stdout] | [INFO] [stdout] 349 | fn input_type(&mut self, input_type: &str) -> &mut Self { [INFO] [stdout] | ^^^^ expected `Option`, found `&str` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:31:42 [INFO] [stdout] | [INFO] [stdout] 31 | fn input_type(&mut self, input_type: Option) -> &mut Self; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, Option) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, &str) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 349 | fn input_type(&mut self, input_type: Option) -> &mut Self { [INFO] [stdout] | ~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `input2` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:353:34 [INFO] [stdout] | [INFO] [stdout] 353 | fn input2(&mut self, input2: &str) -> &mut Self { [INFO] [stdout] | ^^^^ expected `Option`, found `&str` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:32:34 [INFO] [stdout] | [INFO] [stdout] 32 | fn input2(&mut self, input2: Option) -> &mut Self; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, Option) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, &str) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 353 | fn input2(&mut self, input2: Option) -> &mut Self { [INFO] [stdout] | ~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `input2_type` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:357:44 [INFO] [stdout] | [INFO] [stdout] 357 | fn input2_type(&mut self, input2_type: &str) -> &mut Self { [INFO] [stdout] | ^^^^ expected `Option`, found `&str` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:33:44 [INFO] [stdout] | [INFO] [stdout] 33 | fn input2_type(&mut self, input2_type: Option) -> &mut Self; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, Option) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, &str) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 357 | fn input2_type(&mut self, input2_type: Option) -> &mut Self { [INFO] [stdout] | ~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `key` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:361:28 [INFO] [stdout] | [INFO] [stdout] 361 | fn key(&mut self, key: &str) -> &mut Self { [INFO] [stdout] | ^^^^ expected `Option`, found `&str` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:34:28 [INFO] [stdout] | [INFO] [stdout] 34 | fn key(&mut self, key: Option) -> &mut Self; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, Option) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, &str) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 361 | fn key(&mut self, key: Option) -> &mut Self { [INFO] [stdout] | ~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `key_type` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:365:38 [INFO] [stdout] | [INFO] [stdout] 365 | fn key_type(&mut self, key_type: &str) -> &mut Self { [INFO] [stdout] | ^^^^ expected `Option`, found `&str` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:35:38 [INFO] [stdout] | [INFO] [stdout] 35 | fn key_type(&mut self, key_type: Option) -> &mut Self; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, Option) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, &str) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 365 | fn key_type(&mut self, key_type: Option) -> &mut Self { [INFO] [stdout] | ~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `expected_type` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:369:48 [INFO] [stdout] | [INFO] [stdout] 369 | fn expected_type(&mut self, expected_type: &str) -> &mut Self { [INFO] [stdout] | ^^^^ expected `Option`, found `&str` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:36:48 [INFO] [stdout] | [INFO] [stdout] 36 | fn expected_type(&mut self, expected_type: Option) -> &mut Self; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, Option) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, &str) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 369 | fn expected_type(&mut self, expected_type: Option) -> &mut Self { [INFO] [stdout] | ~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `expected_line` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:373:48 [INFO] [stdout] | [INFO] [stdout] 373 | fn expected_line(&mut self, expected_line: i32) -> &mut Self { [INFO] [stdout] | ^^^ expected `Option`, found `i32` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:38:48 [INFO] [stdout] | [INFO] [stdout] 38 | fn expected_line(&mut self, expected_line: Option) -> &mut Self; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, Option) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, i32) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 373 | fn expected_line(&mut self, expected_line: Option) -> &mut Self { [INFO] [stdout] | ~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `expected_size` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:377:48 [INFO] [stdout] | [INFO] [stdout] 377 | fn expected_size(&mut self, expected_size: usize) -> &mut Self { [INFO] [stdout] | ^^^^^ expected `Option`, found `usize` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:40:48 [INFO] [stdout] | [INFO] [stdout] 40 | fn expected_size(&mut self, expected_size: Option) -> &mut Self; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, Option) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, usize) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 377 | fn expected_size(&mut self, expected_size: Option) -> &mut Self { [INFO] [stdout] | ~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `expected_key` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:381:46 [INFO] [stdout] | [INFO] [stdout] 381 | fn expected_key(&mut self, expected_key: &str) -> &mut Self { [INFO] [stdout] | ^^^^ expected `Option`, found `&str` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:42:46 [INFO] [stdout] | [INFO] [stdout] 42 | fn expected_key(&mut self, expected_key: Option) -> &mut Self; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, Option) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, &str) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 381 | fn expected_key(&mut self, expected_key: Option) -> &mut Self { [INFO] [stdout] | ~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `expected_key_type` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:385:56 [INFO] [stdout] | [INFO] [stdout] 385 | fn expected_key_type(&mut self, expected_key_type: &str) -> &mut Self { [INFO] [stdout] | ^^^^ expected `Option`, found `&str` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:44:56 [INFO] [stdout] | [INFO] [stdout] 44 | fn expected_key_type(&mut self, expected_key_type: Option) -> &mut Self; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, Option) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, &str) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 385 | fn expected_key_type(&mut self, expected_key_type: Option) -> &mut Self { [INFO] [stdout] | ~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0053]: method `expected_answer` has an incompatible type for trait [INFO] [stdout] --> src/challenge.rs:389:52 [INFO] [stdout] | [INFO] [stdout] 389 | fn expected_answer(&mut self, expected_answer: &str) -> &mut Self { [INFO] [stdout] | ^^^^ expected `Option`, found `&str` [INFO] [stdout] | [INFO] [stdout] note: type in trait [INFO] [stdout] --> src/challenge.rs:46:52 [INFO] [stdout] | [INFO] [stdout] 46 | fn expected_answer(&mut self, expected_answer: Option) -> &mut Self; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] = note: expected signature `fn(&mut challenge::Builder, Option) -> &mut challenge::Builder` [INFO] [stdout] found signature `fn(&mut challenge::Builder, &str) -> &mut challenge::Builder` [INFO] [stdout] help: change the parameter type to match the trait [INFO] [stdout] | [INFO] [stdout] 389 | fn expected_answer(&mut self, expected_answer: Option) -> &mut Self { [INFO] [stdout] | ~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0046]: not all trait items implemented, missing: `actual_type`, `actual_line`, `actual_size`, `actual_key`, `actual_key_type`, `actual_answer` [INFO] [stdout] --> src/challenge.rs:336:1 [INFO] [stdout] | [INFO] [stdout] 37 | fn actual_type(&mut self, actual_type: Option) -> &mut Self; [INFO] [stdout] | -------------------------------------------------------------------- `actual_type` from trait [INFO] [stdout] 38 | fn expected_line(&mut self, expected_line: Option) -> &mut Self; [INFO] [stdout] 39 | fn actual_line(&mut self, actual_line: Option) -> &mut Self; [INFO] [stdout] | ----------------------------------------------------------------- `actual_line` from trait [INFO] [stdout] 40 | fn expected_size(&mut self, expected_size: Option) -> &mut Self; [INFO] [stdout] 41 | fn actual_size(&mut self, actual_answer: Option) -> &mut Self; [INFO] [stdout] | --------------------------------------------------------------------- `actual_size` from trait [INFO] [stdout] 42 | fn expected_key(&mut self, expected_key: Option) -> &mut Self; [INFO] [stdout] 43 | fn actual_key(&mut self, actual_key: Option) -> &mut Self; [INFO] [stdout] | ------------------------------------------------------------------ `actual_key` from trait [INFO] [stdout] 44 | fn expected_key_type(&mut self, expected_key_type: Option) -> &mut Self; [INFO] [stdout] 45 | fn actual_key_type(&mut self, actual_key_type: Option) -> &mut Self; [INFO] [stdout] | ---------------------------------------------------------------------------- `actual_key_type` from trait [INFO] [stdout] 46 | fn expected_answer(&mut self, expected_answer: Option) -> &mut Self; [INFO] [stdout] 47 | fn actual_answer(&mut self, actual_answer: Option) -> &mut Self; [INFO] [stdout] | ------------------------------------------------------------------------ `actual_answer` from trait [INFO] [stdout] ... [INFO] [stdout] 336 | impl ChallengeBuilder for Builder { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `actual_type`, `actual_line`, `actual_size`, `actual_key`, `actual_key_type`, `actual_answer` in implementation [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0308]: mismatched types [INFO] [stdout] --> src/challenge.rs:217:21 [INFO] [stdout] | [INFO] [stdout] 217 | header: "", [INFO] [stdout] | ^^- help: try using a conversion method: `.to_string()` [INFO] [stdout] | | [INFO] [stdout] | expected `String`, found `&str` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0716]: temporary value dropped while borrowed [INFO] [stdout] --> src/set1/helper.rs:121:18 [INFO] [stdout] | [INFO] [stdout] 118 | pub fn calc_key_expansion(keys: &mut Vec<&Storage>, s_box: &Vec, rcon: &Vec) { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 121 | keys.push(&(keys[i] ^ &key_generated)); [INFO] [stdout] | -----------^^^^^^^^^^^^^^^^^^^^^^^^^^-- temporary value is freed at the end of this statement [INFO] [stdout] | | | [INFO] [stdout] | | creates a temporary value which is freed while still in use [INFO] [stdout] | argument requires that borrow lasts for `'1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0515]: cannot return reference to temporary value [INFO] [stdout] --> src/storage.rs:194:9 [INFO] [stdout] | [INFO] [stdout] 194 | &self.to_string() [INFO] [stdout] | ^---------------- [INFO] [stdout] | || [INFO] [stdout] | |temporary value created here [INFO] [stdout] | returns a reference to data owned by the current function [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:77:15 [INFO] [stdout] | [INFO] [stdout] 77 | match self.input { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 78 | Some(s) => println!("Input: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 77 | match &self.input { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input_file` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:81:15 [INFO] [stdout] | [INFO] [stdout] 81 | match self.input_file { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] 82 | Some(s) => println!("Input File: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 81 | match &self.input_file { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input_type` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:85:15 [INFO] [stdout] | [INFO] [stdout] 85 | match self.input_type { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] 86 | Some(s) => println!("Input Type: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 85 | match &self.input_type { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input2` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:89:15 [INFO] [stdout] | [INFO] [stdout] 89 | match self.input2 { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 90 | Some(s) => println!("Input2: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 89 | match &self.input2 { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input2_type` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:93:15 [INFO] [stdout] | [INFO] [stdout] 93 | match self.input2_type { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 94 | Some(s) => println!("Input2 Type: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 93 | match &self.input2_type { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.key` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:97:15 [INFO] [stdout] | [INFO] [stdout] 97 | match self.key { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 98 | Some(s) => println!("Key: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 97 | match &self.key { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.key_type` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:101:15 [INFO] [stdout] | [INFO] [stdout] 101 | match self.key_type { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 102 | Some(s) => println!("Key Type: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 101 | match &self.key_type { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.expected_key` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:105:15 [INFO] [stdout] | [INFO] [stdout] 105 | match self.expected_key { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] 106 | Some(s) => println!("Expected Key: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 105 | match &self.expected_key { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.actual_key` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:109:15 [INFO] [stdout] | [INFO] [stdout] 109 | match self.actual_key { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] 110 | Some(s) => println!("Actual Key: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 109 | match &self.actual_key { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.expected_key_type` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:113:15 [INFO] [stdout] | [INFO] [stdout] 113 | match self.expected_key_type { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 114 | Some(s) => println!("Expected Key Type: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 113 | match &self.expected_key_type { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.actual_key_type` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:117:15 [INFO] [stdout] | [INFO] [stdout] 117 | match self.actual_key_type { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 118 | Some(s) => println!("Actual Key Type: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 117 | match &self.actual_key_type { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.expected_type` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:121:15 [INFO] [stdout] | [INFO] [stdout] 121 | match self.expected_type { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 122 | Some(s) => println!("Expected Type: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 121 | match &self.expected_type { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.actual_type` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:125:15 [INFO] [stdout] | [INFO] [stdout] 125 | match self.actual_type { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 126 | Some(s) => println!("Actual Type: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 125 | match &self.actual_type { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.expected_answer` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:145:15 [INFO] [stdout] | [INFO] [stdout] 145 | match self.expected_answer { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 146 | Some(s) => println!("Expected Answer: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 145 | match &self.expected_answer { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.actual_answer` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:149:15 [INFO] [stdout] | [INFO] [stdout] 149 | match self.actual_answer { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 150 | Some(s) => println!("Actual Answer: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 149 | match &self.actual_answer { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0515]: cannot return reference to temporary value [INFO] [stdout] --> src/challenge.rs:178:9 [INFO] [stdout] | [INFO] [stdout] 178 | &self.input.unwrap() [INFO] [stdout] | ^------------------- [INFO] [stdout] | || [INFO] [stdout] | |temporary value created here [INFO] [stdout] | returns a reference to data owned by the current function [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:178:10 [INFO] [stdout] | [INFO] [stdout] 178 | &self.input.unwrap() [INFO] [stdout] | ^^^^^^^^^^ -------- `self.input` moved due to this method call [INFO] [stdout] | | [INFO] [stdout] | help: consider calling `.as_ref()` or `.as_mut()` to borrow the type's contents [INFO] [stdout] | move occurs because `self.input` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] note: `Option::::unwrap` takes ownership of the receiver `self`, which moves `self.input` [INFO] [stdout] --> /rustc/419b3e2d3e350822550eee0e82eeded4d324d584/library/core/src/option.rs:975:25 [INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior [INFO] [stdout] | [INFO] [stdout] 178 | & as Clone>::clone(&self.input).unwrap() [INFO] [stdout] | ++++++++++++++++++++++++++++++++++ + [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 178 | &self.input.clone().unwrap() [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0515]: cannot return reference to temporary value [INFO] [stdout] --> src/challenge.rs:182:9 [INFO] [stdout] | [INFO] [stdout] 182 | &self.input_file.unwrap() [INFO] [stdout] | ^------------------------ [INFO] [stdout] | || [INFO] [stdout] | |temporary value created here [INFO] [stdout] | returns a reference to data owned by the current function [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input_file` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:182:10 [INFO] [stdout] | [INFO] [stdout] 182 | &self.input_file.unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^ -------- `self.input_file` moved due to this method call [INFO] [stdout] | | [INFO] [stdout] | help: consider calling `.as_ref()` or `.as_mut()` to borrow the type's contents [INFO] [stdout] | move occurs because `self.input_file` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] note: `Option::::unwrap` takes ownership of the receiver `self`, which moves `self.input_file` [INFO] [stdout] --> /rustc/419b3e2d3e350822550eee0e82eeded4d324d584/library/core/src/option.rs:975:25 [INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior [INFO] [stdout] | [INFO] [stdout] 182 | & as Clone>::clone(&self.input_file).unwrap() [INFO] [stdout] | ++++++++++++++++++++++++++++++++++ + [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 182 | &self.input_file.clone().unwrap() [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0515]: cannot return reference to temporary value [INFO] [stdout] --> src/challenge.rs:186:9 [INFO] [stdout] | [INFO] [stdout] 186 | &self.input_type.unwrap() [INFO] [stdout] | ^------------------------ [INFO] [stdout] | || [INFO] [stdout] | |temporary value created here [INFO] [stdout] | returns a reference to data owned by the current function [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input_type` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:186:10 [INFO] [stdout] | [INFO] [stdout] 186 | &self.input_type.unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^ -------- `self.input_type` moved due to this method call [INFO] [stdout] | | [INFO] [stdout] | help: consider calling `.as_ref()` or `.as_mut()` to borrow the type's contents [INFO] [stdout] | move occurs because `self.input_type` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] note: `Option::::unwrap` takes ownership of the receiver `self`, which moves `self.input_type` [INFO] [stdout] --> /rustc/419b3e2d3e350822550eee0e82eeded4d324d584/library/core/src/option.rs:975:25 [INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior [INFO] [stdout] | [INFO] [stdout] 186 | & as Clone>::clone(&self.input_type).unwrap() [INFO] [stdout] | ++++++++++++++++++++++++++++++++++ + [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 186 | &self.input_type.clone().unwrap() [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0515]: cannot return reference to temporary value [INFO] [stdout] --> src/challenge.rs:190:9 [INFO] [stdout] | [INFO] [stdout] 190 | &self.input2.unwrap() [INFO] [stdout] | ^-------------------- [INFO] [stdout] | || [INFO] [stdout] | |temporary value created here [INFO] [stdout] | returns a reference to data owned by the current function [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input2` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:190:10 [INFO] [stdout] | [INFO] [stdout] 190 | &self.input2.unwrap() [INFO] [stdout] | ^^^^^^^^^^^ -------- `self.input2` moved due to this method call [INFO] [stdout] | | [INFO] [stdout] | help: consider calling `.as_ref()` or `.as_mut()` to borrow the type's contents [INFO] [stdout] | move occurs because `self.input2` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] note: `Option::::unwrap` takes ownership of the receiver `self`, which moves `self.input2` [INFO] [stdout] --> /rustc/419b3e2d3e350822550eee0e82eeded4d324d584/library/core/src/option.rs:975:25 [INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior [INFO] [stdout] | [INFO] [stdout] 190 | & as Clone>::clone(&self.input2).unwrap() [INFO] [stdout] | ++++++++++++++++++++++++++++++++++ + [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 190 | &self.input2.clone().unwrap() [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0515]: cannot return reference to temporary value [INFO] [stdout] --> src/challenge.rs:194:9 [INFO] [stdout] | [INFO] [stdout] 194 | &self.input2_type.unwrap() [INFO] [stdout] | ^------------------------- [INFO] [stdout] | || [INFO] [stdout] | |temporary value created here [INFO] [stdout] | returns a reference to data owned by the current function [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input2_type` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:194:10 [INFO] [stdout] | [INFO] [stdout] 194 | &self.input2_type.unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^^ -------- `self.input2_type` moved due to this method call [INFO] [stdout] | | [INFO] [stdout] | help: consider calling `.as_ref()` or `.as_mut()` to borrow the type's contents [INFO] [stdout] | move occurs because `self.input2_type` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] note: `Option::::unwrap` takes ownership of the receiver `self`, which moves `self.input2_type` [INFO] [stdout] --> /rustc/419b3e2d3e350822550eee0e82eeded4d324d584/library/core/src/option.rs:975:25 [INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior [INFO] [stdout] | [INFO] [stdout] 194 | & as Clone>::clone(&self.input2_type).unwrap() [INFO] [stdout] | ++++++++++++++++++++++++++++++++++ + [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 194 | &self.input2_type.clone().unwrap() [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0515]: cannot return reference to temporary value [INFO] [stdout] --> src/challenge.rs:198:9 [INFO] [stdout] | [INFO] [stdout] 198 | &self.key.unwrap() [INFO] [stdout] | ^----------------- [INFO] [stdout] | || [INFO] [stdout] | |temporary value created here [INFO] [stdout] | returns a reference to data owned by the current function [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.key` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:198:10 [INFO] [stdout] | [INFO] [stdout] 198 | &self.key.unwrap() [INFO] [stdout] | ^^^^^^^^ -------- `self.key` moved due to this method call [INFO] [stdout] | | [INFO] [stdout] | help: consider calling `.as_ref()` or `.as_mut()` to borrow the type's contents [INFO] [stdout] | move occurs because `self.key` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] note: `Option::::unwrap` takes ownership of the receiver `self`, which moves `self.key` [INFO] [stdout] --> /rustc/419b3e2d3e350822550eee0e82eeded4d324d584/library/core/src/option.rs:975:25 [INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior [INFO] [stdout] | [INFO] [stdout] 198 | & as Clone>::clone(&self.key).unwrap() [INFO] [stdout] | ++++++++++++++++++++++++++++++++++ + [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 198 | &self.key.clone().unwrap() [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0515]: cannot return reference to temporary value [INFO] [stdout] --> src/challenge.rs:202:9 [INFO] [stdout] | [INFO] [stdout] 202 | &self.key_type.unwrap() [INFO] [stdout] | ^---------------------- [INFO] [stdout] | || [INFO] [stdout] | |temporary value created here [INFO] [stdout] | returns a reference to data owned by the current function [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.key_type` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:202:10 [INFO] [stdout] | [INFO] [stdout] 202 | &self.key_type.unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^ -------- `self.key_type` moved due to this method call [INFO] [stdout] | | [INFO] [stdout] | help: consider calling `.as_ref()` or `.as_mut()` to borrow the type's contents [INFO] [stdout] | move occurs because `self.key_type` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] note: `Option::::unwrap` takes ownership of the receiver `self`, which moves `self.key_type` [INFO] [stdout] --> /rustc/419b3e2d3e350822550eee0e82eeded4d324d584/library/core/src/option.rs:975:25 [INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior [INFO] [stdout] | [INFO] [stdout] 202 | & as Clone>::clone(&self.key_type).unwrap() [INFO] [stdout] | ++++++++++++++++++++++++++++++++++ + [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 202 | &self.key_type.clone().unwrap() [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0515]: cannot return reference to temporary value [INFO] [stdout] --> src/challenge.rs:206:9 [INFO] [stdout] | [INFO] [stdout] 206 | &self.expected_type.unwrap() [INFO] [stdout] | ^--------------------------- [INFO] [stdout] | || [INFO] [stdout] | |temporary value created here [INFO] [stdout] | returns a reference to data owned by the current function [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.expected_type` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:206:10 [INFO] [stdout] | [INFO] [stdout] 206 | &self.expected_type.unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ -------- `self.expected_type` moved due to this method call [INFO] [stdout] | | [INFO] [stdout] | help: consider calling `.as_ref()` or `.as_mut()` to borrow the type's contents [INFO] [stdout] | move occurs because `self.expected_type` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] note: `Option::::unwrap` takes ownership of the receiver `self`, which moves `self.expected_type` [INFO] [stdout] --> /rustc/419b3e2d3e350822550eee0e82eeded4d324d584/library/core/src/option.rs:975:25 [INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior [INFO] [stdout] | [INFO] [stdout] 206 | & as Clone>::clone(&self.expected_type).unwrap() [INFO] [stdout] | ++++++++++++++++++++++++++++++++++ + [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 206 | &self.expected_type.clone().unwrap() [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0515]: cannot return reference to temporary value [INFO] [stdout] --> src/challenge.rs:210:9 [INFO] [stdout] | [INFO] [stdout] 210 | &self.expected_key_type.unwrap() [INFO] [stdout] | ^------------------------------- [INFO] [stdout] | || [INFO] [stdout] | |temporary value created here [INFO] [stdout] | returns a reference to data owned by the current function [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.expected_key_type` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:210:10 [INFO] [stdout] | [INFO] [stdout] 210 | &self.expected_key_type.unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ -------- `self.expected_key_type` moved due to this method call [INFO] [stdout] | | [INFO] [stdout] | help: consider calling `.as_ref()` or `.as_mut()` to borrow the type's contents [INFO] [stdout] | move occurs because `self.expected_key_type` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] note: `Option::::unwrap` takes ownership of the receiver `self`, which moves `self.expected_key_type` [INFO] [stdout] --> /rustc/419b3e2d3e350822550eee0e82eeded4d324d584/library/core/src/option.rs:975:25 [INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior [INFO] [stdout] | [INFO] [stdout] 210 | & as Clone>::clone(&self.expected_key_type).unwrap() [INFO] [stdout] | ++++++++++++++++++++++++++++++++++ + [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 210 | &self.expected_key_type.clone().unwrap() [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.header` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:312:21 [INFO] [stdout] | [INFO] [stdout] 312 | header: self.header, [INFO] [stdout] | ^^^^^^^^^^^ move occurs because `self.header` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 312 | header: self.header.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:313:20 [INFO] [stdout] | [INFO] [stdout] 313 | input: self.input, [INFO] [stdout] | ^^^^^^^^^^ move occurs because `self.input` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 313 | input: self.input.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input_file` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:314:25 [INFO] [stdout] | [INFO] [stdout] 314 | input_file: self.input_file, [INFO] [stdout] | ^^^^^^^^^^^^^^^ move occurs because `self.input_file` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 314 | input_file: self.input_file.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input_type` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:315:25 [INFO] [stdout] | [INFO] [stdout] 315 | input_type: self.input_type, [INFO] [stdout] | ^^^^^^^^^^^^^^^ move occurs because `self.input_type` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 315 | input_type: self.input_type.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input2` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:316:21 [INFO] [stdout] | [INFO] [stdout] 316 | input2: self.input2, [INFO] [stdout] | ^^^^^^^^^^^ move occurs because `self.input2` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 316 | input2: self.input2.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input2_type` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:317:26 [INFO] [stdout] | [INFO] [stdout] 317 | input2_type: self.input2_type, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ move occurs because `self.input2_type` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 317 | input2_type: self.input2_type.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.key` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:318:18 [INFO] [stdout] | [INFO] [stdout] 318 | key: self.key, [INFO] [stdout] | ^^^^^^^^ move occurs because `self.key` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 318 | key: self.key.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.key_type` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:319:23 [INFO] [stdout] | [INFO] [stdout] 319 | key_type: self.key_type, [INFO] [stdout] | ^^^^^^^^^^^^^ move occurs because `self.key_type` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 319 | key_type: self.key_type.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.expected_type` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:320:28 [INFO] [stdout] | [INFO] [stdout] 320 | expected_type: self.expected_type, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ move occurs because `self.expected_type` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 320 | expected_type: self.expected_type.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.actual_type` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:321:26 [INFO] [stdout] | [INFO] [stdout] 321 | actual_type: self.actual_type, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ move occurs because `self.actual_type` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 321 | actual_type: self.actual_type.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.expected_key` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:326:27 [INFO] [stdout] | [INFO] [stdout] 326 | expected_key: self.expected_key, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ move occurs because `self.expected_key` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 326 | expected_key: self.expected_key.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.actual_key` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:327:25 [INFO] [stdout] | [INFO] [stdout] 327 | actual_key: self.actual_key, [INFO] [stdout] | ^^^^^^^^^^^^^^^ move occurs because `self.actual_key` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 327 | actual_key: self.actual_key.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.expected_key_type` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:328:32 [INFO] [stdout] | [INFO] [stdout] 328 | expected_key_type: self.expected_key_type, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ move occurs because `self.expected_key_type` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 328 | expected_key_type: self.expected_key_type.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.actual_key_type` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:329:30 [INFO] [stdout] | [INFO] [stdout] 329 | actual_key_type: self.actual_key_type, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ move occurs because `self.actual_key_type` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 329 | actual_key_type: self.actual_key_type.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.expected_answer` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:330:30 [INFO] [stdout] | [INFO] [stdout] 330 | expected_answer: self.expected_answer, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ move occurs because `self.expected_answer` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 330 | expected_answer: self.expected_answer.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.actual_answer` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:331:28 [INFO] [stdout] | [INFO] [stdout] 331 | actual_answer: self.actual_answer [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ move occurs because `self.actual_answer` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 331 | actual_answer: self.actual_answer.clone() [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] Some errors have detailed explanations: E0046, E0053, E0308, E0507, E0515, E0603, E0716. [INFO] [stdout] [INFO] [stdout] For more information about an error, try `rustc --explain E0046`. [INFO] [stdout] [INFO] [stderr] error: could not compile `cryptopals` (bin "cryptopals") due to 68 previous errors; 13 warnings emitted [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stdout] error[E0308]: mismatched types [INFO] [stdout] --> src/challenge.rs:217:21 [INFO] [stdout] | [INFO] [stdout] 217 | header: "", [INFO] [stdout] | ^^- help: try using a conversion method: `.to_string()` [INFO] [stdout] | | [INFO] [stdout] | expected `String`, found `&str` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0716]: temporary value dropped while borrowed [INFO] [stdout] --> src/set1/helper.rs:121:18 [INFO] [stdout] | [INFO] [stdout] 118 | pub fn calc_key_expansion(keys: &mut Vec<&Storage>, s_box: &Vec, rcon: &Vec) { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 121 | keys.push(&(keys[i] ^ &key_generated)); [INFO] [stdout] | -----------^^^^^^^^^^^^^^^^^^^^^^^^^^-- temporary value is freed at the end of this statement [INFO] [stdout] | | | [INFO] [stdout] | | creates a temporary value which is freed while still in use [INFO] [stdout] | argument requires that borrow lasts for `'1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `test2_key` [INFO] [stdout] --> src/set1/helper.rs:374:13 [INFO] [stdout] | [INFO] [stdout] 374 | let test2_key = Storage::new_init("ffffffffffffffffffffffffffffffff", "base64"); [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_test2_key` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `test2_ans` [INFO] [stdout] --> src/set1/helper.rs:375:13 [INFO] [stdout] | [INFO] [stdout] 375 | let test2_ans: Vec = vec![ [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_test2_ans` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `test3_key` [INFO] [stdout] --> src/set1/helper.rs:389:13 [INFO] [stdout] | [INFO] [stdout] 389 | let test3_key = Storage::new_init("000102030405060708090a0b0c0d0e0f", "base64"); [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_test3_key` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `test3_ans` [INFO] [stdout] --> src/set1/helper.rs:390:13 [INFO] [stdout] | [INFO] [stdout] 390 | let test3_ans: Vec = vec![ [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_test3_ans` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `test4_key` [INFO] [stdout] --> src/set1/helper.rs:404:13 [INFO] [stdout] | [INFO] [stdout] 404 | let test4_key = Storage::new_init("6920e299a5202a6d656e636869746f2a", "base64"); [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_test4_key` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `test4_ans` [INFO] [stdout] --> src/set1/helper.rs:405:13 [INFO] [stdout] | [INFO] [stdout] 405 | let test4_ans: Vec = vec![ [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_test4_ans` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0515]: cannot return reference to temporary value [INFO] [stdout] --> src/storage.rs:194:9 [INFO] [stdout] | [INFO] [stdout] 194 | &self.to_string() [INFO] [stdout] | ^---------------- [INFO] [stdout] | || [INFO] [stdout] | |temporary value created here [INFO] [stdout] | returns a reference to data owned by the current function [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:77:15 [INFO] [stdout] | [INFO] [stdout] 77 | match self.input { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 78 | Some(s) => println!("Input: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 77 | match &self.input { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input_file` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:81:15 [INFO] [stdout] | [INFO] [stdout] 81 | match self.input_file { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] 82 | Some(s) => println!("Input File: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 81 | match &self.input_file { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input_type` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:85:15 [INFO] [stdout] | [INFO] [stdout] 85 | match self.input_type { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] 86 | Some(s) => println!("Input Type: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 85 | match &self.input_type { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input2` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:89:15 [INFO] [stdout] | [INFO] [stdout] 89 | match self.input2 { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 90 | Some(s) => println!("Input2: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 89 | match &self.input2 { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input2_type` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:93:15 [INFO] [stdout] | [INFO] [stdout] 93 | match self.input2_type { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 94 | Some(s) => println!("Input2 Type: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 93 | match &self.input2_type { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.key` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:97:15 [INFO] [stdout] | [INFO] [stdout] 97 | match self.key { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 98 | Some(s) => println!("Key: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 97 | match &self.key { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.key_type` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:101:15 [INFO] [stdout] | [INFO] [stdout] 101 | match self.key_type { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 102 | Some(s) => println!("Key Type: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 101 | match &self.key_type { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.expected_key` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:105:15 [INFO] [stdout] | [INFO] [stdout] 105 | match self.expected_key { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] 106 | Some(s) => println!("Expected Key: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 105 | match &self.expected_key { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.actual_key` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:109:15 [INFO] [stdout] | [INFO] [stdout] 109 | match self.actual_key { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] 110 | Some(s) => println!("Actual Key: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 109 | match &self.actual_key { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.expected_key_type` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:113:15 [INFO] [stdout] | [INFO] [stdout] 113 | match self.expected_key_type { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 114 | Some(s) => println!("Expected Key Type: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 113 | match &self.expected_key_type { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.actual_key_type` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:117:15 [INFO] [stdout] | [INFO] [stdout] 117 | match self.actual_key_type { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 118 | Some(s) => println!("Actual Key Type: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 117 | match &self.actual_key_type { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.expected_type` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:121:15 [INFO] [stdout] | [INFO] [stdout] 121 | match self.expected_type { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 122 | Some(s) => println!("Expected Type: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 121 | match &self.expected_type { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.actual_type` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:125:15 [INFO] [stdout] | [INFO] [stdout] 125 | match self.actual_type { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 126 | Some(s) => println!("Actual Type: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 125 | match &self.actual_type { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.expected_answer` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:145:15 [INFO] [stdout] | [INFO] [stdout] 145 | match self.expected_answer { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 146 | Some(s) => println!("Expected Answer: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 145 | match &self.expected_answer { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.actual_answer` as enum variant `Some` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:149:15 [INFO] [stdout] | [INFO] [stdout] 149 | match self.actual_answer { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 150 | Some(s) => println!("Actual Answer: {}", s), [INFO] [stdout] | - [INFO] [stdout] | | [INFO] [stdout] | data moved here [INFO] [stdout] | move occurs because `s` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider borrowing here [INFO] [stdout] | [INFO] [stdout] 149 | match &self.actual_answer { [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0515]: cannot return reference to temporary value [INFO] [stdout] --> src/challenge.rs:178:9 [INFO] [stdout] | [INFO] [stdout] 178 | &self.input.unwrap() [INFO] [stdout] | ^------------------- [INFO] [stdout] | || [INFO] [stdout] | |temporary value created here [INFO] [stdout] | returns a reference to data owned by the current function [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:178:10 [INFO] [stdout] | [INFO] [stdout] 178 | &self.input.unwrap() [INFO] [stdout] | ^^^^^^^^^^ -------- `self.input` moved due to this method call [INFO] [stdout] | | [INFO] [stdout] | help: consider calling `.as_ref()` or `.as_mut()` to borrow the type's contents [INFO] [stdout] | move occurs because `self.input` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] note: `Option::::unwrap` takes ownership of the receiver `self`, which moves `self.input` [INFO] [stdout] --> /rustc/419b3e2d3e350822550eee0e82eeded4d324d584/library/core/src/option.rs:975:25 [INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior [INFO] [stdout] | [INFO] [stdout] 178 | & as Clone>::clone(&self.input).unwrap() [INFO] [stdout] | ++++++++++++++++++++++++++++++++++ + [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 178 | &self.input.clone().unwrap() [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0515]: cannot return reference to temporary value [INFO] [stdout] --> src/challenge.rs:182:9 [INFO] [stdout] | [INFO] [stdout] 182 | &self.input_file.unwrap() [INFO] [stdout] | ^------------------------ [INFO] [stdout] | || [INFO] [stdout] | |temporary value created here [INFO] [stdout] | returns a reference to data owned by the current function [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input_file` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:182:10 [INFO] [stdout] | [INFO] [stdout] 182 | &self.input_file.unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^ -------- `self.input_file` moved due to this method call [INFO] [stdout] | | [INFO] [stdout] | help: consider calling `.as_ref()` or `.as_mut()` to borrow the type's contents [INFO] [stdout] | move occurs because `self.input_file` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] note: `Option::::unwrap` takes ownership of the receiver `self`, which moves `self.input_file` [INFO] [stdout] --> /rustc/419b3e2d3e350822550eee0e82eeded4d324d584/library/core/src/option.rs:975:25 [INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior [INFO] [stdout] | [INFO] [stdout] 182 | & as Clone>::clone(&self.input_file).unwrap() [INFO] [stdout] | ++++++++++++++++++++++++++++++++++ + [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 182 | &self.input_file.clone().unwrap() [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0515]: cannot return reference to temporary value [INFO] [stdout] --> src/challenge.rs:186:9 [INFO] [stdout] | [INFO] [stdout] 186 | &self.input_type.unwrap() [INFO] [stdout] | ^------------------------ [INFO] [stdout] | || [INFO] [stdout] | |temporary value created here [INFO] [stdout] | returns a reference to data owned by the current function [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input_type` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:186:10 [INFO] [stdout] | [INFO] [stdout] 186 | &self.input_type.unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^ -------- `self.input_type` moved due to this method call [INFO] [stdout] | | [INFO] [stdout] | help: consider calling `.as_ref()` or `.as_mut()` to borrow the type's contents [INFO] [stdout] | move occurs because `self.input_type` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] note: `Option::::unwrap` takes ownership of the receiver `self`, which moves `self.input_type` [INFO] [stdout] --> /rustc/419b3e2d3e350822550eee0e82eeded4d324d584/library/core/src/option.rs:975:25 [INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior [INFO] [stdout] | [INFO] [stdout] 186 | & as Clone>::clone(&self.input_type).unwrap() [INFO] [stdout] | ++++++++++++++++++++++++++++++++++ + [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 186 | &self.input_type.clone().unwrap() [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0515]: cannot return reference to temporary value [INFO] [stdout] --> src/challenge.rs:190:9 [INFO] [stdout] | [INFO] [stdout] 190 | &self.input2.unwrap() [INFO] [stdout] | ^-------------------- [INFO] [stdout] | || [INFO] [stdout] | |temporary value created here [INFO] [stdout] | returns a reference to data owned by the current function [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input2` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:190:10 [INFO] [stdout] | [INFO] [stdout] 190 | &self.input2.unwrap() [INFO] [stdout] | ^^^^^^^^^^^ -------- `self.input2` moved due to this method call [INFO] [stdout] | | [INFO] [stdout] | help: consider calling `.as_ref()` or `.as_mut()` to borrow the type's contents [INFO] [stdout] | move occurs because `self.input2` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] note: `Option::::unwrap` takes ownership of the receiver `self`, which moves `self.input2` [INFO] [stdout] --> /rustc/419b3e2d3e350822550eee0e82eeded4d324d584/library/core/src/option.rs:975:25 [INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior [INFO] [stdout] | [INFO] [stdout] 190 | & as Clone>::clone(&self.input2).unwrap() [INFO] [stdout] | ++++++++++++++++++++++++++++++++++ + [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 190 | &self.input2.clone().unwrap() [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0515]: cannot return reference to temporary value [INFO] [stdout] --> src/challenge.rs:194:9 [INFO] [stdout] | [INFO] [stdout] 194 | &self.input2_type.unwrap() [INFO] [stdout] | ^------------------------- [INFO] [stdout] | || [INFO] [stdout] | |temporary value created here [INFO] [stdout] | returns a reference to data owned by the current function [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input2_type` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:194:10 [INFO] [stdout] | [INFO] [stdout] 194 | &self.input2_type.unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^^ -------- `self.input2_type` moved due to this method call [INFO] [stdout] | | [INFO] [stdout] | help: consider calling `.as_ref()` or `.as_mut()` to borrow the type's contents [INFO] [stdout] | move occurs because `self.input2_type` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] note: `Option::::unwrap` takes ownership of the receiver `self`, which moves `self.input2_type` [INFO] [stdout] --> /rustc/419b3e2d3e350822550eee0e82eeded4d324d584/library/core/src/option.rs:975:25 [INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior [INFO] [stdout] | [INFO] [stdout] 194 | & as Clone>::clone(&self.input2_type).unwrap() [INFO] [stdout] | ++++++++++++++++++++++++++++++++++ + [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 194 | &self.input2_type.clone().unwrap() [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0515]: cannot return reference to temporary value [INFO] [stdout] --> src/challenge.rs:198:9 [INFO] [stdout] | [INFO] [stdout] 198 | &self.key.unwrap() [INFO] [stdout] | ^----------------- [INFO] [stdout] | || [INFO] [stdout] | |temporary value created here [INFO] [stdout] | returns a reference to data owned by the current function [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.key` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:198:10 [INFO] [stdout] | [INFO] [stdout] 198 | &self.key.unwrap() [INFO] [stdout] | ^^^^^^^^ -------- `self.key` moved due to this method call [INFO] [stdout] | | [INFO] [stdout] | help: consider calling `.as_ref()` or `.as_mut()` to borrow the type's contents [INFO] [stdout] | move occurs because `self.key` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] note: `Option::::unwrap` takes ownership of the receiver `self`, which moves `self.key` [INFO] [stdout] --> /rustc/419b3e2d3e350822550eee0e82eeded4d324d584/library/core/src/option.rs:975:25 [INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior [INFO] [stdout] | [INFO] [stdout] 198 | & as Clone>::clone(&self.key).unwrap() [INFO] [stdout] | ++++++++++++++++++++++++++++++++++ + [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 198 | &self.key.clone().unwrap() [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0515]: cannot return reference to temporary value [INFO] [stdout] --> src/challenge.rs:202:9 [INFO] [stdout] | [INFO] [stdout] 202 | &self.key_type.unwrap() [INFO] [stdout] | ^---------------------- [INFO] [stdout] | || [INFO] [stdout] | |temporary value created here [INFO] [stdout] | returns a reference to data owned by the current function [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.key_type` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:202:10 [INFO] [stdout] | [INFO] [stdout] 202 | &self.key_type.unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^ -------- `self.key_type` moved due to this method call [INFO] [stdout] | | [INFO] [stdout] | help: consider calling `.as_ref()` or `.as_mut()` to borrow the type's contents [INFO] [stdout] | move occurs because `self.key_type` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] note: `Option::::unwrap` takes ownership of the receiver `self`, which moves `self.key_type` [INFO] [stdout] --> /rustc/419b3e2d3e350822550eee0e82eeded4d324d584/library/core/src/option.rs:975:25 [INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior [INFO] [stdout] | [INFO] [stdout] 202 | & as Clone>::clone(&self.key_type).unwrap() [INFO] [stdout] | ++++++++++++++++++++++++++++++++++ + [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 202 | &self.key_type.clone().unwrap() [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0515]: cannot return reference to temporary value [INFO] [stdout] --> src/challenge.rs:206:9 [INFO] [stdout] | [INFO] [stdout] 206 | &self.expected_type.unwrap() [INFO] [stdout] | ^--------------------------- [INFO] [stdout] | || [INFO] [stdout] | |temporary value created here [INFO] [stdout] | returns a reference to data owned by the current function [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.expected_type` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:206:10 [INFO] [stdout] | [INFO] [stdout] 206 | &self.expected_type.unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ -------- `self.expected_type` moved due to this method call [INFO] [stdout] | | [INFO] [stdout] | help: consider calling `.as_ref()` or `.as_mut()` to borrow the type's contents [INFO] [stdout] | move occurs because `self.expected_type` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] note: `Option::::unwrap` takes ownership of the receiver `self`, which moves `self.expected_type` [INFO] [stdout] --> /rustc/419b3e2d3e350822550eee0e82eeded4d324d584/library/core/src/option.rs:975:25 [INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior [INFO] [stdout] | [INFO] [stdout] 206 | & as Clone>::clone(&self.expected_type).unwrap() [INFO] [stdout] | ++++++++++++++++++++++++++++++++++ + [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 206 | &self.expected_type.clone().unwrap() [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0515]: cannot return reference to temporary value [INFO] [stdout] --> src/challenge.rs:210:9 [INFO] [stdout] | [INFO] [stdout] 210 | &self.expected_key_type.unwrap() [INFO] [stdout] | ^------------------------------- [INFO] [stdout] | || [INFO] [stdout] | |temporary value created here [INFO] [stdout] | returns a reference to data owned by the current function [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.expected_key_type` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:210:10 [INFO] [stdout] | [INFO] [stdout] 210 | &self.expected_key_type.unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ -------- `self.expected_key_type` moved due to this method call [INFO] [stdout] | | [INFO] [stdout] | help: consider calling `.as_ref()` or `.as_mut()` to borrow the type's contents [INFO] [stdout] | move occurs because `self.expected_key_type` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] note: `Option::::unwrap` takes ownership of the receiver `self`, which moves `self.expected_key_type` [INFO] [stdout] --> /rustc/419b3e2d3e350822550eee0e82eeded4d324d584/library/core/src/option.rs:975:25 [INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior [INFO] [stdout] | [INFO] [stdout] 210 | & as Clone>::clone(&self.expected_key_type).unwrap() [INFO] [stdout] | ++++++++++++++++++++++++++++++++++ + [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 210 | &self.expected_key_type.clone().unwrap() [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.header` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:312:21 [INFO] [stdout] | [INFO] [stdout] 312 | header: self.header, [INFO] [stdout] | ^^^^^^^^^^^ move occurs because `self.header` has type `String`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 312 | header: self.header.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:313:20 [INFO] [stdout] | [INFO] [stdout] 313 | input: self.input, [INFO] [stdout] | ^^^^^^^^^^ move occurs because `self.input` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 313 | input: self.input.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input_file` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:314:25 [INFO] [stdout] | [INFO] [stdout] 314 | input_file: self.input_file, [INFO] [stdout] | ^^^^^^^^^^^^^^^ move occurs because `self.input_file` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 314 | input_file: self.input_file.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input_type` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:315:25 [INFO] [stdout] | [INFO] [stdout] 315 | input_type: self.input_type, [INFO] [stdout] | ^^^^^^^^^^^^^^^ move occurs because `self.input_type` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 315 | input_type: self.input_type.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input2` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:316:21 [INFO] [stdout] | [INFO] [stdout] 316 | input2: self.input2, [INFO] [stdout] | ^^^^^^^^^^^ move occurs because `self.input2` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 316 | input2: self.input2.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.input2_type` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:317:26 [INFO] [stdout] | [INFO] [stdout] 317 | input2_type: self.input2_type, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ move occurs because `self.input2_type` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 317 | input2_type: self.input2_type.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.key` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:318:18 [INFO] [stdout] | [INFO] [stdout] 318 | key: self.key, [INFO] [stdout] | ^^^^^^^^ move occurs because `self.key` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 318 | key: self.key.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.key_type` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:319:23 [INFO] [stdout] | [INFO] [stdout] 319 | key_type: self.key_type, [INFO] [stdout] | ^^^^^^^^^^^^^ move occurs because `self.key_type` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 319 | key_type: self.key_type.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.expected_type` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:320:28 [INFO] [stdout] | [INFO] [stdout] 320 | expected_type: self.expected_type, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ move occurs because `self.expected_type` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 320 | expected_type: self.expected_type.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.actual_type` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:321:26 [INFO] [stdout] | [INFO] [stdout] 321 | actual_type: self.actual_type, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ move occurs because `self.actual_type` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 321 | actual_type: self.actual_type.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.expected_key` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:326:27 [INFO] [stdout] | [INFO] [stdout] 326 | expected_key: self.expected_key, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ move occurs because `self.expected_key` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 326 | expected_key: self.expected_key.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.actual_key` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:327:25 [INFO] [stdout] | [INFO] [stdout] 327 | actual_key: self.actual_key, [INFO] [stdout] | ^^^^^^^^^^^^^^^ move occurs because `self.actual_key` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 327 | actual_key: self.actual_key.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.expected_key_type` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:328:32 [INFO] [stdout] | [INFO] [stdout] 328 | expected_key_type: self.expected_key_type, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ move occurs because `self.expected_key_type` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 328 | expected_key_type: self.expected_key_type.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.actual_key_type` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:329:30 [INFO] [stdout] | [INFO] [stdout] 329 | actual_key_type: self.actual_key_type, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ move occurs because `self.actual_key_type` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 329 | actual_key_type: self.actual_key_type.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.expected_answer` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:330:30 [INFO] [stdout] | [INFO] [stdout] 330 | expected_answer: self.expected_answer, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ move occurs because `self.expected_answer` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 330 | expected_answer: self.expected_answer.clone(), [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0507]: cannot move out of `self.actual_answer` which is behind a shared reference [INFO] [stdout] --> src/challenge.rs:331:28 [INFO] [stdout] | [INFO] [stdout] 331 | actual_answer: self.actual_answer [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ move occurs because `self.actual_answer` has type `Option`, which does not implement the `Copy` trait [INFO] [stdout] | [INFO] [stdout] help: consider cloning the value if the performance cost is acceptable [INFO] [stdout] | [INFO] [stdout] 331 | actual_answer: self.actual_answer.clone() [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] Some errors have detailed explanations: E0046, E0053, E0308, E0507, E0515, E0603, E0716. [INFO] [stdout] [INFO] [stdout] For more information about an error, try `rustc --explain E0046`. [INFO] [stdout] [INFO] [stderr] error: could not compile `cryptopals` (bin "cryptopals" test) due to 68 previous errors; 19 warnings emitted [INFO] running `Command { std: "docker" "inspect" "518a5bcbdd6026e03903804ed3dea050e6c29ae556a9645c461bfbea8c70a836", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "518a5bcbdd6026e03903804ed3dea050e6c29ae556a9645c461bfbea8c70a836", kill_on_drop: false }` [INFO] [stdout] 518a5bcbdd6026e03903804ed3dea050e6c29ae556a9645c461bfbea8c70a836