[INFO] fetching crate cifra 0.9.3+post3...
[INFO] checking cifra-0.9.3+post3 against master#5518eaa946291f00471af8b254b2a1715f234882 for pr-120393-1
[INFO] extracting crate cifra 0.9.3+post3 into /workspace/builds/worker-0-tc1/source
[INFO] validating manifest of crates.io crate cifra 0.9.3+post3 on toolchain 5518eaa946291f00471af8b254b2a1715f234882
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+5518eaa946291f00471af8b254b2a1715f234882" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] started tweaking crates.io crate cifra 0.9.3+post3
[INFO] finished tweaking crates.io crate cifra 0.9.3+post3
[INFO] tweaked toml for crates.io crate cifra 0.9.3+post3 written to /workspace/builds/worker-0-tc1/source/Cargo.toml
[INFO] crate crates.io crate cifra 0.9.3+post3 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" "+5518eaa946291f00471af8b254b2a1715f234882" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded miniz_oxide v0.4.4
[INFO] [stderr]   Downloaded rand_hc v0.3.1
[INFO] [stderr]   Downloaded diesel_migrations v1.4.0
[INFO] [stderr]   Downloaded rand_hc v0.2.0
[INFO] [stderr]   Downloaded proc-macro2 v1.0.34
[INFO] [stderr]   Downloaded tempfile v3.2.0
[INFO] [stderr]   Downloaded cc v1.0.72
[INFO] [stderr]   Downloaded spin v0.5.2
[INFO] [stderr]   Downloaded migrations_macros v1.4.2
[INFO] [stderr]   Downloaded quote v1.0.10
[INFO] [stderr]   Downloaded either v1.6.1
[INFO] [stderr]   Downloaded rustc-demangle v0.1.21
[INFO] [stderr]   Downloaded memoffset v0.6.5
[INFO] [stderr]   Downloaded version_check v0.9.3
[INFO] [stderr]   Downloaded indexmap v1.7.0
[INFO] [stderr]   Downloaded aho-corasick v0.7.18
[INFO] [stderr]   Downloaded gimli v0.26.1
[INFO] [stderr]   Downloaded winapi v0.3.9
[INFO] [stderr]   Downloaded libsqlite3-sys v0.22.2
[INFO] [stderr]   Downloaded winapi-i686-pc-windows-gnu v0.4.0
[INFO] [stderr]   Downloaded ring v0.14.6
[INFO] [stderr]   Downloaded clap v3.0.0-rc.5
[INFO] [stderr]   Downloaded winapi-x86_64-pc-windows-gnu v0.4.0
[INFO] [stderr]   Downloaded rstest v0.6.4
[INFO] [stderr]   Downloaded crossbeam-channel v0.5.1
[INFO] [stderr]   Downloaded regex v1.5.4
[INFO] [stderr]   Downloaded regex-syntax v0.6.25
[INFO] [stderr]   Downloaded syn v1.0.82
[INFO] [stderr]   Downloaded object v0.27.1
[INFO] [stderr]   Downloaded libc v0.2.112
[INFO] [stderr]   Downloaded crossbeam-utils v0.8.5
[INFO] [stderr]   Downloaded backtrace v0.3.63
[INFO] [stderr]   Downloaded memchr v2.4.1
[INFO] [stderr]   Downloaded textwrap v0.14.2
[INFO] [stderr]   Downloaded rayon-core v1.9.1
[INFO] [stderr]   Downloaded hashbrown v0.11.2
[INFO] [stderr]   Downloaded rand v0.8.4
[INFO] [stderr]   Downloaded diesel v1.4.8
[INFO] [stderr]   Downloaded rand v0.7.3
[INFO] [stderr]   Downloaded unicode-segmentation v1.8.0
[INFO] [stderr]   Downloaded rayon v1.5.1
[INFO] [stderr]   Downloaded linked-hash-map v0.5.4
[INFO] [stderr]   Downloaded dotenv v0.15.0
[INFO] [stderr]   Downloaded semver v0.9.0
[INFO] [stderr]   Downloaded wasi v0.10.2+wasi-snapshot-preview1
[INFO] [stderr]   Downloaded crossbeam-epoch v0.9.5
[INFO] [stderr]   Downloaded redox_syscall v0.2.10
[INFO] [stderr]   Downloaded scopeguard v1.1.0
[INFO] [stderr]   Downloaded byteorder v1.4.3
[INFO] [stderr]   Downloaded num_cpus v1.13.0
[INFO] [stderr]   Downloaded getrandom v0.2.3
[INFO] [stderr]   Downloaded strum_macros v0.21.1
[INFO] [stderr]   Downloaded semver-parser v0.7.0
[INFO] [stderr]   Downloaded redox_users v0.4.0
[INFO] [stderr]   Downloaded rand_core v0.6.3
[INFO] [stderr]   Downloaded addr2line v0.17.0
[INFO] [stderr]   Downloaded os_str_bytes v6.0.0
[INFO] [stderr]   Downloaded error-chain v0.12.4
[INFO] [stderr]   Downloaded crossbeam-deque v0.8.1
[INFO] [stderr]   Downloaded unicode-xid v0.2.2
[INFO] [stderr]   Downloaded num-traits v0.2.14
[INFO] [stderr]   Downloaded strsim v0.10.0
[INFO] [stderr]   Downloaded ppv-lite86 v0.2.15
[INFO] [stderr]   Downloaded strum v0.21.0
[INFO] [stderr]   Downloaded termcolor v1.1.2
[INFO] [stderr]   Downloaded migrations_internals v1.4.1
[INFO] [stderr]   Downloaded dirs-sys v0.3.6
[INFO] [stderr]   Downloaded rustc_version v0.2.3
[INFO] [stderr]   Downloaded wasi v0.9.0+wasi-snapshot-preview1
[INFO] [stderr]   Downloaded test_common v1.4.0
[INFO] [stderr]   Downloaded hermit-abi v0.1.19
[INFO] [stderr]   Downloaded autocfg v1.0.1
[INFO] [stderr]   Downloaded winapi-util v0.1.5
[INFO] [stderr]   Downloaded rand_chacha v0.2.2
[INFO] [stderr]   Downloaded pkg-config v0.3.24
[INFO] [stderr]   Downloaded rand_core v0.5.1
[INFO] [stderr]   Downloaded dirs v4.0.0
[INFO] [stderr]   Downloaded diesel_derives v1.4.1
[INFO] [stderr]   Downloaded float-cmp v0.8.0
[INFO] [stderr]   Downloaded rand_chacha v0.3.1
[INFO] [stderr]   Downloaded getrandom v0.1.16
[INFO] [stderr]   Downloaded untrusted v0.6.2
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-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:2788e3201cd34a07e3172128adcd8b3090168a8e3bcc40d7c032b9dda1df7d1c" "/opt/rustwide/cargo-home/bin/cargo" "+5518eaa946291f00471af8b254b2a1715f234882" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 3cc80585ec4c565d6a5ae8577f3abefaba6de705b306fe68ee5b17c7dc72eae9
[INFO] running `Command { std: "docker" "start" "-a" "3cc80585ec4c565d6a5ae8577f3abefaba6de705b306fe68ee5b17c7dc72eae9", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "3cc80585ec4c565d6a5ae8577f3abefaba6de705b306fe68ee5b17c7dc72eae9", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "3cc80585ec4c565d6a5ae8577f3abefaba6de705b306fe68ee5b17c7dc72eae9", kill_on_drop: false }`
[INFO] [stdout] 3cc80585ec4c565d6a5ae8577f3abefaba6de705b306fe68ee5b17c7dc72eae9
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-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:2788e3201cd34a07e3172128adcd8b3090168a8e3bcc40d7c032b9dda1df7d1c" "/opt/rustwide/cargo-home/bin/cargo" "+5518eaa946291f00471af8b254b2a1715f234882" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 423a49a201d3f7444cd7e5a6b5b0cd9e9ebbac713bdafd6e599abc9a56c9f348
[INFO] running `Command { std: "docker" "start" "-a" "423a49a201d3f7444cd7e5a6b5b0cd9e9ebbac713bdafd6e599abc9a56c9f348", kill_on_drop: false }`
[INFO] [stderr]    Compiling autocfg v1.0.1
[INFO] [stderr]    Compiling libc v0.2.112
[INFO] [stderr]     Checking cfg-if v1.0.0
[INFO] [stderr]    Compiling proc-macro2 v1.0.34
[INFO] [stderr]    Compiling unicode-xid v0.2.2
[INFO] [stderr]    Compiling syn v1.0.82
[INFO] [stderr]    Compiling pkg-config v0.3.24
[INFO] [stderr]    Compiling memchr v2.4.1
[INFO] [stderr]    Compiling cc v1.0.72
[INFO] [stderr]     Checking lazy_static v1.4.0
[INFO] [stderr]    Compiling crossbeam-utils v0.8.5
[INFO] [stderr]    Compiling getrandom v0.1.16
[INFO] [stderr]     Checking ppv-lite86 v0.2.15
[INFO] [stderr]    Compiling crossbeam-epoch v0.9.5
[INFO] [stderr]     Checking scopeguard v1.1.0
[INFO] [stderr]    Compiling rayon-core v1.9.1
[INFO] [stderr]    Compiling byteorder v1.4.3
[INFO] [stderr]    Compiling version_check v0.9.3
[INFO] [stderr]    Compiling semver-parser v0.7.0
[INFO] [stderr]     Checking gimli v0.26.1
[INFO] [stderr]     Checking adler v1.0.2
[INFO] [stderr]    Compiling semver v0.9.0
[INFO] [stderr]     Checking hashbrown v0.11.2
[INFO] [stderr]    Compiling unicode-segmentation v1.8.0
[INFO] [stderr]     Checking rustc-demangle v0.1.21
[INFO] [stderr]     Checking strsim v0.10.0
[INFO] [stderr]     Checking either v1.6.1
[INFO] [stderr]    Compiling error-chain v0.12.4
[INFO] [stderr]    Compiling memoffset v0.6.5
[INFO] [stderr]    Compiling miniz_oxide v0.4.4
[INFO] [stderr]    Compiling indexmap v1.7.0
[INFO] [stderr]    Compiling rayon v1.5.1
[INFO] [stderr]     Checking crossbeam-channel v0.5.1
[INFO] [stderr]    Compiling libsqlite3-sys v0.22.2
[INFO] [stderr]    Compiling heck v0.3.3
[INFO] [stderr]    Compiling rustc_version v0.2.3
[INFO] [stderr]    Compiling num-traits v0.2.14
[INFO] [stderr]     Checking textwrap v0.14.2
[INFO] [stderr]     Checking object v0.27.1
[INFO] [stderr]     Checking os_str_bytes v6.0.0
[INFO] [stderr]    Compiling quote v1.0.10
[INFO] [stderr]     Checking getrandom v0.2.3
[INFO] [stderr]     Checking num_cpus v1.13.0
[INFO] [stderr]     Checking atty v0.2.14
[INFO] [stderr]     Checking dirs-sys v0.3.6
[INFO] [stderr]     Checking aho-corasick v0.7.18
[INFO] [stderr]     Checking regex-syntax v0.6.25
[INFO] [stderr]     Checking rand_core v0.5.1
[INFO] [stderr]     Checking rand_core v0.6.3
[INFO] [stderr]     Checking termcolor v1.1.2
[INFO] [stderr]     Checking crossbeam-deque v0.8.1
[INFO] [stderr]     Checking bitflags v1.3.2
[INFO] [stderr]     Checking dirs v4.0.0
[INFO] [stderr]    Compiling rstest v0.6.4
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking remove_dir_all v0.5.3
[INFO] [stderr]     Checking clap v3.0.0-rc.5
[INFO] [stderr]     Checking untrusted v0.6.2
[INFO] [stderr]     Checking rand_chacha v0.2.2
[INFO] [stderr]     Checking dotenv v0.15.0
[INFO] [stderr]     Checking strum v0.21.0
[INFO] [stderr]    Compiling backtrace v0.3.63
[INFO] [stderr]    Compiling ring v0.14.6
[INFO] [stderr]     Checking spin v0.5.2
[INFO] [stderr]     Checking linked-hash-map v0.5.4
[INFO] [stderr]     Checking rand v0.8.4
[INFO] [stderr]    Compiling cfg-if v0.1.10
[INFO] [stderr]     Checking rand v0.7.3
[INFO] [stderr]     Checking float-cmp v0.8.0
[INFO] [stderr]     Checking tempfile v3.2.0
[INFO] [stderr]     Checking addr2line v0.17.0
[INFO] [stderr]     Checking regex v1.5.4
[INFO] [stderr]     Checking test_common v1.4.0
[INFO] [stderr]    Compiling diesel_derives v1.4.1
[INFO] [stderr]    Compiling strum_macros v0.21.1
[INFO] [stderr]    Compiling diesel v1.4.8
[INFO] [stderr]     Checking migrations_internals v1.4.1
[INFO] [stderr]    Compiling migrations_macros v1.4.2
[INFO] [stderr]     Checking diesel_migrations v1.4.0
[INFO] [stderr]     Checking cifra v0.9.3+post3 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `OsStr`
[INFO] [stdout]  --> src/attack/database.rs:6:16
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::ffi::{OsStr, OsString};
[INFO] [stdout]   |                ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Error`
[INFO] [stdout]   --> src/attack/database.rs:11:43
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::{ErrorKind, Result, ResultExt, Error};
[INFO] [stdout]    |                                           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `DATABASE_STANDARD_PATH` should have an upper camel case name
[INFO] [stdout]   --> src/attack/database.rs:31:8
[INFO] [stdout]    |
[INFO] [stdout] 31 | struct DATABASE_STANDARD_PATH;
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to upper camel case: `DatabaseStandardPath`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_camel_case_types)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `cipher`
[INFO] [stdout]  --> src/attack/frequency.rs:5:48
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::cipher::vigenere::{DEFAULT_CHARSET, cipher, decipher};
[INFO] [stdout]   |                                                ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Error`, `ResultExt`
[INFO] [stdout]  --> src/cipher/substitution.rs:2:32
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::{ErrorKind, Result, ResultExt, Error};
[INFO] [stdout]   |                                ^^^^^^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `diesel::result::Error::DatabaseError`
[INFO] [stdout]    --> src/attack/caesar.rs:140:9
[INFO] [stdout]     |
[INFO] [stdout] 140 |     use diesel::result::Error::DatabaseError;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `OsStr`
[INFO] [stdout]  --> src/attack/database.rs:6:16
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::ffi::{OsStr, OsString};
[INFO] [stdout]   |                ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Error`
[INFO] [stdout]   --> src/attack/database.rs:11:43
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::{ErrorKind, Result, ResultExt, Error};
[INFO] [stdout]    |                                           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `DATABASE_STANDARD_PATH` should have an upper camel case name
[INFO] [stdout]   --> src/attack/database.rs:31:8
[INFO] [stdout]    |
[INFO] [stdout] 31 | struct DATABASE_STANDARD_PATH;
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to upper camel case: `DatabaseStandardPath`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_camel_case_types)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ffi::OsStr`
[INFO] [stdout]    --> src/attack/database.rs:185:9
[INFO] [stdout]     |
[INFO] [stdout] 185 |     use std::ffi::OsStr;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `read_to_string`
[INFO] [stdout]    --> src/attack/dictionaries.rs:542:50
[INFO] [stdout]     |
[INFO] [stdout] 542 |     use std::fs::{create_dir, File, OpenOptions, read_to_string};
[INFO] [stdout]     |                                                  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ffi::OsString`
[INFO] [stdout]    --> src/attack/dictionaries.rs:548:9
[INFO] [stdout]     |
[INFO] [stdout] 548 |     use std::ffi::OsString;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BufReader`, `Read`
[INFO] [stdout]    --> src/attack/dictionaries.rs:550:26
[INFO] [stdout]     |
[INFO] [stdout] 550 |     use std::io::{Write, BufReader, Read};
[INFO] [stdout]     |                          ^^^^^^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::env::temp_dir`
[INFO] [stdout]    --> src/attack/dictionaries.rs:552:9
[INFO] [stdout]     |
[INFO] [stdout] 552 |     use std::env::temp_dir;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `cipher`
[INFO] [stdout]  --> src/attack/frequency.rs:5:48
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::cipher::vigenere::{DEFAULT_CHARSET, cipher, decipher};
[INFO] [stdout]   |                                                ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::attack::dictionaries::tests::ENGLISH_TEXT_WITH_PUNCTUATIONS_MARKS`
[INFO] [stdout]    --> src/attack/frequency.rs:394:9
[INFO] [stdout]     |
[INFO] [stdout] 394 |     use crate::attack::dictionaries::tests::ENGLISH_TEXT_WITH_PUNCTUATIONS_MARKS;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `F64Margin`
[INFO] [stdout]    --> src/attack/frequency.rs:399:31
[INFO] [stdout]     |
[INFO] [stdout] 399 |     use float_cmp::{ApproxEq, F64Margin};
[INFO] [stdout]     |                               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ResultExt`
[INFO] [stdout]  --> src/cipher/substitution.rs:2:32
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::{ErrorKind, Result, ResultExt, Error};
[INFO] [stdout]   |                                ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `E`
[INFO] [stdout]    --> src/attack/simple_attacks.rs:165:25
[INFO] [stdout]     |
[INFO] [stdout] 165 |                     Err(E) => return None
[INFO] [stdout]     |                         ^ help: if this is intentional, prefix it with an underscore: `_E`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]    --> src/attack/frequency.rs:126:28
[INFO] [stdout]     |
[INFO] [stdout] 126 |                 .filter(|(&key, &_value)| _value == *value)
[INFO] [stdout]     |                            ^^^ help: if this is intentional, prefix it with an underscore: `_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]    --> src/attack/frequency.rs:157:25
[INFO] [stdout]     |
[INFO] [stdout] 157 |             .map(|(key, value)| key)
[INFO] [stdout]     |                         ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]    --> src/attack/frequency.rs:164:25
[INFO] [stdout]     |
[INFO] [stdout] 164 |             .map(|(key, value)| key)
[INFO] [stdout]     |                         ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `char`
[INFO] [stdout]    --> src/attack/frequency.rs:256:13
[INFO] [stdout]     |
[INFO] [stdout] 256 |     for (i, char) in char_string.chars().enumerate() {
[INFO] [stdout]     |             ^^^^ help: if this is intentional, prefix it with an underscore: `_char`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/attack/frequency.rs:269:28
[INFO] [stdout]     |
[INFO] [stdout] 269 |                        let mut values = sequences.get_mut(sequence_to_find).unwrap();
[INFO] [stdout]     |                            ----^^^^^^
[INFO] [stdout]     |                            |
[INFO] [stdout]     |                            help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]    --> src/attack/frequency.rs:383:21
[INFO] [stdout]     |
[INFO] [stdout] 383 |         .map(|(key, value)| key)
[INFO] [stdout]     |                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ciphered_text`
[INFO] [stdout]   --> src/attack/vigenere.rs:36:26
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub fn brute_force<T, U>(ciphered_text: T, charset: U, testing: bool)-> Result<String>
[INFO] [stdout]    |                          ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_ciphered_text`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `charset`
[INFO] [stdout]   --> src/attack/vigenere.rs:36:44
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub fn brute_force<T, U>(ciphered_text: T, charset: U, testing: bool)-> Result<String>
[INFO] [stdout]    |                                            ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_charset`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `testing`
[INFO] [stdout]   --> src/attack/vigenere.rs:36:56
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub fn brute_force<T, U>(ciphered_text: T, charset: U, testing: bool)-> Result<String>
[INFO] [stdout]    |                                                        ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_testing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ciphered_text`
[INFO] [stdout]   --> src/attack/vigenere.rs:47:23
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub fn brute_force_mp(ciphered_text: &str, charset: &str, testing: bool)-> Result<String> {
[INFO] [stdout]    |                       ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_ciphered_text`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `charset`
[INFO] [stdout]   --> src/attack/vigenere.rs:47:44
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub fn brute_force_mp(ciphered_text: &str, charset: &str, testing: bool)-> Result<String> {
[INFO] [stdout]    |                                            ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_charset`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `testing`
[INFO] [stdout]   --> src/attack/vigenere.rs:47:59
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub fn brute_force_mp(ciphered_text: &str, charset: &str, testing: bool)-> Result<String> {
[INFO] [stdout]    |                                                           ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_testing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `offset_char` is never read
[INFO] [stdout]    --> src/cipher/vigenere.rs:101:17
[INFO] [stdout]     |
[INFO] [stdout] 101 |         let mut offset_char = String::new();
[INFO] [stdout]     |                 ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_best_result` is never used
[INFO] [stdout]    --> src/attack/caesar.rs:114:4
[INFO] [stdout]     |
[INFO] [stdout] 114 | fn get_best_result(identified_languages: &Vec<(usize, IdentifiedLanguage)>)-> usize {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `database_path` is never read
[INFO] [stdout]   --> src/attack/database.rs:98:5
[INFO] [stdout]    |
[INFO] [stdout] 96 | pub struct Database {
[INFO] [stdout]    |            -------- field in this struct
[INFO] [stdout] 97 |     pub session: DatabaseSession,
[INFO] [stdout] 98 |     database_path: String
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `candidates` is never read
[INFO] [stdout]    --> src/attack/dictionaries.rs:410:5
[INFO] [stdout]     |
[INFO] [stdout] 407 | pub struct IdentifiedLanguage {
[INFO] [stdout]     |            ------------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 410 |     candidates: HashMap<String, f64>
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `start` is never read
[INFO] [stdout]   --> src/attack/simple_attacks.rs:89:5
[INFO] [stdout]    |
[INFO] [stdout] 88 | struct IntegerKeyIterator {
[INFO] [stdout]    |        ------------------ field in this struct
[INFO] [stdout] 89 |     start: usize,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/attack/simple_attacks.rs:95:8
[INFO] [stdout]    |
[INFO] [stdout] 94 | impl IntegerKeyIterator {
[INFO] [stdout]    | ----------------------- associated function in this implementation
[INFO] [stdout] 95 |     fn new(start: usize, end: usize) -> Self {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> src/attack/simple_attacks.rs:129:12
[INFO] [stdout]     |
[INFO] [stdout] 128 | impl DictionaryWordKeyIterator {
[INFO] [stdout]     | ------------------------------ associated function in this implementation
[INFO] [stdout] 129 |     pub fn new() -> Result<Self> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `create_new_single_entry` is never used
[INFO] [stdout]    --> src/attack/substitution.rs:723:8
[INFO] [stdout]     |
[INFO] [stdout] 386 | impl Mapping {
[INFO] [stdout]     | ------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 723 |     fn create_new_single_entry(&mut self, key: char, value: char) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LetterHistogram` is never constructed
[INFO] [stdout]   --> src/attack/frequency.rs:14:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | struct LetterHistogram {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/attack/frequency.rs:37:8
[INFO] [stdout]     |
[INFO] [stdout] 22  | impl LetterHistogram {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 37  |     fn from_text<T>(text: T,
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 67  |     fn from_dict(letters: HashMap<char, u64>,
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 89  |     fn setup_for_matching(self, letter_counter: Counter<char>, width: usize) -> Self {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     fn create_ordered_dict(mut self, letter_counter: Counter<char>) -> Self {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 155 |     fn set_matching_width(mut self, width: usize) -> Self{
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 181 |     fn frequency<T>(&self, key: T) -> Result<f64>
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 190 |     fn letters(&self) -> linked_hash_map::Keys<char, u64> {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 208 |     fn match_score(one: &LetterHistogram, other: &LetterHistogram) -> u8 {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_repeated_sequences` is never used
[INFO] [stdout]    --> src/attack/frequency.rs:230:8
[INFO] [stdout]     |
[INFO] [stdout] 230 | pub fn find_repeated_sequences<T>(text: T, length: usize) -> HashMap<String, Vec<usize>>
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_adjacent_separations` is never used
[INFO] [stdout]    --> src/attack/frequency.rs:247:4
[INFO] [stdout]     |
[INFO] [stdout] 247 | fn find_adjacent_separations<T>(text: T, length: usize) -> HashMap<String, Vec<usize>>
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_not_adjacent_separations` is never used
[INFO] [stdout]    --> src/attack/frequency.rs:292:4
[INFO] [stdout]     |
[INFO] [stdout] 292 | fn find_not_adjacent_separations(sequences: &mut HashMap<String, Vec<usize>>) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_substrings` is never used
[INFO] [stdout]    --> src/attack/frequency.rs:327:8
[INFO] [stdout]     |
[INFO] [stdout] 327 | pub fn get_substrings<T>(ciphertext: T, step: usize) -> Vec<String>
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `match_substring` is never used
[INFO] [stdout]    --> src/attack/frequency.rs:353:4
[INFO] [stdout]     |
[INFO] [stdout] 353 | fn match_substring<T>(substring: T, reference_histogram: &LetterHistogram) -> u8
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_most_likely_subkeys` is never used
[INFO] [stdout]    --> src/attack/frequency.rs:370:4
[INFO] [stdout]     |
[INFO] [stdout] 370 | fn find_most_likely_subkeys<T>(substring: T, reference_histogram: &LetterHistogram) -> Result<Vec<String>>
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `MultiplyingKeyBelowZero` and `AddingKeyBelowZero` are never constructed
[INFO] [stdout]   --> src/cipher/affine.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | enum WrongAffineKeyCauses {
[INFO] [stdout]    |      -------------------- variants in this enum
[INFO] [stdout] 17 |     MultiplyingKeyBelowZero,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 18 |     MultiplyingKeyZero,
[INFO] [stdout] 19 |     AddingKeyBelowZero,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `WrongAffineKeyCauses` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait method `fromStr` should have a snake case name
[INFO] [stdout]   --> src/lib.rs:85:8
[INFO] [stdout]    |
[INFO] [stdout] 85 |     fn fromStr(s: T) -> Self;
[INFO] [stdout]    |        ^^^^^^^ help: convert the identifier to snake case: `from_str`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_snake_case)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait method `findFromIndex` should have a snake case name
[INFO] [stdout]    --> src/lib.rs:106:8
[INFO] [stdout]     |
[INFO] [stdout] 106 |     fn findFromIndex(text: &T, text_to_find: U, index: usize) -> Option<usize>;
[INFO] [stdout]     |        ^^^^^^^^^^^^^ help: convert the identifier to snake case: `find_from_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/database.rs:129:13
[INFO] [stdout]     |
[INFO] [stdout] 129 |             create_folder_path(database_folder);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 129 |             let _ = create_folder_path(database_folder);
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: call to `.clone()` on a reference in this situation does nothing
[INFO] [stdout]    --> src/attack/dictionaries.rs:164:41
[INFO] [stdout]     |
[INFO] [stdout] 164 |         let _word_clone = _word.as_ref().clone();
[INFO] [stdout]     |                                         ^^^^^^^^ help: remove this redundant call
[INFO] [stdout]     |
[INFO] [stdout]     = note: the type `str` does not implement `Clone`, so calling `clone` on `&str` copies the reference, which does not do anything and can be removed
[INFO] [stdout]     = note: `#[warn(noop_method_call)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `E` should have a snake case name
[INFO] [stdout]    --> src/attack/simple_attacks.rs:165:25
[INFO] [stdout]     |
[INFO] [stdout] 165 |                     Err(E) => return None
[INFO] [stdout]     |                         ^ help: convert the identifier to snake case: `e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `item_A` should have a snake case name
[INFO] [stdout]    --> src/attack/frequency.rs:122:34
[INFO] [stdout]     |
[INFO] [stdout] 122 |         values_ordered.sort_by(|&item_A, &item_B| item_B.cmp(item_A));
[INFO] [stdout]     |                                  ^^^^^^ help: convert the identifier to snake case: `item_a`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `item_B` should have a snake case name
[INFO] [stdout]    --> src/attack/frequency.rs:122:43
[INFO] [stdout]     |
[INFO] [stdout] 122 |         values_ordered.sort_by(|&item_A, &item_B| item_B.cmp(item_A));
[INFO] [stdout]     |                                           ^^^^^^ help: convert the identifier to snake case: `item_b`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/frequency.rs:162:9
[INFO] [stdout]     |
[INFO] [stdout] 162 |         ordered_dict_iter.advance_by(self.ordered_dict.len()-width);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 162 |         let _ = ordered_dict_iter.advance_by(self.ordered_dict.len()-width);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/frequency.rs:334:9
[INFO] [stdout]     |
[INFO] [stdout] 334 |         ciphered_stream_iter.advance_by(i);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 334 |         let _ = ciphered_stream_iter.advance_by(i);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `item_A` should have a snake case name
[INFO] [stdout]    --> src/cipher/common.rs:186:25
[INFO] [stdout]     |
[INFO] [stdout] 186 |         items.sort_by(|&item_A, &item_B| item_B.1.cmp(item_A.1));
[INFO] [stdout]     |                         ^^^^^^ help: convert the identifier to snake case: `item_a`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `item_B` should have a snake case name
[INFO] [stdout]    --> src/cipher/common.rs:186:34
[INFO] [stdout]     |
[INFO] [stdout] 186 |         items.sort_by(|&item_A, &item_B| item_B.1.cmp(item_A.1));
[INFO] [stdout]     |                                  ^^^^^^ help: convert the identifier to snake case: `item_b`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `loaded_dictionaries`
[INFO] [stdout]    --> src/attack/affine.rs:144:13
[INFO] [stdout]     |
[INFO] [stdout] 144 |         let loaded_dictionaries = LoadedDictionaries::new();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_loaded_dictionaries`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `loaded_dictionaries`
[INFO] [stdout]    --> src/attack/affine.rs:153:13
[INFO] [stdout]     |
[INFO] [stdout] 153 |         let loaded_dictionaries = LoadedDictionaries::new();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_loaded_dictionaries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `loaded_dictionaries`
[INFO] [stdout]    --> src/attack/caesar.rs:148:13
[INFO] [stdout]     |
[INFO] [stdout] 148 |         let loaded_dictionaries = LoadedDictionaries::new();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_loaded_dictionaries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `loaded_dictionaries`
[INFO] [stdout]    --> src/attack/caesar.rs:157:13
[INFO] [stdout]     |
[INFO] [stdout] 157 |         let loaded_dictionaries = LoadedDictionaries::new();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_loaded_dictionaries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: 46 warnings emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `test_env`
[INFO] [stdout]    --> src/attack/database.rs:201:13
[INFO] [stdout]     |
[INFO] [stdout] 201 |         let test_env = TemporalEnvironmentVariable::new("DATABASE_URL", absolute_pathname_to_database);
[INFO] [stdout]     |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_test_env`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_dir`
[INFO] [stdout]    --> src/attack/dictionaries.rs:809:14
[INFO] [stdout]     |
[INFO] [stdout] 809 |         let (temp_dir, temp_env_database_path) = temporary_database_folder(None);
[INFO] [stdout]     |              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_dir`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_env_database_path`
[INFO] [stdout]    --> src/attack/dictionaries.rs:809:24
[INFO] [stdout]     |
[INFO] [stdout] 809 |         let (temp_dir, temp_env_database_path) = temporary_database_folder(None);
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_env_database_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_dir`
[INFO] [stdout]    --> src/attack/dictionaries.rs:818:14
[INFO] [stdout]     |
[INFO] [stdout] 818 |         let (temp_dir, temp_env_database_path) = temporary_database_folder(None);
[INFO] [stdout]     |              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_dir`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_env_database_path`
[INFO] [stdout]    --> src/attack/dictionaries.rs:818:24
[INFO] [stdout]     |
[INFO] [stdout] 818 |         let (temp_dir, temp_env_database_path) = temporary_database_folder(None);
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_env_database_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_dir`
[INFO] [stdout]    --> src/attack/dictionaries.rs:835:14
[INFO] [stdout]     |
[INFO] [stdout] 835 |         let (temp_dir, temp_env_database_path) = temporary_database_folder(None);
[INFO] [stdout]     |              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_dir`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_env_database_path`
[INFO] [stdout]    --> src/attack/dictionaries.rs:835:24
[INFO] [stdout]     |
[INFO] [stdout] 835 |         let (temp_dir, temp_env_database_path) = temporary_database_folder(None);
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_env_database_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_dir`
[INFO] [stdout]    --> src/attack/dictionaries.rs:850:14
[INFO] [stdout]     |
[INFO] [stdout] 850 |         let (temp_dir, temp_env_database_path) = temporary_database_folder(None);
[INFO] [stdout]     |              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_dir`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_env_database_path`
[INFO] [stdout]    --> src/attack/dictionaries.rs:850:24
[INFO] [stdout]     |
[INFO] [stdout] 850 |         let (temp_dir, temp_env_database_path) = temporary_database_folder(None);
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_env_database_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_dir`
[INFO] [stdout]    --> src/attack/dictionaries.rs:865:14
[INFO] [stdout]     |
[INFO] [stdout] 865 |         let (temp_dir, temp_env_database_path) = loaded_micro_dictionary_temp_dir();
[INFO] [stdout]     |              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_dir`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_env_database_path`
[INFO] [stdout]    --> src/attack/dictionaries.rs:865:24
[INFO] [stdout]     |
[INFO] [stdout] 865 |         let (temp_dir, temp_env_database_path) = loaded_micro_dictionary_temp_dir();
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_env_database_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/attack/dictionaries.rs:864:13
[INFO] [stdout]     |
[INFO] [stdout] 864 |         let mut micro_dictionaries = get_micro_dictionaries_content();
[INFO] [stdout]     |             ----^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_env_database_path`
[INFO] [stdout]    --> src/attack/dictionaries.rs:902:24
[INFO] [stdout]     |
[INFO] [stdout] 902 |         let (temp_dir, temp_env_database_path) = temporary_database_folder(None);
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_env_database_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_dir`
[INFO] [stdout]    --> src/attack/dictionaries.rs:944:14
[INFO] [stdout]     |
[INFO] [stdout] 944 |         let (temp_dir, temp_env_database_path) = temporary_database_folder(None);
[INFO] [stdout]     |              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_dir`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_env_database_path`
[INFO] [stdout]    --> src/attack/dictionaries.rs:944:24
[INFO] [stdout]     |
[INFO] [stdout] 944 |         let (temp_dir, temp_env_database_path) = temporary_database_folder(None);
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_env_database_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `loaded_dictionaries`
[INFO] [stdout]    --> src/attack/dictionaries.rs:959:13
[INFO] [stdout]     |
[INFO] [stdout] 959 |         let loaded_dictionaries = LoadedDictionaries::new();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_loaded_dictionaries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_dir`
[INFO] [stdout]    --> src/attack/dictionaries.rs:990:14
[INFO] [stdout]     |
[INFO] [stdout] 990 |         let (temp_dir, temp_env_database_path) = temporary_database_folder(None);
[INFO] [stdout]     |              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_dir`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_env_database_path`
[INFO] [stdout]    --> src/attack/dictionaries.rs:990:24
[INFO] [stdout]     |
[INFO] [stdout] 990 |         let (temp_dir, temp_env_database_path) = temporary_database_folder(None);
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_env_database_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `loaded_micro_dictionary_temp_dir`
[INFO] [stdout]     --> src/attack/dictionaries.rs:1020:27
[INFO] [stdout]      |
[INFO] [stdout] 1020 |     fn test_get_all_words(loaded_micro_dictionary_temp_dir: (TestEnvironment, TemporalEnvironmentVariable)) {
[INFO] [stdout]      |                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_loaded_micro_dictionary_temp_dir`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `E`
[INFO] [stdout]    --> src/attack/simple_attacks.rs:165:25
[INFO] [stdout]     |
[INFO] [stdout] 165 |                     Err(E) => return None
[INFO] [stdout]     |                         ^ help: if this is intentional, prefix it with an underscore: `_E`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `loaded_micro_dictionary_temp_dir`
[INFO] [stdout]    --> src/attack/simple_attacks.rs:281:43
[INFO] [stdout]     |
[INFO] [stdout] 281 |     fn test_dictionary_word_key_generator(loaded_micro_dictionary_temp_dir: (TestEnvironment, TemporalEnvironmentVariable)) {
[INFO] [stdout]     |                                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_loaded_micro_dictionary_temp_dir`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/bin/main.rs:634:9
[INFO] [stdout]     |
[INFO] [stdout] 634 |         return bail!("You tried to use attack_file function with a configuration that is not for attack mode.")
[INFO] [stdout]     |         ^^^^^^^------------------------------------------------------------------------------------------------
[INFO] [stdout]     |         |      |
[INFO] [stdout]     |         |      any code following this expression is unreachable
[INFO] [stdout]     |         unreachable expression
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/bin/main.rs:646:14
[INFO] [stdout]     |
[INFO] [stdout] 646 |         _ => return bail!("Given algorithm does not use integer key and charset.")
[INFO] [stdout]     |              ^^^^^^^--------------------------------------------------------------
[INFO] [stdout]     |              |      |
[INFO] [stdout]     |              |      any code following this expression is unreachable
[INFO] [stdout]     |              unreachable expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/bin/main.rs:658:14
[INFO] [stdout]     |
[INFO] [stdout] 658 |         _ => return bail!("Given algorithm does not use string key and charset.")
[INFO] [stdout]     |              ^^^^^^^-------------------------------------------------------------
[INFO] [stdout]     |              |      |
[INFO] [stdout]     |              |      any code following this expression is unreachable
[INFO] [stdout]     |              unreachable expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/bin/main.rs:669:14
[INFO] [stdout]     |
[INFO] [stdout] 669 |         _ => return bail!("Given algorithm does not use integer key or includes a charset.")
[INFO] [stdout]     |              ^^^^^^^------------------------------------------------------------------------
[INFO] [stdout]     |              |      |
[INFO] [stdout]     |              |      any code following this expression is unreachable
[INFO] [stdout]     |              unreachable expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/bin/main.rs:681:14
[INFO] [stdout]     |
[INFO] [stdout] 681 |         _ => return bail!("Given algorithm does not use integer key and charset.")
[INFO] [stdout]     |              ^^^^^^^--------------------------------------------------------------
[INFO] [stdout]     |              |      |
[INFO] [stdout]     |              |      any code following this expression is unreachable
[INFO] [stdout]     |              unreachable expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/bin/main.rs:693:14
[INFO] [stdout]     |
[INFO] [stdout] 693 |         _ => return bail!("Given algorithm does not use string key and charset.")
[INFO] [stdout]     |              ^^^^^^^-------------------------------------------------------------
[INFO] [stdout]     |              |      |
[INFO] [stdout]     |              |      any code following this expression is unreachable
[INFO] [stdout]     |              unreachable expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/bin/main.rs:704:14
[INFO] [stdout]     |
[INFO] [stdout] 704 |         _ => return bail!("Given algorithm does not use integer key or includes a charset.")
[INFO] [stdout]     |              ^^^^^^^------------------------------------------------------------------------
[INFO] [stdout]     |              |      |
[INFO] [stdout]     |              |      any code following this expression is unreachable
[INFO] [stdout]     |              unreachable expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/bin/main.rs:716:14
[INFO] [stdout]     |
[INFO] [stdout] 716 |         _ => return bail!("Given algorithm does not use charset.")
[INFO] [stdout]     |              ^^^^^^^----------------------------------------------
[INFO] [stdout]     |              |      |
[INFO] [stdout]     |              |      any code following this expression is unreachable
[INFO] [stdout]     |              unreachable expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/bin/main.rs:727:14
[INFO] [stdout]     |
[INFO] [stdout] 727 |         _ => return bail!("Given algorithm do use string key and charset")
[INFO] [stdout]     |              ^^^^^^^------------------------------------------------------
[INFO] [stdout]     |              |      |
[INFO] [stdout]     |              |      any code following this expression is unreachable
[INFO] [stdout]     |              unreachable expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/bin/main.rs:738:14
[INFO] [stdout]     |
[INFO] [stdout] 738 |         _ => return bail!("Given algorithm do use charset.")
[INFO] [stdout]     |              ^^^^^^^----------------------------------------
[INFO] [stdout]     |              |      |
[INFO] [stdout]     |              |      any code following this expression is unreachable
[INFO] [stdout]     |              unreachable expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/bin/main.rs:749:14
[INFO] [stdout]     |
[INFO] [stdout] 749 |         _ => return bail!("Given algorithm don't have testing mode.")
[INFO] [stdout]     |              ^^^^^^^-------------------------------------------------
[INFO] [stdout]     |              |      |
[INFO] [stdout]     |              |      any code following this expression is unreachable
[INFO] [stdout]     |              unreachable expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `loaded_dictionaries`
[INFO] [stdout]    --> src/attack/substitution.rs:872:13
[INFO] [stdout]     |
[INFO] [stdout] 872 |         let loaded_dictionaries = LoadedDictionaries::new();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_loaded_dictionaries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `loaded_dictionaries`
[INFO] [stdout]    --> src/attack/substitution.rs:894:13
[INFO] [stdout]     |
[INFO] [stdout] 894 |         let loaded_dictionaries = LoadedDictionaries::new();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_loaded_dictionaries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `missing`
[INFO] [stdout]     --> src/attack/substitution.rs:1125:13
[INFO] [stdout]      |
[INFO] [stdout] 1125 |         let missing: Vec<Mapping> = expected_list.iter().cloned().filter(|_mapping| !recovered_mappings.contains(&_mapping)).collect();
[INFO] [stdout]      |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_missing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ciphered_file`
[INFO] [stdout]    --> src/bin/main.rs:428:13
[INFO] [stdout]     |
[INFO] [stdout] 428 |             ciphered_file, charset } => {
[INFO] [stdout]     |             ^^^^^^^^^^^^^ help: try ignoring the field: `ciphered_file: _`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/bin/main.rs:634:9
[INFO] [stdout]     |
[INFO] [stdout] 634 |         return bail!("You tried to use attack_file function with a configuration that is not for attack mode.")
[INFO] [stdout]     |         ^^^^^^^------------------------------------------------------------------------------------------------
[INFO] [stdout]     |         |      |
[INFO] [stdout]     |         |      any code following this expression is unreachable
[INFO] [stdout]     |         unreachable expression
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `deciphered_file`
[INFO] [stdout]    --> src/bin/main.rs:466:32
[INFO] [stdout]     |
[INFO] [stdout] 466 |             file_to_decipher , deciphered_file, charset } => {
[INFO] [stdout]     |                                ^^^^^^^^^^^^^^^ help: try ignoring the field: `deciphered_file: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/attack/substitution.rs:1073:13
[INFO] [stdout]      |
[INFO] [stdout] 1073 |         let mut expected_mapping_1 = mapping!(THIS_TEST_CHARSET, {"1": {"a"},
[INFO] [stdout]      |             ----^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `algorithm`
[INFO] [stdout]    --> src/bin/main.rs:521:25
[INFO] [stdout]     |
[INFO] [stdout] 521 |         Modes::Cipher { algorithm, key, file_to_cipher,
[INFO] [stdout]     |                         ^^^^^^^^^ help: try ignoring the field: `algorithm: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/attack/substitution.rs:1078:13
[INFO] [stdout]      |
[INFO] [stdout] 1078 |         let mut expected_mapping_2 =  mapping!(THIS_TEST_CHARSET, {"1": {"a"},
[INFO] [stdout]      |             ----^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]    --> src/bin/main.rs:521:36
[INFO] [stdout]     |
[INFO] [stdout] 521 |         Modes::Cipher { algorithm, key, file_to_cipher,
[INFO] [stdout]     |                                    ^^^ help: try ignoring the field: `key: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `file_to_cipher`
[INFO] [stdout]    --> src/bin/main.rs:521:41
[INFO] [stdout]     |
[INFO] [stdout] 521 |         Modes::Cipher { algorithm, key, file_to_cipher,
[INFO] [stdout]     |                                         ^^^^^^^^^^^^^^ help: try ignoring the field: `file_to_cipher: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/attack/substitution.rs:1083:13
[INFO] [stdout]      |
[INFO] [stdout] 1083 |         let mut expected_mapping_3 = mapping!(THIS_TEST_CHARSET, {"1": {"b"},
[INFO] [stdout]      |             ----^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `charset`
[INFO] [stdout]    --> src/bin/main.rs:522:28
[INFO] [stdout]     |
[INFO] [stdout] 522 |             ciphered_file, charset } => {
[INFO] [stdout]     |                            ^^^^^^^ help: try ignoring the field: `charset: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/attack/substitution.rs:1088:13
[INFO] [stdout]      |
[INFO] [stdout] 1088 |         let mut expected_mapping_4 =  mapping!(THIS_TEST_CHARSET, {"1": {"b"},
[INFO] [stdout]      |             ----^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `algorithm`
[INFO] [stdout]    --> src/bin/main.rs:525:27
[INFO] [stdout]     |
[INFO] [stdout] 525 |         Modes::Decipher { algorithm, key, file_to_decipher,
[INFO] [stdout]     |                           ^^^^^^^^^ help: try ignoring the field: `algorithm: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/attack/substitution.rs:1093:13
[INFO] [stdout]      |
[INFO] [stdout] 1093 |         let mut expected_mapping_5 = mapping!(THIS_TEST_CHARSET, {"1": {"a"},
[INFO] [stdout]      |             ----^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]    --> src/bin/main.rs:525:38
[INFO] [stdout]     |
[INFO] [stdout] 525 |         Modes::Decipher { algorithm, key, file_to_decipher,
[INFO] [stdout]     |                                      ^^^ help: try ignoring the field: `key: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/attack/substitution.rs:1098:13
[INFO] [stdout]      |
[INFO] [stdout] 1098 |         let mut expected_mapping_6 = mapping!(THIS_TEST_CHARSET, {"1": {"a"},
[INFO] [stdout]      |             ----^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `file_to_decipher`
[INFO] [stdout]    --> src/bin/main.rs:525:43
[INFO] [stdout]     |
[INFO] [stdout] 525 |         Modes::Decipher { algorithm, key, file_to_decipher,
[INFO] [stdout]     |                                           ^^^^^^^^^^^^^^^^ help: try ignoring the field: `file_to_decipher: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/attack/substitution.rs:1103:13
[INFO] [stdout]      |
[INFO] [stdout] 1103 |         let mut expected_mapping_7 = mapping!(THIS_TEST_CHARSET, {"1": {"b"},
[INFO] [stdout]      |             ----^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `charset`
[INFO] [stdout]    --> src/bin/main.rs:526:30
[INFO] [stdout]     |
[INFO] [stdout] 526 |             deciphered_file, charset }=> {
[INFO] [stdout]     |                              ^^^^^^^ help: try ignoring the field: `charset: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/attack/substitution.rs:1108:13
[INFO] [stdout]      |
[INFO] [stdout] 1108 |         let mut expected_mapping_8 =  mapping!(THIS_TEST_CHARSET, {"1": {"b"},
[INFO] [stdout]      |             ----^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `algorithm`
[INFO] [stdout]    --> src/bin/main.rs:529:25
[INFO] [stdout]     |
[INFO] [stdout] 529 |         Modes::Attack { algorithm, file_to_attack,
[INFO] [stdout]     |                         ^^^^^^^^^ help: try ignoring the field: `algorithm: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/attack/substitution.rs:1113:13
[INFO] [stdout]      |
[INFO] [stdout] 1113 |         let mut expected_list = vec![
[INFO] [stdout]      |             ----^^^^^^^^^^^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `file_to_attack`
[INFO] [stdout]    --> src/bin/main.rs:529:36
[INFO] [stdout]     |
[INFO] [stdout] 529 |         Modes::Attack { algorithm, file_to_attack,
[INFO] [stdout]     |                                    ^^^^^^^^^^^^^^ help: try ignoring the field: `file_to_attack: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/attack/substitution.rs:1155:13
[INFO] [stdout]      |
[INFO] [stdout] 1155 |         let mut mapping = mapping!(TEST_CHARSET,
[INFO] [stdout]      |             ----^^^^^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `charset`
[INFO] [stdout]    --> src/bin/main.rs:530:30
[INFO] [stdout]     |
[INFO] [stdout] 530 |             deciphered_file, charset, output_recovered_key
[INFO] [stdout]     |                              ^^^^^^^ help: try ignoring the field: `charset: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `extracted_candidates`
[INFO] [stdout]     --> src/attack/substitution.rs:1210:38
[INFO] [stdout]      |
[INFO] [stdout] 1210 |         let (extracted_cipherletter, extracted_candidates) = mapping.pop_item()
[INFO] [stdout]      |                                      ^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_extracted_candidates`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `output_recovered_key`
[INFO] [stdout]    --> src/bin/main.rs:563:26
[INFO] [stdout]     |
[INFO] [stdout] 563 |         deciphered_file, output_recovered_key, charset
[INFO] [stdout]     |                          ^^^^^^^^^^^^^^^^^^^^ help: try ignoring the field: `output_recovered_key: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `loaded_dictionaries`
[INFO] [stdout]    --> src/attack/transposition.rs:100:13
[INFO] [stdout]     |
[INFO] [stdout] 100 |         let loaded_dictionaries = LoadedDictionaries::new();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_loaded_dictionaries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `loaded_dictionaries`
[INFO] [stdout]    --> src/attack/transposition.rs:109:13
[INFO] [stdout]     |
[INFO] [stdout] 109 |         let loaded_dictionaries = LoadedDictionaries::new();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_loaded_dictionaries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `get_string_key_algorithms`, `get_integer_key_algorithms`, and `get_string_value` are never used
[INFO] [stdout]   --> src/bin/main.rs:56:12
[INFO] [stdout]    |
[INFO] [stdout] 43 | impl CipheringAlgorithms {
[INFO] [stdout]    | ------------------------ associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 56 |     pub fn get_string_key_algorithms()-> HashSet<String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub fn get_integer_key_algorithms()-> HashSet<String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 75 |     pub fn get_string_value(&self)-> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/bin/main.rs:646:14
[INFO] [stdout]     |
[INFO] [stdout] 646 |         _ => return bail!("Given algorithm does not use integer key and charset.")
[INFO] [stdout]     |              ^^^^^^^--------------------------------------------------------------
[INFO] [stdout]     |              |      |
[INFO] [stdout]     |              |      any code following this expression is unreachable
[INFO] [stdout]     |              unreachable expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `Str` should have a snake case name
[INFO] [stdout]   --> src/bin/main.rs:69:19
[INFO] [stdout]    |
[INFO] [stdout] 69 |             .map(|Str| Str.clone())
[INFO] [stdout]    |                   ^^^ help: convert the identifier to snake case (notice the capitalization): `str`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_snake_case)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/bin/main.rs:658:14
[INFO] [stdout]     |
[INFO] [stdout] 658 |         _ => return bail!("Given algorithm does not use string key and charset.")
[INFO] [stdout]     |              ^^^^^^^-------------------------------------------------------------
[INFO] [stdout]     |              |      |
[INFO] [stdout]     |              |      any code following this expression is unreachable
[INFO] [stdout]     |              unreachable expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/bin/main.rs:669:14
[INFO] [stdout]     |
[INFO] [stdout] 669 |         _ => return bail!("Given algorithm does not use integer key or includes a charset.")
[INFO] [stdout]     |              ^^^^^^^------------------------------------------------------------------------
[INFO] [stdout]     |              |      |
[INFO] [stdout]     |              |      any code following this expression is unreachable
[INFO] [stdout]     |              unreachable expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/bin/main.rs:681:14
[INFO] [stdout]     |
[INFO] [stdout] 681 |         _ => return bail!("Given algorithm does not use integer key and charset.")
[INFO] [stdout]     |              ^^^^^^^--------------------------------------------------------------
[INFO] [stdout]     |              |      |
[INFO] [stdout]     |              |      any code following this expression is unreachable
[INFO] [stdout]     |              unreachable expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/bin/main.rs:693:14
[INFO] [stdout]     |
[INFO] [stdout] 693 |         _ => return bail!("Given algorithm does not use string key and charset.")
[INFO] [stdout]     |              ^^^^^^^-------------------------------------------------------------
[INFO] [stdout]     |              |      |
[INFO] [stdout]     |              |      any code following this expression is unreachable
[INFO] [stdout]     |              unreachable expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/bin/main.rs:704:14
[INFO] [stdout]     |
[INFO] [stdout] 704 |         _ => return bail!("Given algorithm does not use integer key or includes a charset.")
[INFO] [stdout]     |              ^^^^^^^------------------------------------------------------------------------
[INFO] [stdout]     |              |      |
[INFO] [stdout]     |              |      any code following this expression is unreachable
[INFO] [stdout]     |              unreachable expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/bin/main.rs:716:14
[INFO] [stdout]     |
[INFO] [stdout] 716 |         _ => return bail!("Given algorithm does not use charset.")
[INFO] [stdout]     |              ^^^^^^^----------------------------------------------
[INFO] [stdout]     |              |      |
[INFO] [stdout]     |              |      any code following this expression is unreachable
[INFO] [stdout]     |              unreachable expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/bin/main.rs:727:14
[INFO] [stdout]     |
[INFO] [stdout] 727 |         _ => return bail!("Given algorithm do use string key and charset")
[INFO] [stdout]     |              ^^^^^^^------------------------------------------------------
[INFO] [stdout]     |              |      |
[INFO] [stdout]     |              |      any code following this expression is unreachable
[INFO] [stdout]     |              unreachable expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/bin/main.rs:738:14
[INFO] [stdout]     |
[INFO] [stdout] 738 |         _ => return bail!("Given algorithm do use charset.")
[INFO] [stdout]     |              ^^^^^^^----------------------------------------
[INFO] [stdout]     |              |      |
[INFO] [stdout]     |              |      any code following this expression is unreachable
[INFO] [stdout]     |              unreachable expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/bin/main.rs:749:14
[INFO] [stdout]     |
[INFO] [stdout] 749 |         _ => return bail!("Given algorithm don't have testing mode.")
[INFO] [stdout]     |              ^^^^^^^-------------------------------------------------
[INFO] [stdout]     |              |      |
[INFO] [stdout]     |              |      any code following this expression is unreachable
[INFO] [stdout]     |              unreachable expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]    --> src/attack/frequency.rs:126:28
[INFO] [stdout]     |
[INFO] [stdout] 126 |                 .filter(|(&key, &_value)| _value == *value)
[INFO] [stdout]     |                            ^^^ help: if this is intentional, prefix it with an underscore: `_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/bin/main.rs:546:9
[INFO] [stdout]     |
[INFO] [stdout] 546 |         write(output_file_path, output_string.as_str());
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 546 |         let _ = write(output_file_path, output_string.as_str());
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/bin/main.rs:767:17
[INFO] [stdout]     |
[INFO] [stdout] 767 |                 new_dictionary.populate(pathname);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 767 |                 let _ = new_dictionary.populate(pathname);
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/bin/main.rs:781:13
[INFO] [stdout]     |
[INFO] [stdout] 781 |             dictionary.populate(pathname);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 781 |             let _ = dictionary.populate(pathname);
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `Str` should have a snake case name
[INFO] [stdout]    --> src/bin/main.rs:813:48
[INFO] [stdout]     |
[INFO] [stdout] 813 |     let args_str: Vec<&str> = args.iter().map(|Str| Str.as_str()).collect();
[INFO] [stdout]     |                                                ^^^ help: convert the identifier to snake case (notice the capitalization): `str`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: 31 warnings emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]    --> src/attack/frequency.rs:157:25
[INFO] [stdout]     |
[INFO] [stdout] 157 |             .map(|(key, value)| key)
[INFO] [stdout]     |                         ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]    --> src/attack/frequency.rs:164:25
[INFO] [stdout]     |
[INFO] [stdout] 164 |             .map(|(key, value)| key)
[INFO] [stdout]     |                         ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `char`
[INFO] [stdout]    --> src/attack/frequency.rs:256:13
[INFO] [stdout]     |
[INFO] [stdout] 256 |     for (i, char) in char_string.chars().enumerate() {
[INFO] [stdout]     |             ^^^^ help: if this is intentional, prefix it with an underscore: `_char`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/attack/frequency.rs:269:28
[INFO] [stdout]     |
[INFO] [stdout] 269 |                        let mut values = sequences.get_mut(sequence_to_find).unwrap();
[INFO] [stdout]     |                            ----^^^^^^
[INFO] [stdout]     |                            |
[INFO] [stdout]     |                            help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ciphered_file`
[INFO] [stdout]    --> src/bin/main.rs:428:13
[INFO] [stdout]     |
[INFO] [stdout] 428 |             ciphered_file, charset } => {
[INFO] [stdout]     |             ^^^^^^^^^^^^^ help: try ignoring the field: `ciphered_file: _`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `deciphered_file`
[INFO] [stdout]    --> src/bin/main.rs:466:32
[INFO] [stdout]     |
[INFO] [stdout] 466 |             file_to_decipher , deciphered_file, charset } => {
[INFO] [stdout]     |                                ^^^^^^^^^^^^^^^ help: try ignoring the field: `deciphered_file: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]    --> src/attack/frequency.rs:383:21
[INFO] [stdout]     |
[INFO] [stdout] 383 |         .map(|(key, value)| key)
[INFO] [stdout]     |                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `algorithm`
[INFO] [stdout]    --> src/bin/main.rs:521:25
[INFO] [stdout]     |
[INFO] [stdout] 521 |         Modes::Cipher { algorithm, key, file_to_cipher,
[INFO] [stdout]     |                         ^^^^^^^^^ help: try ignoring the field: `algorithm: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]    --> src/bin/main.rs:521:36
[INFO] [stdout]     |
[INFO] [stdout] 521 |         Modes::Cipher { algorithm, key, file_to_cipher,
[INFO] [stdout]     |                                    ^^^ help: try ignoring the field: `key: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `file_to_cipher`
[INFO] [stdout]    --> src/bin/main.rs:521:41
[INFO] [stdout]     |
[INFO] [stdout] 521 |         Modes::Cipher { algorithm, key, file_to_cipher,
[INFO] [stdout]     |                                         ^^^^^^^^^^^^^^ help: try ignoring the field: `file_to_cipher: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `charset`
[INFO] [stdout]    --> src/bin/main.rs:522:28
[INFO] [stdout]     |
[INFO] [stdout] 522 |             ciphered_file, charset } => {
[INFO] [stdout]     |                            ^^^^^^^ help: try ignoring the field: `charset: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `algorithm`
[INFO] [stdout]    --> src/bin/main.rs:525:27
[INFO] [stdout]     |
[INFO] [stdout] 525 |         Modes::Decipher { algorithm, key, file_to_decipher,
[INFO] [stdout]     |                           ^^^^^^^^^ help: try ignoring the field: `algorithm: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]    --> src/bin/main.rs:525:38
[INFO] [stdout]     |
[INFO] [stdout] 525 |         Modes::Decipher { algorithm, key, file_to_decipher,
[INFO] [stdout]     |                                      ^^^ help: try ignoring the field: `key: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `file_to_decipher`
[INFO] [stdout]    --> src/bin/main.rs:525:43
[INFO] [stdout]     |
[INFO] [stdout] 525 |         Modes::Decipher { algorithm, key, file_to_decipher,
[INFO] [stdout]     |                                           ^^^^^^^^^^^^^^^^ help: try ignoring the field: `file_to_decipher: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `charset`
[INFO] [stdout]    --> src/bin/main.rs:526:30
[INFO] [stdout]     |
[INFO] [stdout] 526 |             deciphered_file, charset }=> {
[INFO] [stdout]     |                              ^^^^^^^ help: try ignoring the field: `charset: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `algorithm`
[INFO] [stdout]    --> src/bin/main.rs:529:25
[INFO] [stdout]     |
[INFO] [stdout] 529 |         Modes::Attack { algorithm, file_to_attack,
[INFO] [stdout]     |                         ^^^^^^^^^ help: try ignoring the field: `algorithm: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `file_to_attack`
[INFO] [stdout]    --> src/bin/main.rs:529:36
[INFO] [stdout]     |
[INFO] [stdout] 529 |         Modes::Attack { algorithm, file_to_attack,
[INFO] [stdout]     |                                    ^^^^^^^^^^^^^^ help: try ignoring the field: `file_to_attack: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `charset`
[INFO] [stdout]    --> src/bin/main.rs:530:30
[INFO] [stdout]     |
[INFO] [stdout] 530 |             deciphered_file, charset, output_recovered_key
[INFO] [stdout]     |                              ^^^^^^^ help: try ignoring the field: `charset: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `output_recovered_key`
[INFO] [stdout]    --> src/bin/main.rs:563:26
[INFO] [stdout]     |
[INFO] [stdout] 563 |         deciphered_file, output_recovered_key, charset
[INFO] [stdout]     |                          ^^^^^^^^^^^^^^^^^^^^ help: try ignoring the field: `output_recovered_key: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ciphered_text`
[INFO] [stdout]   --> src/attack/vigenere.rs:36:26
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub fn brute_force<T, U>(ciphered_text: T, charset: U, testing: bool)-> Result<String>
[INFO] [stdout]    |                          ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_ciphered_text`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `charset`
[INFO] [stdout]   --> src/attack/vigenere.rs:36:44
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub fn brute_force<T, U>(ciphered_text: T, charset: U, testing: bool)-> Result<String>
[INFO] [stdout]    |                                            ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_charset`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `testing`
[INFO] [stdout]   --> src/attack/vigenere.rs:36:56
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub fn brute_force<T, U>(ciphered_text: T, charset: U, testing: bool)-> Result<String>
[INFO] [stdout]    |                                                        ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_testing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ciphered_text`
[INFO] [stdout]   --> src/attack/vigenere.rs:47:23
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub fn brute_force_mp(ciphered_text: &str, charset: &str, testing: bool)-> Result<String> {
[INFO] [stdout]    |                       ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_ciphered_text`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `charset`
[INFO] [stdout]   --> src/attack/vigenere.rs:47:44
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub fn brute_force_mp(ciphered_text: &str, charset: &str, testing: bool)-> Result<String> {
[INFO] [stdout]    |                                            ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_charset`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `testing`
[INFO] [stdout]   --> src/attack/vigenere.rs:47:59
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub fn brute_force_mp(ciphered_text: &str, charset: &str, testing: bool)-> Result<String> {
[INFO] [stdout]    |                                                           ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_testing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `full_loaded_temp_dictionaries`
[INFO] [stdout]     --> src/bin/main.rs:1101:54
[INFO] [stdout]      |
[INFO] [stdout] 1101 |     fn test_cipher_caesar(temp_dir: TestEnvironment, full_loaded_temp_dictionaries: LoadedDictionaries) {
[INFO] [stdout]      |                                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_full_loaded_temp_dictionaries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `full_loaded_temp_dictionaries`
[INFO] [stdout]     --> src/bin/main.rs:1119:56
[INFO] [stdout]      |
[INFO] [stdout] 1119 |     fn test_decipher_caesar(temp_dir: TestEnvironment, full_loaded_temp_dictionaries: LoadedDictionaries) {
[INFO] [stdout]      |                                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_full_loaded_temp_dictionaries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `full_loaded_temp_dictionaries`
[INFO] [stdout]     --> src/bin/main.rs:1137:60
[INFO] [stdout]      |
[INFO] [stdout] 1137 |     fn test_cipher_substitution(temp_dir: TestEnvironment, full_loaded_temp_dictionaries: LoadedDictionaries){
[INFO] [stdout]      |                                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_full_loaded_temp_dictionaries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `full_loaded_temp_dictionaries`
[INFO] [stdout]     --> src/bin/main.rs:1156:62
[INFO] [stdout]      |
[INFO] [stdout] 1156 |     fn test_decipher_substitution(temp_dir: TestEnvironment, full_loaded_temp_dictionaries: LoadedDictionaries){
[INFO] [stdout]      |                                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_full_loaded_temp_dictionaries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `full_loaded_temp_dictionaries`
[INFO] [stdout]     --> src/bin/main.rs:1175:54
[INFO] [stdout]      |
[INFO] [stdout] 1175 |     fn test_attack_caesar(temp_dir: TestEnvironment, full_loaded_temp_dictionaries: LoadedDictionaries){
[INFO] [stdout]      |                                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_full_loaded_temp_dictionaries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `full_loaded_temp_dictionaries`
[INFO] [stdout]     --> src/bin/main.rs:1192:73
[INFO] [stdout]      |
[INFO] [stdout] 1192 |     fn test_attack_caesar_with_recovered_key(temp_dir: TestEnvironment, full_loaded_temp_dictionaries: LoadedDictionaries){
[INFO] [stdout]      |                                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_full_loaded_temp_dictionaries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `full_loaded_temp_dictionaries`
[INFO] [stdout]     --> src/bin/main.rs:1211:60
[INFO] [stdout]      |
[INFO] [stdout] 1211 |     fn test_attack_substitution(temp_dir: TestEnvironment, full_loaded_temp_dictionaries: LoadedDictionaries){
[INFO] [stdout]      |                                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_full_loaded_temp_dictionaries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `get_string_key_algorithms`, `get_integer_key_algorithms`, and `get_string_value` are never used
[INFO] [stdout]   --> src/bin/main.rs:56:12
[INFO] [stdout]    |
[INFO] [stdout] 43 | impl CipheringAlgorithms {
[INFO] [stdout]    | ------------------------ associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 56 |     pub fn get_string_key_algorithms()-> HashSet<String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub fn get_integer_key_algorithms()-> HashSet<String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 75 |     pub fn get_string_value(&self)-> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `temp_env` and `temp_env_var` are never read
[INFO] [stdout]    --> src/bin/main.rs:862:9
[INFO] [stdout]     |
[INFO] [stdout] 859 |     pub struct LoadedDictionaries {
[INFO] [stdout]     |                ------------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 862 |         temp_env: TestEnvironment,
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 863 |         temp_env_var: TemporalEnvironmentVariable
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `Str` should have a snake case name
[INFO] [stdout]   --> src/bin/main.rs:69:19
[INFO] [stdout]    |
[INFO] [stdout] 69 |             .map(|Str| Str.clone())
[INFO] [stdout]    |                   ^^^ help: convert the identifier to snake case (notice the capitalization): `str`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_snake_case)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/bin/main.rs:546:9
[INFO] [stdout]     |
[INFO] [stdout] 546 |         write(output_file_path, output_string.as_str());
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 546 |         let _ = write(output_file_path, output_string.as_str());
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/bin/main.rs:767:17
[INFO] [stdout]     |
[INFO] [stdout] 767 |                 new_dictionary.populate(pathname);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 767 |                 let _ = new_dictionary.populate(pathname);
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/bin/main.rs:781:13
[INFO] [stdout]     |
[INFO] [stdout] 781 |             dictionary.populate(pathname);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 781 |             let _ = dictionary.populate(pathname);
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `Str` should have a snake case name
[INFO] [stdout]    --> src/bin/main.rs:813:48
[INFO] [stdout]     |
[INFO] [stdout] 813 |     let args_str: Vec<&str> = args.iter().map(|Str| Str.as_str()).collect();
[INFO] [stdout]     |                                                ^^^ help: convert the identifier to snake case (notice the capitalization): `str`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/bin/main.rs:869:13
[INFO] [stdout]     |
[INFO] [stdout] 869 |             database::create_database();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 869 |             let _ = database::create_database();
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/bin/main.rs:873:13
[INFO] [stdout]     |
[INFO] [stdout] 873 |             create_dir(&resources_path);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 873 |             let _ = create_dir(&resources_path);
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/bin/main.rs:888:17
[INFO] [stdout]     |
[INFO] [stdout] 888 |                 dictionary.populate(language_book);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 888 |                 let _ = dictionary.populate(language_book);
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `collect` that must be used
[INFO] [stdout]    --> src/bin/main.rs:891:13
[INFO] [stdout]     |
[INFO] [stdout] 891 |             LANGUAGES.iter().map(|x| _languages.push(x.to_string())).collect::<Vec<_>>();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you really need to exhaust the iterator, consider `.for_each(drop)` instead
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 891 |             let _ = LANGUAGES.iter().map(|x| _languages.push(x.to_string())).collect::<Vec<_>>();
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]     --> src/bin/main.rs:1103:9
[INFO] [stdout]      |
[INFO] [stdout] 1103 |         write(message_file.path(), CAESAR_ORIGINAL_MESSAGE);
[INFO] [stdout]      |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]      |
[INFO] [stdout] 1103 |         let _ = write(message_file.path(), CAESAR_ORIGINAL_MESSAGE);
[INFO] [stdout]      |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]     --> src/bin/main.rs:1121:9
[INFO] [stdout]      |
[INFO] [stdout] 1121 |         write(message_file.path(), CAESAR_CIPHERED_MESSAGE_KEY_13);
[INFO] [stdout]      |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]      |
[INFO] [stdout] 1121 |         let _ = write(message_file.path(), CAESAR_CIPHERED_MESSAGE_KEY_13);
[INFO] [stdout]      |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]     --> src/bin/main.rs:1139:9
[INFO] [stdout]      |
[INFO] [stdout] 1139 |         write(message_file.path(), SUBSTITUTION_ORIGINAL_MESSAGE);
[INFO] [stdout]      |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]      |
[INFO] [stdout] 1139 |         let _ = write(message_file.path(), SUBSTITUTION_ORIGINAL_MESSAGE);
[INFO] [stdout]      |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]     --> src/bin/main.rs:1158:9
[INFO] [stdout]      |
[INFO] [stdout] 1158 |         write(message_file.path(), SUBSTITUTION_CIPHERED_MESSAGE);
[INFO] [stdout]      |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]      |
[INFO] [stdout] 1158 |         let _ = write(message_file.path(), SUBSTITUTION_CIPHERED_MESSAGE);
[INFO] [stdout]      |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]     --> src/bin/main.rs:1177:9
[INFO] [stdout]      |
[INFO] [stdout] 1177 |         write(message_file.path(), CAESAR_CIPHERED_MESSAGE_KEY_13);
[INFO] [stdout]      |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]      |
[INFO] [stdout] 1177 |         let _ = write(message_file.path(), CAESAR_CIPHERED_MESSAGE_KEY_13);
[INFO] [stdout]      |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]     --> src/bin/main.rs:1194:9
[INFO] [stdout]      |
[INFO] [stdout] 1194 |         write(message_file.path(), CAESAR_CIPHERED_MESSAGE_KEY_13);
[INFO] [stdout]      |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]      |
[INFO] [stdout] 1194 |         let _ = write(message_file.path(), CAESAR_CIPHERED_MESSAGE_KEY_13);
[INFO] [stdout]      |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]     --> src/bin/main.rs:1221:9
[INFO] [stdout]      |
[INFO] [stdout] 1221 |         write(message_file.path(), ciphered_text);
[INFO] [stdout]      |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]      |
[INFO] [stdout] 1221 |         let _ = write(message_file.path(), ciphered_text);
[INFO] [stdout]      |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/cipher/transposition.rs:324:13
[INFO] [stdout]     |
[INFO] [stdout] 324 |         let mut transposition_matrix = vec![
[INFO] [stdout]     |             ----^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: 50 warnings emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `offset_char` is never read
[INFO] [stdout]    --> src/cipher/vigenere.rs:101:17
[INFO] [stdout]     |
[INFO] [stdout] 101 |         let mut offset_char = String::new();
[INFO] [stdout]     |                 ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_best_result` is never used
[INFO] [stdout]    --> src/attack/caesar.rs:114:4
[INFO] [stdout]     |
[INFO] [stdout] 114 | fn get_best_result(identified_languages: &Vec<(usize, IdentifiedLanguage)>)-> usize {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `database_path` is never read
[INFO] [stdout]   --> src/attack/database.rs:98:5
[INFO] [stdout]    |
[INFO] [stdout] 96 | pub struct Database {
[INFO] [stdout]    |            -------- field in this struct
[INFO] [stdout] 97 |     pub session: DatabaseSession,
[INFO] [stdout] 98 |     database_path: String
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `candidates` is never read
[INFO] [stdout]    --> src/attack/dictionaries.rs:410:5
[INFO] [stdout]     |
[INFO] [stdout] 407 | pub struct IdentifiedLanguage {
[INFO] [stdout]     |            ------------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 410 |     candidates: HashMap<String, f64>
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `temp_env` and `temp_env_var` are never read
[INFO] [stdout]    --> src/attack/dictionaries.rs:659:9
[INFO] [stdout]     |
[INFO] [stdout] 656 |     pub struct LoadedDictionaries {
[INFO] [stdout]     |                ------------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 659 |         temp_env: TestEnvironment,
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 660 |         temp_env_var: TemporalEnvironmentVariable
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `text_file` is never read
[INFO] [stdout]    --> src/attack/dictionaries.rs:752:13
[INFO] [stdout]     |
[INFO] [stdout] 751 |     struct TemporaryTextFile {
[INFO] [stdout]     |            ----------------- field in this struct
[INFO] [stdout] 752 |         pub text_file: File,
[INFO] [stdout]     |             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `start` is never read
[INFO] [stdout]   --> src/attack/simple_attacks.rs:89:5
[INFO] [stdout]    |
[INFO] [stdout] 88 | struct IntegerKeyIterator {
[INFO] [stdout]    |        ------------------ field in this struct
[INFO] [stdout] 89 |     start: usize,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `create_new_single_entry` is never used
[INFO] [stdout]    --> src/attack/substitution.rs:723:8
[INFO] [stdout]     |
[INFO] [stdout] 386 | impl Mapping {
[INFO] [stdout]     | ------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 723 |     fn create_new_single_entry(&mut self, key: char, value: char) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `language` is never read
[INFO] [stdout]    --> src/attack/substitution.rs:817:9
[INFO] [stdout]     |
[INFO] [stdout] 815 |     struct TestSet {
[INFO] [stdout]     |            ------- field in this struct
[INFO] [stdout] 816 |         text_file: &'static str,
[INFO] [stdout] 817 |         language: &'static str,
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `from_dict` is never used
[INFO] [stdout]   --> src/attack/frequency.rs:67:8
[INFO] [stdout]    |
[INFO] [stdout] 22 | impl LetterHistogram {
[INFO] [stdout]    | -------------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 67 |     fn from_dict(letters: HashMap<char, u64>,
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `MultiplyingKeyBelowZero` and `AddingKeyBelowZero` are never constructed
[INFO] [stdout]   --> src/cipher/affine.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | enum WrongAffineKeyCauses {
[INFO] [stdout]    |      -------------------- variants in this enum
[INFO] [stdout] 17 |     MultiplyingKeyBelowZero,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 18 |     MultiplyingKeyZero,
[INFO] [stdout] 19 |     AddingKeyBelowZero,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `WrongAffineKeyCauses` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait method `fromStr` should have a snake case name
[INFO] [stdout]   --> src/lib.rs:85:8
[INFO] [stdout]    |
[INFO] [stdout] 85 |     fn fromStr(s: T) -> Self;
[INFO] [stdout]    |        ^^^^^^^ help: convert the identifier to snake case: `from_str`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_snake_case)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait method `findFromIndex` should have a snake case name
[INFO] [stdout]    --> src/lib.rs:106:8
[INFO] [stdout]     |
[INFO] [stdout] 106 |     fn findFromIndex(text: &T, text_to_find: U, index: usize) -> Option<usize>;
[INFO] [stdout]     |        ^^^^^^^^^^^^^ help: convert the identifier to snake case: `find_from_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/database.rs:129:13
[INFO] [stdout]     |
[INFO] [stdout] 129 |             create_folder_path(database_folder);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 129 |             let _ = create_folder_path(database_folder);
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/database.rs:202:9
[INFO] [stdout]     |
[INFO] [stdout] 202 |         create_database();
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 202 |         let _ = create_database();
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/database.rs:213:9
[INFO] [stdout]     |
[INFO] [stdout] 213 |         create_folder_path(database_folder);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 213 |         let _ = create_folder_path(database_folder);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: call to `.clone()` on a reference in this situation does nothing
[INFO] [stdout]    --> src/attack/dictionaries.rs:164:41
[INFO] [stdout]     |
[INFO] [stdout] 164 |         let _word_clone = _word.as_ref().clone();
[INFO] [stdout]     |                                         ^^^^^^^^ help: remove this redundant call
[INFO] [stdout]     |
[INFO] [stdout]     = note: the type `str` does not implement `Clone`, so calling `clone` on `&str` copies the reference, which does not do anything and can be removed
[INFO] [stdout]     = note: `#[warn(noop_method_call)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:666:13
[INFO] [stdout]     |
[INFO] [stdout] 666 |             database::create_database();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 666 |             let _ = database::create_database();
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:670:13
[INFO] [stdout]     |
[INFO] [stdout] 670 |             create_dir(&resources_path);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 670 |             let _ = create_dir(&resources_path);
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:685:17
[INFO] [stdout]     |
[INFO] [stdout] 685 |                 dictionary.populate(language_book);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 685 |                 let _ = dictionary.populate(language_book);
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::iter::Iterator::collect` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:688:13
[INFO] [stdout]     |
[INFO] [stdout] 688 |             LANGUAGES.iter().map(|x| _languages.push(x.to_string())).collect::<Vec<_>>();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you really need to exhaust the iterator, consider `.for_each(drop)` instead
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 688 |             let _ = LANGUAGES.iter().map(|x| _languages.push(x.to_string())).collect::<Vec<_>>();
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:731:9
[INFO] [stdout]     |
[INFO] [stdout] 731 |         database::create_database();
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 731 |         let _ = database::create_database();
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::iter::Iterator::collect` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:737:13
[INFO] [stdout]     |
[INFO] [stdout] 737 |             _words.iter().map(|_word| language_dictionary.add_word(_word)).collect::<Vec<_>>();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you really need to exhaust the iterator, consider `.for_each(drop)` instead
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 737 |             let _ = _words.iter().map(|_word| language_dictionary.add_word(_word)).collect::<Vec<_>>();
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:772:13
[INFO] [stdout]     |
[INFO] [stdout] 772 |             text_file.write_all(text.as_ref().as_bytes());
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 772 |             let _ = text_file.write_all(text.as_ref().as_bytes());
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:819:9
[INFO] [stdout]     |
[INFO] [stdout] 819 |         database::create_database();
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 819 |         let _ = database::create_database();
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:822:13
[INFO] [stdout]     |
[INFO] [stdout] 822 |             Dictionary::new("english", true);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 822 |             let _ = Dictionary::new("english", true);
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:836:9
[INFO] [stdout]     |
[INFO] [stdout] 836 |         database::create_database();
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 836 |         let _ = database::create_database();
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:867:9
[INFO] [stdout]     |
[INFO] [stdout] 867 |         Dictionary::remove_dictionary(language_to_remove);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 867 |         let _ = Dictionary::remove_dictionary(language_to_remove);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::iter::Iterator::collect` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:889:13
[INFO] [stdout]     |
[INFO] [stdout] 889 | ...   temporary_text.normalized_text.to_lowercase().split_ascii_whitespace().map(|_word| expected_set.insert(_word.to_string())).collect::<Vec<_>>...
[INFO] [stdout]     |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you really need to exhaust the iterator, consider `.for_each(drop)` instead
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 889 |             let _ = temporary_text.normalized_text.to_lowercase().split_ascii_whitespace().map(|_word| expected_set.insert(_word.to_string())).collect::<Vec<_>>();
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:903:9
[INFO] [stdout]     |
[INFO] [stdout] 903 |         database::create_database();
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 903 |         let _ = database::create_database();
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::iter::Iterator::collect` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:911:9
[INFO] [stdout]     |
[INFO] [stdout] 911 |         expected_lowercase_content.split_ascii_whitespace().map(|x| expected_set.insert(x)).collect::<Vec<_>>();
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you really need to exhaust the iterator, consider `.for_each(drop)` instead
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 911 |         let _ = expected_lowercase_content.split_ascii_whitespace().map(|x| expected_set.insert(x)).collect::<Vec<_>>();
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:915:13
[INFO] [stdout]     |
[INFO] [stdout] 915 |             dictionary.populate(temporary_text_file.temp_filename.as_path());
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 915 |             let _ = dictionary.populate(temporary_text_file.temp_filename.as_path());
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::iter::Iterator::collect` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:929:13
[INFO] [stdout]     |
[INFO] [stdout] 929 |             test_tuple.2.to_lowercase().split_ascii_whitespace().map(|_word| expected_set.insert(_word.to_string())).collect::<Vec<_>>();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you really need to exhaust the iterator, consider `.for_each(drop)` instead
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 929 |             let _ = test_tuple.2.to_lowercase().split_ascii_whitespace().map(|_word| expected_set.insert(_word.to_string())).collect::<Vec<_>>();
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:945:9
[INFO] [stdout]     |
[INFO] [stdout] 945 |         database::create_database();
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 945 |         let _ = database::create_database();
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::iter::Iterator::collect` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:949:9
[INFO] [stdout]     |
[INFO] [stdout] 949 |         micro_dictionaries[_language].iter().map(|_word| words_to_add.insert(_word.clone())).collect::<Vec<_>>();
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you really need to exhaust the iterator, consider `.for_each(drop)` instead
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 949 |         let _ = micro_dictionaries[_language].iter().map(|_word| words_to_add.insert(_word.clone())).collect::<Vec<_>>();
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:991:9
[INFO] [stdout]     |
[INFO] [stdout] 991 |         database::create_database();
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 991 |         let _ = database::create_database();
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `E` should have a snake case name
[INFO] [stdout]    --> src/attack/simple_attacks.rs:165:25
[INFO] [stdout]     |
[INFO] [stdout] 165 |                     Err(E) => return None
[INFO] [stdout]     |                         ^ help: convert the identifier to snake case: `e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `E` should have a snake case name
[INFO] [stdout]    --> src/attack/substitution.rs:877:21
[INFO] [stdout]     |
[INFO] [stdout] 877 |                 Err(E) => {assert!(false, E); String::new()}
[INFO] [stdout]     |                     ^ help: convert the identifier to snake case: `e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: panic message is not a string literal
[INFO] [stdout]    --> src/attack/substitution.rs:877:43
[INFO] [stdout]     |
[INFO] [stdout] 877 |                 Err(E) => {assert!(false, E); String::new()}
[INFO] [stdout]     |                                           ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this usage of `assert!()` is deprecated; it will be a hard error in Rust 2021
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>
[INFO] [stdout]     = note: `#[warn(non_fmt_panics)]` on by default
[INFO] [stdout] help: add a "{}" format string to `Display` the message
[INFO] [stdout]     |
[INFO] [stdout] 877 |                 Err(E) => {assert!(false, "{}", E); String::new()}
[INFO] [stdout]     |                                           +++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `E` should have a snake case name
[INFO] [stdout]    --> src/attack/substitution.rs:899:21
[INFO] [stdout]     |
[INFO] [stdout] 899 |                 Err(E) => {assert!(false, E); String::new()}
[INFO] [stdout]     |                     ^ help: convert the identifier to snake case: `e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: panic message is not a string literal
[INFO] [stdout]    --> src/attack/substitution.rs:899:43
[INFO] [stdout]     |
[INFO] [stdout] 899 |                 Err(E) => {assert!(false, E); String::new()}
[INFO] [stdout]     |                                           ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this usage of `assert!()` is deprecated; it will be a hard error in Rust 2021
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>
[INFO] [stdout] help: add a "{}" format string to `Display` the message
[INFO] [stdout]     |
[INFO] [stdout] 899 |                 Err(E) => {assert!(false, "{}", E); String::new()}
[INFO] [stdout]     |                                           +++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `E` should have a snake case name
[INFO] [stdout]    --> src/attack/substitution.rs:913:17
[INFO] [stdout]     |
[INFO] [stdout] 913 |             Err(E) => {assert!(false, E); PathBuf::new()}
[INFO] [stdout]     |                 ^ help: convert the identifier to snake case: `e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: panic message is not a string literal
[INFO] [stdout]    --> src/attack/substitution.rs:913:39
[INFO] [stdout]     |
[INFO] [stdout] 913 |             Err(E) => {assert!(false, E); PathBuf::new()}
[INFO] [stdout]     |                                       ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this usage of `assert!()` is deprecated; it will be a hard error in Rust 2021
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>
[INFO] [stdout] help: add a "{}" format string to `Display` the message
[INFO] [stdout]     |
[INFO] [stdout] 913 |             Err(E) => {assert!(false, "{}", E); PathBuf::new()}
[INFO] [stdout]     |                                       +++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `E` should have a snake case name
[INFO] [stdout]    --> src/attack/substitution.rs:918:17
[INFO] [stdout]     |
[INFO] [stdout] 918 |             Err(E) => {assert!(false, E); File::create("/tmp").unwrap()}
[INFO] [stdout]     |                 ^ help: convert the identifier to snake case: `e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: panic message is not a string literal
[INFO] [stdout]    --> src/attack/substitution.rs:918:39
[INFO] [stdout]     |
[INFO] [stdout] 918 |             Err(E) => {assert!(false, E); File::create("/tmp").unwrap()}
[INFO] [stdout]     |                                       ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this usage of `assert!()` is deprecated; it will be a hard error in Rust 2021
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>
[INFO] [stdout] help: add a "{}" format string to `Display` the message
[INFO] [stdout]     |
[INFO] [stdout] 918 |             Err(E) => {assert!(false, "{}", E); File::create("/tmp").unwrap()}
[INFO] [stdout]     |                                       +++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `E` should have a snake case name
[INFO] [stdout]    --> src/attack/substitution.rs:923:17
[INFO] [stdout]     |
[INFO] [stdout] 923 |             Err(E) => {assert!(false, E); ()}
[INFO] [stdout]     |                 ^ help: convert the identifier to snake case: `e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: panic message is not a string literal
[INFO] [stdout]    --> src/attack/substitution.rs:923:39
[INFO] [stdout]     |
[INFO] [stdout] 923 |             Err(E) => {assert!(false, E); ()}
[INFO] [stdout]     |                                       ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this usage of `assert!()` is deprecated; it will be a hard error in Rust 2021
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>
[INFO] [stdout] help: add a "{}" format string to `Display` the message
[INFO] [stdout]     |
[INFO] [stdout] 923 |             Err(E) => {assert!(false, "{}", E); ()}
[INFO] [stdout]     |                                       +++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `E` should have a snake case name
[INFO] [stdout]    --> src/attack/substitution.rs:939:17
[INFO] [stdout]     |
[INFO] [stdout] 939 |             Err(E) => {assert!(false, E); String::new()}
[INFO] [stdout]     |                 ^ help: convert the identifier to snake case: `e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: panic message is not a string literal
[INFO] [stdout]    --> src/attack/substitution.rs:939:39
[INFO] [stdout]     |
[INFO] [stdout] 939 |             Err(E) => {assert!(false, E); String::new()}
[INFO] [stdout]     |                                       ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this usage of `assert!()` is deprecated; it will be a hard error in Rust 2021
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>
[INFO] [stdout] help: add a "{}" format string to `Display` the message
[INFO] [stdout]     |
[INFO] [stdout] 939 |             Err(E) => {assert!(false, "{}", E); String::new()}
[INFO] [stdout]     |                                       +++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `THIS_TEST_CHARSET` should have a snake case name
[INFO] [stdout]     --> src/attack/substitution.rs:1065:13
[INFO] [stdout]      |
[INFO] [stdout] 1065 |         let THIS_TEST_CHARSET = "12345";
[INFO] [stdout]      |             ^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `this_test_charset`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: panic message is not a string literal
[INFO] [stdout]     --> src/attack/substitution.rs:1213:17
[INFO] [stdout]      |
[INFO] [stdout] 1213 |                 format!("Extracted key {} was not among original ones.", &extracted_cipherletter));
[INFO] [stdout]      |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: this usage of `assert!()` is deprecated; it will be a hard error in Rust 2021
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>
[INFO] [stdout]      = note: the `assert!()` macro supports formatting, so there's no need for the `format!()` macro here
[INFO] [stdout] help: remove the `format!(..)` macro call
[INFO] [stdout]      |
[INFO] [stdout] 1213 -                 format!("Extracted key {} was not among original ones.", &extracted_cipherletter));
[INFO] [stdout] 1213 +                 "Extracted key {} was not among original ones.", &extracted_cipherletter);
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: panic message is not a string literal
[INFO] [stdout]     --> src/attack/substitution.rs:1223:17
[INFO] [stdout]      |
[INFO] [stdout] 1223 |                 format!("Extracted cipherletter {} was not removed from mapping", &extracted_cipherletter));
[INFO] [stdout]      |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: this usage of `assert!()` is deprecated; it will be a hard error in Rust 2021
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>
[INFO] [stdout]      = note: the `assert!()` macro supports formatting, so there's no need for the `format!()` macro here
[INFO] [stdout] help: remove the `format!(..)` macro call
[INFO] [stdout]      |
[INFO] [stdout] 1223 -                 format!("Extracted cipherletter {} was not removed from mapping", &extracted_cipherletter));
[INFO] [stdout] 1223 +                 "Extracted cipherletter {} was not removed from mapping", &extracted_cipherletter);
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `E` should have a snake case name
[INFO] [stdout]     --> src/attack/substitution.rs:1229:20
[INFO] [stdout]      |
[INFO] [stdout] 1229 |         if let Err(E) = mapping.pop_item() {
[INFO] [stdout]      |                    ^ help: convert the identifier to snake case: `e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: panic message is not a string literal
[INFO] [stdout]     --> src/attack/substitution.rs:1232:41
[INFO] [stdout]      |
[INFO] [stdout] 1232 |                   error => assert!(false, format!("Raised error was not the one \
[INFO] [stdout]      |  _________________________________________^
[INFO] [stdout] 1233 | |                                           we were expecting but {} instead", error))
[INFO] [stdout]      | |___________________________________________________________________________________^
[INFO] [stdout]      |
[INFO] [stdout]      = note: this usage of `assert!()` is deprecated; it will be a hard error in Rust 2021
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>
[INFO] [stdout]      = note: the `assert!()` macro supports formatting, so there's no need for the `format!()` macro here
[INFO] [stdout] help: remove the `format!(..)` macro call
[INFO] [stdout]      |
[INFO] [stdout] 1232 ~                 error => assert!(false, "Raised error was not the one \
[INFO] [stdout] 1233 ~                                           we were expecting but {} instead", error)
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `item_A` should have a snake case name
[INFO] [stdout]    --> src/attack/frequency.rs:122:34
[INFO] [stdout]     |
[INFO] [stdout] 122 |         values_ordered.sort_by(|&item_A, &item_B| item_B.cmp(item_A));
[INFO] [stdout]     |                                  ^^^^^^ help: convert the identifier to snake case: `item_a`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `item_B` should have a snake case name
[INFO] [stdout]    --> src/attack/frequency.rs:122:43
[INFO] [stdout]     |
[INFO] [stdout] 122 |         values_ordered.sort_by(|&item_A, &item_B| item_B.cmp(item_A));
[INFO] [stdout]     |                                           ^^^^^^ help: convert the identifier to snake case: `item_b`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/frequency.rs:162:9
[INFO] [stdout]     |
[INFO] [stdout] 162 |         ordered_dict_iter.advance_by(self.ordered_dict.len()-width);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 162 |         let _ = ordered_dict_iter.advance_by(self.ordered_dict.len()-width);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/frequency.rs:334:9
[INFO] [stdout]     |
[INFO] [stdout] 334 |         ciphered_stream_iter.advance_by(i);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 334 |         let _ = ciphered_stream_iter.advance_by(i);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `item_A` should have a snake case name
[INFO] [stdout]    --> src/cipher/common.rs:186:25
[INFO] [stdout]     |
[INFO] [stdout] 186 |         items.sort_by(|&item_A, &item_B| item_B.1.cmp(item_A.1));
[INFO] [stdout]     |                         ^^^^^^ help: convert the identifier to snake case: `item_a`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `item_B` should have a snake case name
[INFO] [stdout]    --> src/cipher/common.rs:186:34
[INFO] [stdout]     |
[INFO] [stdout] 186 |         items.sort_by(|&item_A, &item_B| item_B.1.cmp(item_A.1));
[INFO] [stdout]     |                                  ^^^^^^ help: convert the identifier to snake case: `item_b`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `E` should have a snake case name
[INFO] [stdout]    --> src/cipher/substitution.rs:170:17
[INFO] [stdout]     |
[INFO] [stdout] 170 |             Err(E) => {
[INFO] [stdout]     |                 ^ help: convert the identifier to snake case: `e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: panic message is not a string literal
[INFO] [stdout]    --> src/cipher/substitution.rs:171:32
[INFO] [stdout]     |
[INFO] [stdout] 171 |                 assert!(false, format!("Error happened: {}", E))
[INFO] [stdout]     |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this usage of `assert!()` is deprecated; it will be a hard error in Rust 2021
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>
[INFO] [stdout]     = note: the `assert!()` macro supports formatting, so there's no need for the `format!()` macro here
[INFO] [stdout] help: remove the `format!(..)` macro call
[INFO] [stdout]     |
[INFO] [stdout] 171 -                 assert!(false, format!("Error happened: {}", E))
[INFO] [stdout] 171 +                 assert!(false, "Error happened: {}", E)
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `E` should have a snake case name
[INFO] [stdout]    --> src/cipher/substitution.rs:182:17
[INFO] [stdout]     |
[INFO] [stdout] 182 |             Err(E) => {
[INFO] [stdout]     |                 ^ help: convert the identifier to snake case: `e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: panic message is not a string literal
[INFO] [stdout]    --> src/cipher/substitution.rs:183:32
[INFO] [stdout]     |
[INFO] [stdout] 183 |                 assert!(false, format!("Error happened: {}", E))
[INFO] [stdout]     |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this usage of `assert!()` is deprecated; it will be a hard error in Rust 2021
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>
[INFO] [stdout]     = note: the `assert!()` macro supports formatting, so there's no need for the `format!()` macro here
[INFO] [stdout] help: remove the `format!(..)` macro call
[INFO] [stdout]     |
[INFO] [stdout] 183 -                 assert!(false, format!("Error happened: {}", E))
[INFO] [stdout] 183 +                 assert!(false, "Error happened: {}", E)
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `E` should have a snake case name
[INFO] [stdout]    --> src/cipher/substitution.rs:192:20
[INFO] [stdout]     |
[INFO] [stdout] 192 |         if let Err(E) = cipher("", wrong_key, test_charset) {
[INFO] [stdout]     |                    ^ help: convert the identifier to snake case: `e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: panic message is not a string literal
[INFO] [stdout]    --> src/cipher/substitution.rs:195:41
[INFO] [stdout]     |
[INFO] [stdout] 195 |                   error => assert!(false, format!("Raised error was not the one \
[INFO] [stdout]     |  _________________________________________^
[INFO] [stdout] 196 | |                                           we were expecting but {} instead", error))
[INFO] [stdout]     | |___________________________________________________________________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this usage of `assert!()` is deprecated; it will be a hard error in Rust 2021
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>
[INFO] [stdout]     = note: the `assert!()` macro supports formatting, so there's no need for the `format!()` macro here
[INFO] [stdout] help: remove the `format!(..)` macro call
[INFO] [stdout]     |
[INFO] [stdout] 195 ~                 error => assert!(false, "Raised error was not the one \
[INFO] [stdout] 196 ~                                           we were expecting but {} instead", error)
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `E` should have a snake case name
[INFO] [stdout]    --> src/cipher/substitution.rs:205:20
[INFO] [stdout]     |
[INFO] [stdout] 205 |         if let Err(E) = cipher("", wrong_key, test_charset) {
[INFO] [stdout]     |                    ^ help: convert the identifier to snake case: `e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: panic message is not a string literal
[INFO] [stdout]    --> src/cipher/substitution.rs:208:41
[INFO] [stdout]     |
[INFO] [stdout] 208 |                   error => assert!(false, format!("Raised error was not the one \
[INFO] [stdout]     |  _________________________________________^
[INFO] [stdout] 209 | |                                           we were expecting but {} instead", error))
[INFO] [stdout]     | |___________________________________________________________________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this usage of `assert!()` is deprecated; it will be a hard error in Rust 2021
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>
[INFO] [stdout]     = note: the `assert!()` macro supports formatting, so there's no need for the `format!()` macro here
[INFO] [stdout] help: remove the `format!(..)` macro call
[INFO] [stdout]     |
[INFO] [stdout] 208 ~                 error => assert!(false, "Raised error was not the one \
[INFO] [stdout] 209 ~                                           we were expecting but {} instead", error)
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: 135 warnings emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished dev [unoptimized + debuginfo] target(s) in 18.15s
[INFO] running `Command { std: "docker" "inspect" "423a49a201d3f7444cd7e5a6b5b0cd9e9ebbac713bdafd6e599abc9a56c9f348", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "423a49a201d3f7444cd7e5a6b5b0cd9e9ebbac713bdafd6e599abc9a56c9f348", kill_on_drop: false }`
[INFO] [stdout] 423a49a201d3f7444cd7e5a6b5b0cd9e9ebbac713bdafd6e599abc9a56c9f348
[INFO] checking cifra-0.9.3+post3 against try#7622c0f807a4e13c4db886a1681bf343795692df+rustflags=-Dnon_local_definitions for pr-120393-1
[INFO] extracting crate cifra 0.9.3+post3 into /workspace/builds/worker-0-tc2/source
[INFO] validating manifest of crates.io crate cifra 0.9.3+post3 on toolchain 7622c0f807a4e13c4db886a1681bf343795692df
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+7622c0f807a4e13c4db886a1681bf343795692df" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] started tweaking crates.io crate cifra 0.9.3+post3
[INFO] finished tweaking crates.io crate cifra 0.9.3+post3
[INFO] tweaked toml for crates.io crate cifra 0.9.3+post3 written to /workspace/builds/worker-0-tc2/source/Cargo.toml
[INFO] crate crates.io crate cifra 0.9.3+post3 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" "+7622c0f807a4e13c4db886a1681bf343795692df" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:2788e3201cd34a07e3172128adcd8b3090168a8e3bcc40d7c032b9dda1df7d1c" "/opt/rustwide/cargo-home/bin/cargo" "+7622c0f807a4e13c4db886a1681bf343795692df" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] d78dcf2d05da4951a6fa31151ab15c70a9f5f44b4c454ca2fbddcb8f18715318
[INFO] running `Command { std: "docker" "start" "-a" "d78dcf2d05da4951a6fa31151ab15c70a9f5f44b4c454ca2fbddcb8f18715318", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "d78dcf2d05da4951a6fa31151ab15c70a9f5f44b4c454ca2fbddcb8f18715318", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "d78dcf2d05da4951a6fa31151ab15c70a9f5f44b4c454ca2fbddcb8f18715318", kill_on_drop: false }`
[INFO] [stdout] d78dcf2d05da4951a6fa31151ab15c70a9f5f44b4c454ca2fbddcb8f18715318
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid -Dnon_local_definitions" "-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:2788e3201cd34a07e3172128adcd8b3090168a8e3bcc40d7c032b9dda1df7d1c" "/opt/rustwide/cargo-home/bin/cargo" "+7622c0f807a4e13c4db886a1681bf343795692df" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] a70427af9425663001da4aae51c2b9e0c5ebffac34363afbb58cd197d6645283
[INFO] running `Command { std: "docker" "start" "-a" "a70427af9425663001da4aae51c2b9e0c5ebffac34363afbb58cd197d6645283", kill_on_drop: false }`
[INFO] [stderr]    Compiling autocfg v1.0.1
[INFO] [stderr]    Compiling libc v0.2.112
[INFO] [stderr]     Checking cfg-if v1.0.0
[INFO] [stderr]    Compiling proc-macro2 v1.0.34
[INFO] [stderr]    Compiling unicode-xid v0.2.2
[INFO] [stderr]    Compiling syn v1.0.82
[INFO] [stderr]    Compiling pkg-config v0.3.24
[INFO] [stderr]    Compiling memchr v2.4.1
[INFO] [stderr]     Checking lazy_static v1.4.0
[INFO] [stderr]    Compiling cc v1.0.72
[INFO] [stderr]    Compiling crossbeam-utils v0.8.5
[INFO] [stderr]     Checking ppv-lite86 v0.2.15
[INFO] [stderr]    Compiling getrandom v0.1.16
[INFO] [stderr]    Compiling crossbeam-epoch v0.9.5
[INFO] [stderr]    Compiling byteorder v1.4.3
[INFO] [stderr]     Checking scopeguard v1.1.0
[INFO] [stderr]    Compiling rayon-core v1.9.1
[INFO] [stderr]     Checking adler v1.0.2
[INFO] [stderr]    Compiling semver-parser v0.7.0
[INFO] [stderr]    Compiling version_check v0.9.3
[INFO] [stderr]     Checking gimli v0.26.1
[INFO] [stderr]    Compiling semver v0.9.0
[INFO] [stderr]     Checking hashbrown v0.11.2
[INFO] [stderr]    Compiling unicode-segmentation v1.8.0
[INFO] [stderr]     Checking rustc-demangle v0.1.21
[INFO] [stderr]    Compiling memoffset v0.6.5
[INFO] [stderr]    Compiling miniz_oxide v0.4.4
[INFO] [stderr]    Compiling indexmap v1.7.0
[INFO] [stderr]    Compiling rayon v1.5.1
[INFO] [stderr]    Compiling error-chain v0.12.4
[INFO] [stderr]     Checking crossbeam-channel v0.5.1
[INFO] [stderr]    Compiling libsqlite3-sys v0.22.2
[INFO] [stderr]    Compiling rustc_version v0.2.3
[INFO] [stderr]    Compiling num-traits v0.2.14
[INFO] [stderr]    Compiling heck v0.3.3
[INFO] [stderr]     Checking object v0.27.1
[INFO] [stderr]     Checking os_str_bytes v6.0.0
[INFO] [stderr]     Checking aho-corasick v0.7.18
[INFO] [stderr]     Checking bitflags v1.3.2
[INFO] [stderr]    Compiling quote v1.0.10
[INFO] [stderr]     Checking textwrap v0.14.2
[INFO] [stderr]     Checking regex-syntax v0.6.25
[INFO] [stderr]     Checking termcolor v1.1.2
[INFO] [stderr]     Checking either v1.6.1
[INFO] [stderr]     Checking strsim v0.10.0
[INFO] [stderr]     Checking getrandom v0.2.3
[INFO] [stderr]     Checking num_cpus v1.13.0
[INFO] [stderr]     Checking crossbeam-deque v0.8.1
[INFO] [stderr]     Checking rand_core v0.5.1
[INFO] [stderr]     Checking dirs-sys v0.3.6
[INFO] [stderr]     Checking atty v0.2.14
[INFO] [stderr]     Checking rand_core v0.6.3
[INFO] [stderr]    Compiling rstest v0.6.4
[INFO] [stderr]     Checking untrusted v0.6.2
[INFO] [stderr]     Checking clap v3.0.0-rc.5
[INFO] [stderr]     Checking dirs v4.0.0
[INFO] [stderr]     Checking remove_dir_all v0.5.3
[INFO] [stderr]     Checking spin v0.5.2
[INFO] [stderr]     Checking linked-hash-map v0.5.4
[INFO] [stderr]     Checking strum v0.21.0
[INFO] [stderr]    Compiling backtrace v0.3.63
[INFO] [stderr]    Compiling ring v0.14.6
[INFO] [stderr]     Checking rand_chacha v0.2.2
[INFO] [stderr]     Checking dotenv v0.15.0
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]    Compiling cfg-if v0.1.10
[INFO] [stderr]     Checking rand v0.7.3
[INFO] [stderr]     Checking rand v0.8.4
[INFO] [stderr]     Checking float-cmp v0.8.0
[INFO] [stderr]     Checking tempfile v3.2.0
[INFO] [stderr]     Checking addr2line v0.17.0
[INFO] [stderr]     Checking regex v1.5.4
[INFO] [stderr]     Checking test_common v1.4.0
[INFO] [stderr]    Compiling diesel_derives v1.4.1
[INFO] [stderr]    Compiling strum_macros v0.21.1
[INFO] [stderr]    Compiling diesel v1.4.8
[INFO] [stderr]     Checking migrations_internals v1.4.1
[INFO] [stderr]    Compiling migrations_macros v1.4.2
[INFO] [stderr]     Checking diesel_migrations v1.4.0
[INFO] [stderr]     Checking cifra v0.9.3+post3 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `OsStr`
[INFO] [stdout]  --> src/attack/database.rs:6:16
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::ffi::{OsStr, OsString};
[INFO] [stdout]   |                ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Error`
[INFO] [stdout]   --> src/attack/database.rs:11:43
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::{ErrorKind, Result, ResultExt, Error};
[INFO] [stdout]    |                                           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `DATABASE_STANDARD_PATH` should have an upper camel case name
[INFO] [stdout]   --> src/attack/database.rs:31:8
[INFO] [stdout]    |
[INFO] [stdout] 31 | struct DATABASE_STANDARD_PATH;
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to upper camel case: `DatabaseStandardPath`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_camel_case_types)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `cipher`
[INFO] [stdout]  --> src/attack/frequency.rs:5:48
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::cipher::vigenere::{DEFAULT_CHARSET, cipher, decipher};
[INFO] [stdout]   |                                                ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Error`, `ResultExt`
[INFO] [stdout]  --> src/cipher/substitution.rs:2:32
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::{ErrorKind, Result, ResultExt, Error};
[INFO] [stdout]   |                                ^^^^^^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `diesel::result::Error::DatabaseError`
[INFO] [stdout]    --> src/attack/caesar.rs:140:9
[INFO] [stdout]     |
[INFO] [stdout] 140 |     use diesel::result::Error::DatabaseError;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `OsStr`
[INFO] [stdout]  --> src/attack/database.rs:6:16
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::ffi::{OsStr, OsString};
[INFO] [stdout]   |                ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Error`
[INFO] [stdout]   --> src/attack/database.rs:11:43
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::{ErrorKind, Result, ResultExt, Error};
[INFO] [stdout]    |                                           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `DATABASE_STANDARD_PATH` should have an upper camel case name
[INFO] [stdout]   --> src/attack/database.rs:31:8
[INFO] [stdout]    |
[INFO] [stdout] 31 | struct DATABASE_STANDARD_PATH;
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to upper camel case: `DatabaseStandardPath`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_camel_case_types)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ffi::OsStr`
[INFO] [stdout]    --> src/attack/database.rs:185:9
[INFO] [stdout]     |
[INFO] [stdout] 185 |     use std::ffi::OsStr;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `read_to_string`
[INFO] [stdout]    --> src/attack/dictionaries.rs:542:50
[INFO] [stdout]     |
[INFO] [stdout] 542 |     use std::fs::{create_dir, File, OpenOptions, read_to_string};
[INFO] [stdout]     |                                                  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ffi::OsString`
[INFO] [stdout]    --> src/attack/dictionaries.rs:548:9
[INFO] [stdout]     |
[INFO] [stdout] 548 |     use std::ffi::OsString;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BufReader`, `Read`
[INFO] [stdout]    --> src/attack/dictionaries.rs:550:26
[INFO] [stdout]     |
[INFO] [stdout] 550 |     use std::io::{Write, BufReader, Read};
[INFO] [stdout]     |                          ^^^^^^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::env::temp_dir`
[INFO] [stdout]    --> src/attack/dictionaries.rs:552:9
[INFO] [stdout]     |
[INFO] [stdout] 552 |     use std::env::temp_dir;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `cipher`
[INFO] [stdout]  --> src/attack/frequency.rs:5:48
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::cipher::vigenere::{DEFAULT_CHARSET, cipher, decipher};
[INFO] [stdout]   |                                                ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::attack::dictionaries::tests::ENGLISH_TEXT_WITH_PUNCTUATIONS_MARKS`
[INFO] [stdout]    --> src/attack/frequency.rs:394:9
[INFO] [stdout]     |
[INFO] [stdout] 394 |     use crate::attack::dictionaries::tests::ENGLISH_TEXT_WITH_PUNCTUATIONS_MARKS;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `F64Margin`
[INFO] [stdout]    --> src/attack/frequency.rs:399:31
[INFO] [stdout]     |
[INFO] [stdout] 399 |     use float_cmp::{ApproxEq, F64Margin};
[INFO] [stdout]     |                               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ResultExt`
[INFO] [stdout]  --> src/cipher/substitution.rs:2:32
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::{ErrorKind, Result, ResultExt, Error};
[INFO] [stdout]   |                                ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `E`
[INFO] [stdout]    --> src/attack/simple_attacks.rs:165:25
[INFO] [stdout]     |
[INFO] [stdout] 165 |                     Err(E) => return None
[INFO] [stdout]     |                         ^ help: if this is intentional, prefix it with an underscore: `_E`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]    --> src/attack/frequency.rs:126:28
[INFO] [stdout]     |
[INFO] [stdout] 126 |                 .filter(|(&key, &_value)| _value == *value)
[INFO] [stdout]     |                            ^^^ help: if this is intentional, prefix it with an underscore: `_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]    --> src/attack/frequency.rs:157:25
[INFO] [stdout]     |
[INFO] [stdout] 157 |             .map(|(key, value)| key)
[INFO] [stdout]     |                         ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]    --> src/attack/frequency.rs:164:25
[INFO] [stdout]     |
[INFO] [stdout] 164 |             .map(|(key, value)| key)
[INFO] [stdout]     |                         ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `char`
[INFO] [stdout]    --> src/attack/frequency.rs:256:13
[INFO] [stdout]     |
[INFO] [stdout] 256 |     for (i, char) in char_string.chars().enumerate() {
[INFO] [stdout]     |             ^^^^ help: if this is intentional, prefix it with an underscore: `_char`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/attack/frequency.rs:269:28
[INFO] [stdout]     |
[INFO] [stdout] 269 |                        let mut values = sequences.get_mut(sequence_to_find).unwrap();
[INFO] [stdout]     |                            ----^^^^^^
[INFO] [stdout]     |                            |
[INFO] [stdout]     |                            help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]    --> src/attack/frequency.rs:383:21
[INFO] [stdout]     |
[INFO] [stdout] 383 |         .map(|(key, value)| key)
[INFO] [stdout]     |                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ciphered_text`
[INFO] [stdout]   --> src/attack/vigenere.rs:36:26
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub fn brute_force<T, U>(ciphered_text: T, charset: U, testing: bool)-> Result<String>
[INFO] [stdout]    |                          ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_ciphered_text`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `charset`
[INFO] [stdout]   --> src/attack/vigenere.rs:36:44
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub fn brute_force<T, U>(ciphered_text: T, charset: U, testing: bool)-> Result<String>
[INFO] [stdout]    |                                            ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_charset`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `testing`
[INFO] [stdout]   --> src/attack/vigenere.rs:36:56
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub fn brute_force<T, U>(ciphered_text: T, charset: U, testing: bool)-> Result<String>
[INFO] [stdout]    |                                                        ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_testing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ciphered_text`
[INFO] [stdout]   --> src/attack/vigenere.rs:47:23
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub fn brute_force_mp(ciphered_text: &str, charset: &str, testing: bool)-> Result<String> {
[INFO] [stdout]    |                       ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_ciphered_text`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `charset`
[INFO] [stdout]   --> src/attack/vigenere.rs:47:44
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub fn brute_force_mp(ciphered_text: &str, charset: &str, testing: bool)-> Result<String> {
[INFO] [stdout]    |                                            ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_charset`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `testing`
[INFO] [stdout]   --> src/attack/vigenere.rs:47:59
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub fn brute_force_mp(ciphered_text: &str, charset: &str, testing: bool)-> Result<String> {
[INFO] [stdout]    |                                                           ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_testing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `offset_char` is never read
[INFO] [stdout]    --> src/cipher/vigenere.rs:101:17
[INFO] [stdout]     |
[INFO] [stdout] 101 |         let mut offset_char = String::new();
[INFO] [stdout]     |                 ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_best_result` is never used
[INFO] [stdout]    --> src/attack/caesar.rs:114:4
[INFO] [stdout]     |
[INFO] [stdout] 114 | fn get_best_result(identified_languages: &Vec<(usize, IdentifiedLanguage)>)-> usize {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `database_path` is never read
[INFO] [stdout]   --> src/attack/database.rs:98:5
[INFO] [stdout]    |
[INFO] [stdout] 96 | pub struct Database {
[INFO] [stdout]    |            -------- field in this struct
[INFO] [stdout] 97 |     pub session: DatabaseSession,
[INFO] [stdout] 98 |     database_path: String
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `candidates` is never read
[INFO] [stdout]    --> src/attack/dictionaries.rs:410:5
[INFO] [stdout]     |
[INFO] [stdout] 407 | pub struct IdentifiedLanguage {
[INFO] [stdout]     |            ------------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 410 |     candidates: HashMap<String, f64>
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `start` is never read
[INFO] [stdout]   --> src/attack/simple_attacks.rs:89:5
[INFO] [stdout]    |
[INFO] [stdout] 88 | struct IntegerKeyIterator {
[INFO] [stdout]    |        ------------------ field in this struct
[INFO] [stdout] 89 |     start: usize,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/attack/simple_attacks.rs:95:8
[INFO] [stdout]    |
[INFO] [stdout] 94 | impl IntegerKeyIterator {
[INFO] [stdout]    | ----------------------- associated function in this implementation
[INFO] [stdout] 95 |     fn new(start: usize, end: usize) -> Self {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> src/attack/simple_attacks.rs:129:12
[INFO] [stdout]     |
[INFO] [stdout] 128 | impl DictionaryWordKeyIterator {
[INFO] [stdout]     | ------------------------------ associated function in this implementation
[INFO] [stdout] 129 |     pub fn new() -> Result<Self> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `create_new_single_entry` is never used
[INFO] [stdout]    --> src/attack/substitution.rs:723:8
[INFO] [stdout]     |
[INFO] [stdout] 386 | impl Mapping {
[INFO] [stdout]     | ------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 723 |     fn create_new_single_entry(&mut self, key: char, value: char) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LetterHistogram` is never constructed
[INFO] [stdout]   --> src/attack/frequency.rs:14:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | struct LetterHistogram {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/attack/frequency.rs:37:8
[INFO] [stdout]     |
[INFO] [stdout] 22  | impl LetterHistogram {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 37  |     fn from_text<T>(text: T,
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 67  |     fn from_dict(letters: HashMap<char, u64>,
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 89  |     fn setup_for_matching(self, letter_counter: Counter<char>, width: usize) -> Self {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     fn create_ordered_dict(mut self, letter_counter: Counter<char>) -> Self {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 155 |     fn set_matching_width(mut self, width: usize) -> Self{
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 181 |     fn frequency<T>(&self, key: T) -> Result<f64>
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 190 |     fn letters(&self) -> linked_hash_map::Keys<char, u64> {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 208 |     fn match_score(one: &LetterHistogram, other: &LetterHistogram) -> u8 {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_repeated_sequences` is never used
[INFO] [stdout]    --> src/attack/frequency.rs:230:8
[INFO] [stdout]     |
[INFO] [stdout] 230 | pub fn find_repeated_sequences<T>(text: T, length: usize) -> HashMap<String, Vec<usize>>
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_adjacent_separations` is never used
[INFO] [stdout]    --> src/attack/frequency.rs:247:4
[INFO] [stdout]     |
[INFO] [stdout] 247 | fn find_adjacent_separations<T>(text: T, length: usize) -> HashMap<String, Vec<usize>>
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_not_adjacent_separations` is never used
[INFO] [stdout]    --> src/attack/frequency.rs:292:4
[INFO] [stdout]     |
[INFO] [stdout] 292 | fn find_not_adjacent_separations(sequences: &mut HashMap<String, Vec<usize>>) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_substrings` is never used
[INFO] [stdout]    --> src/attack/frequency.rs:327:8
[INFO] [stdout]     |
[INFO] [stdout] 327 | pub fn get_substrings<T>(ciphertext: T, step: usize) -> Vec<String>
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `match_substring` is never used
[INFO] [stdout]    --> src/attack/frequency.rs:353:4
[INFO] [stdout]     |
[INFO] [stdout] 353 | fn match_substring<T>(substring: T, reference_histogram: &LetterHistogram) -> u8
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_most_likely_subkeys` is never used
[INFO] [stdout]    --> src/attack/frequency.rs:370:4
[INFO] [stdout]     |
[INFO] [stdout] 370 | fn find_most_likely_subkeys<T>(substring: T, reference_histogram: &LetterHistogram) -> Result<Vec<String>>
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `MultiplyingKeyBelowZero` and `AddingKeyBelowZero` are never constructed
[INFO] [stdout]   --> src/cipher/affine.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | enum WrongAffineKeyCauses {
[INFO] [stdout]    |      -------------------- variants in this enum
[INFO] [stdout] 17 |     MultiplyingKeyBelowZero,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 18 |     MultiplyingKeyZero,
[INFO] [stdout] 19 |     AddingKeyBelowZero,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `WrongAffineKeyCauses` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait method `fromStr` should have a snake case name
[INFO] [stdout]   --> src/lib.rs:85:8
[INFO] [stdout]    |
[INFO] [stdout] 85 |     fn fromStr(s: T) -> Self;
[INFO] [stdout]    |        ^^^^^^^ help: convert the identifier to snake case: `from_str`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_snake_case)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait method `findFromIndex` should have a snake case name
[INFO] [stdout]    --> src/lib.rs:106:8
[INFO] [stdout]     |
[INFO] [stdout] 106 |     fn findFromIndex(text: &T, text_to_find: U, index: usize) -> Option<usize>;
[INFO] [stdout]     |        ^^^^^^^^^^^^^ help: convert the identifier to snake case: `find_from_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/database.rs:129:13
[INFO] [stdout]     |
[INFO] [stdout] 129 |             create_folder_path(database_folder);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 129 |             let _ = create_folder_path(database_folder);
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/attack/database.rs:148:10
[INFO] [stdout]     |
[INFO] [stdout] 148 | #[derive(Queryable, Identifiable, Associations, Debug, PartialEq)]
[INFO] [stdout]     |          ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current function `_impl_queryable_for_language`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: requested on the command line with `-D non-local-definitions`
[INFO] [stdout]     = note: this error originates in the derive macro `Queryable` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/attack/database.rs:148:21
[INFO] [stdout]     |
[INFO] [stdout] 148 | #[derive(Queryable, Identifiable, Associations, Debug, PartialEq)]
[INFO] [stdout]     |                     ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current function `_impl_identifiable_for_language`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Identifiable` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/attack/database.rs:156:10
[INFO] [stdout]     |
[INFO] [stdout] 156 | #[derive(Insertable)]
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current function `_impl_insertable_for_newlanguage`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Insertable` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/attack/database.rs:164:10
[INFO] [stdout]     |
[INFO] [stdout] 164 | #[derive(Queryable, Identifiable, Associations, Debug, PartialEq)]
[INFO] [stdout]     |          ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current function `_impl_queryable_for_word`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Queryable` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/attack/database.rs:164:21
[INFO] [stdout]     |
[INFO] [stdout] 164 | #[derive(Queryable, Identifiable, Associations, Debug, PartialEq)]
[INFO] [stdout]     |                     ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current function `_impl_identifiable_for_word`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Identifiable` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/attack/database.rs:164:35
[INFO] [stdout]     |
[INFO] [stdout] 164 | #[derive(Queryable, Identifiable, Associations, Debug, PartialEq)]
[INFO] [stdout]     |                                   ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current function `_impl_associations_for_word`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Associations` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/attack/database.rs:174:10
[INFO] [stdout]     |
[INFO] [stdout] 174 | #[derive(Insertable)]
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current function `_impl_insertable_for_newword`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Insertable` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: call to `.clone()` on a reference in this situation does nothing
[INFO] [stdout]    --> src/attack/dictionaries.rs:164:41
[INFO] [stdout]     |
[INFO] [stdout] 164 |         let _word_clone = _word.as_ref().clone();
[INFO] [stdout]     |                                         ^^^^^^^^ help: remove this redundant call
[INFO] [stdout]     |
[INFO] [stdout]     = note: the type `str` does not implement `Clone`, so calling `clone` on `&str` copies the reference, which does not do anything and can be removed
[INFO] [stdout]     = note: `#[warn(noop_method_call)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `E` should have a snake case name
[INFO] [stdout]    --> src/attack/simple_attacks.rs:165:25
[INFO] [stdout]     |
[INFO] [stdout] 165 |                     Err(E) => return None
[INFO] [stdout]     |                         ^ help: convert the identifier to snake case: `e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `item_A` should have a snake case name
[INFO] [stdout]    --> src/attack/frequency.rs:122:34
[INFO] [stdout]     |
[INFO] [stdout] 122 |         values_ordered.sort_by(|&item_A, &item_B| item_B.cmp(item_A));
[INFO] [stdout]     |                                  ^^^^^^ help: convert the identifier to snake case: `item_a`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `item_B` should have a snake case name
[INFO] [stdout]    --> src/attack/frequency.rs:122:43
[INFO] [stdout]     |
[INFO] [stdout] 122 |         values_ordered.sort_by(|&item_A, &item_B| item_B.cmp(item_A));
[INFO] [stdout]     |                                           ^^^^^^ help: convert the identifier to snake case: `item_b`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/frequency.rs:162:9
[INFO] [stdout]     |
[INFO] [stdout] 162 |         ordered_dict_iter.advance_by(self.ordered_dict.len()-width);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 162 |         let _ = ordered_dict_iter.advance_by(self.ordered_dict.len()-width);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/frequency.rs:334:9
[INFO] [stdout]     |
[INFO] [stdout] 334 |         ciphered_stream_iter.advance_by(i);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 334 |         let _ = ciphered_stream_iter.advance_by(i);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `item_A` should have a snake case name
[INFO] [stdout]    --> src/cipher/common.rs:186:25
[INFO] [stdout]     |
[INFO] [stdout] 186 |         items.sort_by(|&item_A, &item_B| item_B.1.cmp(item_A.1));
[INFO] [stdout]     |                         ^^^^^^ help: convert the identifier to snake case: `item_a`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `item_B` should have a snake case name
[INFO] [stdout]    --> src/cipher/common.rs:186:34
[INFO] [stdout]     |
[INFO] [stdout] 186 |         items.sort_by(|&item_A, &item_B| item_B.1.cmp(item_A.1));
[INFO] [stdout]     |                                  ^^^^^^ help: convert the identifier to snake case: `item_b`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]  --> src/schema.rs:1:1
[INFO] [stdout]   |
[INFO] [stdout] 1 | / table! {
[INFO] [stdout] 2 | |     languages (id) {
[INFO] [stdout] 3 | |         id -> Integer,
[INFO] [stdout] 4 | |         language -> Text,
[INFO] [stdout] 5 | |     }
[INFO] [stdout] 6 | | }
[INFO] [stdout]   | |_^
[INFO] [stdout]   |
[INFO] [stdout]   = help: move this `impl` block outside the of the current function `_impl_query_id_for_table`
[INFO] [stdout]   = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]   = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]   = note: this error originates in the derive macro `QueryId` which comes from the expansion of the macro `table` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]  --> src/schema.rs:1:1
[INFO] [stdout]   |
[INFO] [stdout] 1 | / table! {
[INFO] [stdout] 2 | |     languages (id) {
[INFO] [stdout] 3 | |         id -> Integer,
[INFO] [stdout] 4 | |         language -> Text,
[INFO] [stdout] 5 | |     }
[INFO] [stdout] 6 | | }
[INFO] [stdout]   | |_^
[INFO] [stdout]   |
[INFO] [stdout]   = help: move this `impl` block outside the of the current function `_impl_query_id_for_id`
[INFO] [stdout]   = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]   = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]   = note: this error originates in the derive macro `QueryId` which comes from the expansion of the macro `table` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]  --> src/schema.rs:1:1
[INFO] [stdout]   |
[INFO] [stdout] 1 | / table! {
[INFO] [stdout] 2 | |     languages (id) {
[INFO] [stdout] 3 | |         id -> Integer,
[INFO] [stdout] 4 | |         language -> Text,
[INFO] [stdout] 5 | |     }
[INFO] [stdout] 6 | | }
[INFO] [stdout]   | |_^
[INFO] [stdout]   |
[INFO] [stdout]   = help: move this `impl` block outside the of the current function `_impl_query_id_for_language`
[INFO] [stdout]   = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]   = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]   = note: this error originates in the derive macro `QueryId` which comes from the expansion of the macro `table` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/schema.rs:8:1
[INFO] [stdout]    |
[INFO] [stdout] 8  | / table! {
[INFO] [stdout] 9  | |     words (id) {
[INFO] [stdout] 10 | |         id -> Integer,
[INFO] [stdout] 11 | |         word -> Text,
[INFO] [stdout] ...  |
[INFO] [stdout] 14 | |     }
[INFO] [stdout] 15 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current function `_impl_query_id_for_table`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `QueryId` which comes from the expansion of the macro `table` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/schema.rs:8:1
[INFO] [stdout]    |
[INFO] [stdout] 8  | / table! {
[INFO] [stdout] 9  | |     words (id) {
[INFO] [stdout] 10 | |         id -> Integer,
[INFO] [stdout] 11 | |         word -> Text,
[INFO] [stdout] ...  |
[INFO] [stdout] 14 | |     }
[INFO] [stdout] 15 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current function `_impl_query_id_for_id`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `QueryId` which comes from the expansion of the macro `table` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/schema.rs:8:1
[INFO] [stdout]    |
[INFO] [stdout] 8  | / table! {
[INFO] [stdout] 9  | |     words (id) {
[INFO] [stdout] 10 | |         id -> Integer,
[INFO] [stdout] 11 | |         word -> Text,
[INFO] [stdout] ...  |
[INFO] [stdout] 14 | |     }
[INFO] [stdout] 15 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current function `_impl_query_id_for_word`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `QueryId` which comes from the expansion of the macro `table` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/schema.rs:8:1
[INFO] [stdout]    |
[INFO] [stdout] 8  | / table! {
[INFO] [stdout] 9  | |     words (id) {
[INFO] [stdout] 10 | |         id -> Integer,
[INFO] [stdout] 11 | |         word -> Text,
[INFO] [stdout] ...  |
[INFO] [stdout] 14 | |     }
[INFO] [stdout] 15 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current function `_impl_query_id_for_word_pattern`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `QueryId` which comes from the expansion of the macro `table` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/schema.rs:8:1
[INFO] [stdout]    |
[INFO] [stdout] 8  | / table! {
[INFO] [stdout] 9  | |     words (id) {
[INFO] [stdout] 10 | |         id -> Integer,
[INFO] [stdout] 11 | |         word -> Text,
[INFO] [stdout] ...  |
[INFO] [stdout] 14 | |     }
[INFO] [stdout] 15 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current function `_impl_query_id_for_language_id`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `QueryId` which comes from the expansion of the macro `table` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `loaded_dictionaries`
[INFO] [stdout]    --> src/attack/affine.rs:144:13
[INFO] [stdout]     |
[INFO] [stdout] 144 |         let loaded_dictionaries = LoadedDictionaries::new();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_loaded_dictionaries`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `loaded_dictionaries`
[INFO] [stdout]    --> src/attack/affine.rs:153:13
[INFO] [stdout]     |
[INFO] [stdout] 153 |         let loaded_dictionaries = LoadedDictionaries::new();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_loaded_dictionaries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `loaded_dictionaries`
[INFO] [stdout]    --> src/attack/caesar.rs:148:13
[INFO] [stdout]     |
[INFO] [stdout] 148 |         let loaded_dictionaries = LoadedDictionaries::new();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_loaded_dictionaries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `loaded_dictionaries`
[INFO] [stdout]    --> src/attack/caesar.rs:157:13
[INFO] [stdout]     |
[INFO] [stdout] 157 |         let loaded_dictionaries = LoadedDictionaries::new();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_loaded_dictionaries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: aborting due to 15 previous errors; 46 warnings emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `test_env`
[INFO] [stdout]    --> src/attack/database.rs:201:13
[INFO] [stdout]     |
[INFO] [stdout] 201 |         let test_env = TemporalEnvironmentVariable::new("DATABASE_URL", absolute_pathname_to_database);
[INFO] [stdout]     |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_test_env`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `cifra` (lib) due to 16 previous errors; 46 warnings emitted
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stdout] warning: unused variable: `temp_dir`
[INFO] [stdout]    --> src/attack/dictionaries.rs:809:14
[INFO] [stdout]     |
[INFO] [stdout] 809 |         let (temp_dir, temp_env_database_path) = temporary_database_folder(None);
[INFO] [stdout]     |              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_dir`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_env_database_path`
[INFO] [stdout]    --> src/attack/dictionaries.rs:809:24
[INFO] [stdout]     |
[INFO] [stdout] 809 |         let (temp_dir, temp_env_database_path) = temporary_database_folder(None);
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_env_database_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_dir`
[INFO] [stdout]    --> src/attack/dictionaries.rs:818:14
[INFO] [stdout]     |
[INFO] [stdout] 818 |         let (temp_dir, temp_env_database_path) = temporary_database_folder(None);
[INFO] [stdout]     |              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_dir`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_env_database_path`
[INFO] [stdout]    --> src/attack/dictionaries.rs:818:24
[INFO] [stdout]     |
[INFO] [stdout] 818 |         let (temp_dir, temp_env_database_path) = temporary_database_folder(None);
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_env_database_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_dir`
[INFO] [stdout]    --> src/attack/dictionaries.rs:835:14
[INFO] [stdout]     |
[INFO] [stdout] 835 |         let (temp_dir, temp_env_database_path) = temporary_database_folder(None);
[INFO] [stdout]     |              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_dir`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_env_database_path`
[INFO] [stdout]    --> src/attack/dictionaries.rs:835:24
[INFO] [stdout]     |
[INFO] [stdout] 835 |         let (temp_dir, temp_env_database_path) = temporary_database_folder(None);
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_env_database_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_dir`
[INFO] [stdout]    --> src/attack/dictionaries.rs:850:14
[INFO] [stdout]     |
[INFO] [stdout] 850 |         let (temp_dir, temp_env_database_path) = temporary_database_folder(None);
[INFO] [stdout]     |              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_dir`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_env_database_path`
[INFO] [stdout]    --> src/attack/dictionaries.rs:850:24
[INFO] [stdout]     |
[INFO] [stdout] 850 |         let (temp_dir, temp_env_database_path) = temporary_database_folder(None);
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_env_database_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_dir`
[INFO] [stdout]    --> src/attack/dictionaries.rs:865:14
[INFO] [stdout]     |
[INFO] [stdout] 865 |         let (temp_dir, temp_env_database_path) = loaded_micro_dictionary_temp_dir();
[INFO] [stdout]     |              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_dir`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_env_database_path`
[INFO] [stdout]    --> src/attack/dictionaries.rs:865:24
[INFO] [stdout]     |
[INFO] [stdout] 865 |         let (temp_dir, temp_env_database_path) = loaded_micro_dictionary_temp_dir();
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_env_database_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/attack/dictionaries.rs:864:13
[INFO] [stdout]     |
[INFO] [stdout] 864 |         let mut micro_dictionaries = get_micro_dictionaries_content();
[INFO] [stdout]     |             ----^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_env_database_path`
[INFO] [stdout]    --> src/attack/dictionaries.rs:902:24
[INFO] [stdout]     |
[INFO] [stdout] 902 |         let (temp_dir, temp_env_database_path) = temporary_database_folder(None);
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_env_database_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_dir`
[INFO] [stdout]    --> src/attack/dictionaries.rs:944:14
[INFO] [stdout]     |
[INFO] [stdout] 944 |         let (temp_dir, temp_env_database_path) = temporary_database_folder(None);
[INFO] [stdout]     |              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_dir`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_env_database_path`
[INFO] [stdout]    --> src/attack/dictionaries.rs:944:24
[INFO] [stdout]     |
[INFO] [stdout] 944 |         let (temp_dir, temp_env_database_path) = temporary_database_folder(None);
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_env_database_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `loaded_dictionaries`
[INFO] [stdout]    --> src/attack/dictionaries.rs:959:13
[INFO] [stdout]     |
[INFO] [stdout] 959 |         let loaded_dictionaries = LoadedDictionaries::new();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_loaded_dictionaries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_dir`
[INFO] [stdout]    --> src/attack/dictionaries.rs:990:14
[INFO] [stdout]     |
[INFO] [stdout] 990 |         let (temp_dir, temp_env_database_path) = temporary_database_folder(None);
[INFO] [stdout]     |              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_dir`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `temp_env_database_path`
[INFO] [stdout]    --> src/attack/dictionaries.rs:990:24
[INFO] [stdout]     |
[INFO] [stdout] 990 |         let (temp_dir, temp_env_database_path) = temporary_database_folder(None);
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_temp_env_database_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `loaded_micro_dictionary_temp_dir`
[INFO] [stdout]     --> src/attack/dictionaries.rs:1020:27
[INFO] [stdout]      |
[INFO] [stdout] 1020 |     fn test_get_all_words(loaded_micro_dictionary_temp_dir: (TestEnvironment, TemporalEnvironmentVariable)) {
[INFO] [stdout]      |                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_loaded_micro_dictionary_temp_dir`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `E`
[INFO] [stdout]    --> src/attack/simple_attacks.rs:165:25
[INFO] [stdout]     |
[INFO] [stdout] 165 |                     Err(E) => return None
[INFO] [stdout]     |                         ^ help: if this is intentional, prefix it with an underscore: `_E`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `loaded_micro_dictionary_temp_dir`
[INFO] [stdout]    --> src/attack/simple_attacks.rs:281:43
[INFO] [stdout]     |
[INFO] [stdout] 281 |     fn test_dictionary_word_key_generator(loaded_micro_dictionary_temp_dir: (TestEnvironment, TemporalEnvironmentVariable)) {
[INFO] [stdout]     |                                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_loaded_micro_dictionary_temp_dir`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `loaded_dictionaries`
[INFO] [stdout]    --> src/attack/substitution.rs:872:13
[INFO] [stdout]     |
[INFO] [stdout] 872 |         let loaded_dictionaries = LoadedDictionaries::new();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_loaded_dictionaries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `loaded_dictionaries`
[INFO] [stdout]    --> src/attack/substitution.rs:894:13
[INFO] [stdout]     |
[INFO] [stdout] 894 |         let loaded_dictionaries = LoadedDictionaries::new();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_loaded_dictionaries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `missing`
[INFO] [stdout]     --> src/attack/substitution.rs:1125:13
[INFO] [stdout]      |
[INFO] [stdout] 1125 |         let missing: Vec<Mapping> = expected_list.iter().cloned().filter(|_mapping| !recovered_mappings.contains(&_mapping)).collect();
[INFO] [stdout]      |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_missing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/attack/substitution.rs:1073:13
[INFO] [stdout]      |
[INFO] [stdout] 1073 |         let mut expected_mapping_1 = mapping!(THIS_TEST_CHARSET, {"1": {"a"},
[INFO] [stdout]      |             ----^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/attack/substitution.rs:1078:13
[INFO] [stdout]      |
[INFO] [stdout] 1078 |         let mut expected_mapping_2 =  mapping!(THIS_TEST_CHARSET, {"1": {"a"},
[INFO] [stdout]      |             ----^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/attack/substitution.rs:1083:13
[INFO] [stdout]      |
[INFO] [stdout] 1083 |         let mut expected_mapping_3 = mapping!(THIS_TEST_CHARSET, {"1": {"b"},
[INFO] [stdout]      |             ----^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/attack/substitution.rs:1088:13
[INFO] [stdout]      |
[INFO] [stdout] 1088 |         let mut expected_mapping_4 =  mapping!(THIS_TEST_CHARSET, {"1": {"b"},
[INFO] [stdout]      |             ----^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/attack/substitution.rs:1093:13
[INFO] [stdout]      |
[INFO] [stdout] 1093 |         let mut expected_mapping_5 = mapping!(THIS_TEST_CHARSET, {"1": {"a"},
[INFO] [stdout]      |             ----^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/attack/substitution.rs:1098:13
[INFO] [stdout]      |
[INFO] [stdout] 1098 |         let mut expected_mapping_6 = mapping!(THIS_TEST_CHARSET, {"1": {"a"},
[INFO] [stdout]      |             ----^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/attack/substitution.rs:1103:13
[INFO] [stdout]      |
[INFO] [stdout] 1103 |         let mut expected_mapping_7 = mapping!(THIS_TEST_CHARSET, {"1": {"b"},
[INFO] [stdout]      |             ----^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/attack/substitution.rs:1108:13
[INFO] [stdout]      |
[INFO] [stdout] 1108 |         let mut expected_mapping_8 =  mapping!(THIS_TEST_CHARSET, {"1": {"b"},
[INFO] [stdout]      |             ----^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/attack/substitution.rs:1113:13
[INFO] [stdout]      |
[INFO] [stdout] 1113 |         let mut expected_list = vec![
[INFO] [stdout]      |             ----^^^^^^^^^^^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/attack/substitution.rs:1155:13
[INFO] [stdout]      |
[INFO] [stdout] 1155 |         let mut mapping = mapping!(TEST_CHARSET,
[INFO] [stdout]      |             ----^^^^^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `extracted_candidates`
[INFO] [stdout]     --> src/attack/substitution.rs:1210:38
[INFO] [stdout]      |
[INFO] [stdout] 1210 |         let (extracted_cipherletter, extracted_candidates) = mapping.pop_item()
[INFO] [stdout]      |                                      ^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_extracted_candidates`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `loaded_dictionaries`
[INFO] [stdout]    --> src/attack/transposition.rs:100:13
[INFO] [stdout]     |
[INFO] [stdout] 100 |         let loaded_dictionaries = LoadedDictionaries::new();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_loaded_dictionaries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `loaded_dictionaries`
[INFO] [stdout]    --> src/attack/transposition.rs:109:13
[INFO] [stdout]     |
[INFO] [stdout] 109 |         let loaded_dictionaries = LoadedDictionaries::new();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_loaded_dictionaries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]    --> src/attack/frequency.rs:126:28
[INFO] [stdout]     |
[INFO] [stdout] 126 |                 .filter(|(&key, &_value)| _value == *value)
[INFO] [stdout]     |                            ^^^ help: if this is intentional, prefix it with an underscore: `_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]    --> src/attack/frequency.rs:157:25
[INFO] [stdout]     |
[INFO] [stdout] 157 |             .map(|(key, value)| key)
[INFO] [stdout]     |                         ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]    --> src/attack/frequency.rs:164:25
[INFO] [stdout]     |
[INFO] [stdout] 164 |             .map(|(key, value)| key)
[INFO] [stdout]     |                         ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `char`
[INFO] [stdout]    --> src/attack/frequency.rs:256:13
[INFO] [stdout]     |
[INFO] [stdout] 256 |     for (i, char) in char_string.chars().enumerate() {
[INFO] [stdout]     |             ^^^^ help: if this is intentional, prefix it with an underscore: `_char`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/attack/frequency.rs:269:28
[INFO] [stdout]     |
[INFO] [stdout] 269 |                        let mut values = sequences.get_mut(sequence_to_find).unwrap();
[INFO] [stdout]     |                            ----^^^^^^
[INFO] [stdout]     |                            |
[INFO] [stdout]     |                            help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]    --> src/attack/frequency.rs:383:21
[INFO] [stdout]     |
[INFO] [stdout] 383 |         .map(|(key, value)| key)
[INFO] [stdout]     |                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ciphered_text`
[INFO] [stdout]   --> src/attack/vigenere.rs:36:26
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub fn brute_force<T, U>(ciphered_text: T, charset: U, testing: bool)-> Result<String>
[INFO] [stdout]    |                          ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_ciphered_text`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `charset`
[INFO] [stdout]   --> src/attack/vigenere.rs:36:44
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub fn brute_force<T, U>(ciphered_text: T, charset: U, testing: bool)-> Result<String>
[INFO] [stdout]    |                                            ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_charset`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `testing`
[INFO] [stdout]   --> src/attack/vigenere.rs:36:56
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub fn brute_force<T, U>(ciphered_text: T, charset: U, testing: bool)-> Result<String>
[INFO] [stdout]    |                                                        ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_testing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ciphered_text`
[INFO] [stdout]   --> src/attack/vigenere.rs:47:23
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub fn brute_force_mp(ciphered_text: &str, charset: &str, testing: bool)-> Result<String> {
[INFO] [stdout]    |                       ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_ciphered_text`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `charset`
[INFO] [stdout]   --> src/attack/vigenere.rs:47:44
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub fn brute_force_mp(ciphered_text: &str, charset: &str, testing: bool)-> Result<String> {
[INFO] [stdout]    |                                            ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_charset`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `testing`
[INFO] [stdout]   --> src/attack/vigenere.rs:47:59
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub fn brute_force_mp(ciphered_text: &str, charset: &str, testing: bool)-> Result<String> {
[INFO] [stdout]    |                                                           ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_testing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/cipher/transposition.rs:324:13
[INFO] [stdout]     |
[INFO] [stdout] 324 |         let mut transposition_matrix = vec![
[INFO] [stdout]     |             ----^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `offset_char` is never read
[INFO] [stdout]    --> src/cipher/vigenere.rs:101:17
[INFO] [stdout]     |
[INFO] [stdout] 101 |         let mut offset_char = String::new();
[INFO] [stdout]     |                 ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_best_result` is never used
[INFO] [stdout]    --> src/attack/caesar.rs:114:4
[INFO] [stdout]     |
[INFO] [stdout] 114 | fn get_best_result(identified_languages: &Vec<(usize, IdentifiedLanguage)>)-> usize {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `database_path` is never read
[INFO] [stdout]   --> src/attack/database.rs:98:5
[INFO] [stdout]    |
[INFO] [stdout] 96 | pub struct Database {
[INFO] [stdout]    |            -------- field in this struct
[INFO] [stdout] 97 |     pub session: DatabaseSession,
[INFO] [stdout] 98 |     database_path: String
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `candidates` is never read
[INFO] [stdout]    --> src/attack/dictionaries.rs:410:5
[INFO] [stdout]     |
[INFO] [stdout] 407 | pub struct IdentifiedLanguage {
[INFO] [stdout]     |            ------------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 410 |     candidates: HashMap<String, f64>
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `temp_env` and `temp_env_var` are never read
[INFO] [stdout]    --> src/attack/dictionaries.rs:659:9
[INFO] [stdout]     |
[INFO] [stdout] 656 |     pub struct LoadedDictionaries {
[INFO] [stdout]     |                ------------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 659 |         temp_env: TestEnvironment,
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 660 |         temp_env_var: TemporalEnvironmentVariable
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `text_file` is never read
[INFO] [stdout]    --> src/attack/dictionaries.rs:752:13
[INFO] [stdout]     |
[INFO] [stdout] 751 |     struct TemporaryTextFile {
[INFO] [stdout]     |            ----------------- field in this struct
[INFO] [stdout] 752 |         pub text_file: File,
[INFO] [stdout]     |             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `start` is never read
[INFO] [stdout]   --> src/attack/simple_attacks.rs:89:5
[INFO] [stdout]    |
[INFO] [stdout] 88 | struct IntegerKeyIterator {
[INFO] [stdout]    |        ------------------ field in this struct
[INFO] [stdout] 89 |     start: usize,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `create_new_single_entry` is never used
[INFO] [stdout]    --> src/attack/substitution.rs:723:8
[INFO] [stdout]     |
[INFO] [stdout] 386 | impl Mapping {
[INFO] [stdout]     | ------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 723 |     fn create_new_single_entry(&mut self, key: char, value: char) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `language` is never read
[INFO] [stdout]    --> src/attack/substitution.rs:817:9
[INFO] [stdout]     |
[INFO] [stdout] 815 |     struct TestSet {
[INFO] [stdout]     |            ------- field in this struct
[INFO] [stdout] 816 |         text_file: &'static str,
[INFO] [stdout] 817 |         language: &'static str,
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `from_dict` is never used
[INFO] [stdout]   --> src/attack/frequency.rs:67:8
[INFO] [stdout]    |
[INFO] [stdout] 22 | impl LetterHistogram {
[INFO] [stdout]    | -------------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 67 |     fn from_dict(letters: HashMap<char, u64>,
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `MultiplyingKeyBelowZero` and `AddingKeyBelowZero` are never constructed
[INFO] [stdout]   --> src/cipher/affine.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | enum WrongAffineKeyCauses {
[INFO] [stdout]    |      -------------------- variants in this enum
[INFO] [stdout] 17 |     MultiplyingKeyBelowZero,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 18 |     MultiplyingKeyZero,
[INFO] [stdout] 19 |     AddingKeyBelowZero,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `WrongAffineKeyCauses` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait method `fromStr` should have a snake case name
[INFO] [stdout]   --> src/lib.rs:85:8
[INFO] [stdout]    |
[INFO] [stdout] 85 |     fn fromStr(s: T) -> Self;
[INFO] [stdout]    |        ^^^^^^^ help: convert the identifier to snake case: `from_str`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_snake_case)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait method `findFromIndex` should have a snake case name
[INFO] [stdout]    --> src/lib.rs:106:8
[INFO] [stdout]     |
[INFO] [stdout] 106 |     fn findFromIndex(text: &T, text_to_find: U, index: usize) -> Option<usize>;
[INFO] [stdout]     |        ^^^^^^^^^^^^^ help: convert the identifier to snake case: `find_from_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/database.rs:129:13
[INFO] [stdout]     |
[INFO] [stdout] 129 |             create_folder_path(database_folder);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 129 |             let _ = create_folder_path(database_folder);
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/attack/database.rs:148:10
[INFO] [stdout]     |
[INFO] [stdout] 148 | #[derive(Queryable, Identifiable, Associations, Debug, PartialEq)]
[INFO] [stdout]     |          ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current function `_impl_queryable_for_language`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: requested on the command line with `-D non-local-definitions`
[INFO] [stdout]     = note: this error originates in the derive macro `Queryable` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/attack/database.rs:148:21
[INFO] [stdout]     |
[INFO] [stdout] 148 | #[derive(Queryable, Identifiable, Associations, Debug, PartialEq)]
[INFO] [stdout]     |                     ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current function `_impl_identifiable_for_language`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Identifiable` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/attack/database.rs:156:10
[INFO] [stdout]     |
[INFO] [stdout] 156 | #[derive(Insertable)]
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current function `_impl_insertable_for_newlanguage`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Insertable` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/attack/database.rs:164:10
[INFO] [stdout]     |
[INFO] [stdout] 164 | #[derive(Queryable, Identifiable, Associations, Debug, PartialEq)]
[INFO] [stdout]     |          ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current function `_impl_queryable_for_word`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Queryable` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/attack/database.rs:164:21
[INFO] [stdout]     |
[INFO] [stdout] 164 | #[derive(Queryable, Identifiable, Associations, Debug, PartialEq)]
[INFO] [stdout]     |                     ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current function `_impl_identifiable_for_word`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Identifiable` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/attack/database.rs:164:35
[INFO] [stdout]     |
[INFO] [stdout] 164 | #[derive(Queryable, Identifiable, Associations, Debug, PartialEq)]
[INFO] [stdout]     |                                   ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current function `_impl_associations_for_word`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Associations` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/attack/database.rs:174:10
[INFO] [stdout]     |
[INFO] [stdout] 174 | #[derive(Insertable)]
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current function `_impl_insertable_for_newword`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Insertable` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/database.rs:202:9
[INFO] [stdout]     |
[INFO] [stdout] 202 |         create_database();
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 202 |         let _ = create_database();
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/database.rs:213:9
[INFO] [stdout]     |
[INFO] [stdout] 213 |         create_folder_path(database_folder);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 213 |         let _ = create_folder_path(database_folder);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: call to `.clone()` on a reference in this situation does nothing
[INFO] [stdout]    --> src/attack/dictionaries.rs:164:41
[INFO] [stdout]     |
[INFO] [stdout] 164 |         let _word_clone = _word.as_ref().clone();
[INFO] [stdout]     |                                         ^^^^^^^^ help: remove this redundant call
[INFO] [stdout]     |
[INFO] [stdout]     = note: the type `str` does not implement `Clone`, so calling `clone` on `&str` copies the reference, which does not do anything and can be removed
[INFO] [stdout]     = note: `#[warn(noop_method_call)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:666:13
[INFO] [stdout]     |
[INFO] [stdout] 666 |             database::create_database();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 666 |             let _ = database::create_database();
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:670:13
[INFO] [stdout]     |
[INFO] [stdout] 670 |             create_dir(&resources_path);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 670 |             let _ = create_dir(&resources_path);
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:685:17
[INFO] [stdout]     |
[INFO] [stdout] 685 |                 dictionary.populate(language_book);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 685 |                 let _ = dictionary.populate(language_book);
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::iter::Iterator::collect` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:688:13
[INFO] [stdout]     |
[INFO] [stdout] 688 |             LANGUAGES.iter().map(|x| _languages.push(x.to_string())).collect::<Vec<_>>();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you really need to exhaust the iterator, consider `.for_each(drop)` instead
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 688 |             let _ = LANGUAGES.iter().map(|x| _languages.push(x.to_string())).collect::<Vec<_>>();
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:731:9
[INFO] [stdout]     |
[INFO] [stdout] 731 |         database::create_database();
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 731 |         let _ = database::create_database();
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::iter::Iterator::collect` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:737:13
[INFO] [stdout]     |
[INFO] [stdout] 737 |             _words.iter().map(|_word| language_dictionary.add_word(_word)).collect::<Vec<_>>();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you really need to exhaust the iterator, consider `.for_each(drop)` instead
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 737 |             let _ = _words.iter().map(|_word| language_dictionary.add_word(_word)).collect::<Vec<_>>();
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:772:13
[INFO] [stdout]     |
[INFO] [stdout] 772 |             text_file.write_all(text.as_ref().as_bytes());
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 772 |             let _ = text_file.write_all(text.as_ref().as_bytes());
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:819:9
[INFO] [stdout]     |
[INFO] [stdout] 819 |         database::create_database();
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 819 |         let _ = database::create_database();
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:822:13
[INFO] [stdout]     |
[INFO] [stdout] 822 |             Dictionary::new("english", true);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 822 |             let _ = Dictionary::new("english", true);
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:836:9
[INFO] [stdout]     |
[INFO] [stdout] 836 |         database::create_database();
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 836 |         let _ = database::create_database();
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:867:9
[INFO] [stdout]     |
[INFO] [stdout] 867 |         Dictionary::remove_dictionary(language_to_remove);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 867 |         let _ = Dictionary::remove_dictionary(language_to_remove);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::iter::Iterator::collect` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:889:13
[INFO] [stdout]     |
[INFO] [stdout] 889 | ...   temporary_text.normalized_text.to_lowercase().split_ascii_whitespace().map(|_word| expected_set.insert(_word.to_string())).collect::<Vec<_>>...
[INFO] [stdout]     |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you really need to exhaust the iterator, consider `.for_each(drop)` instead
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 889 |             let _ = temporary_text.normalized_text.to_lowercase().split_ascii_whitespace().map(|_word| expected_set.insert(_word.to_string())).collect::<Vec<_>>();
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:903:9
[INFO] [stdout]     |
[INFO] [stdout] 903 |         database::create_database();
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 903 |         let _ = database::create_database();
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::iter::Iterator::collect` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:911:9
[INFO] [stdout]     |
[INFO] [stdout] 911 |         expected_lowercase_content.split_ascii_whitespace().map(|x| expected_set.insert(x)).collect::<Vec<_>>();
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you really need to exhaust the iterator, consider `.for_each(drop)` instead
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 911 |         let _ = expected_lowercase_content.split_ascii_whitespace().map(|x| expected_set.insert(x)).collect::<Vec<_>>();
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:915:13
[INFO] [stdout]     |
[INFO] [stdout] 915 |             dictionary.populate(temporary_text_file.temp_filename.as_path());
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 915 |             let _ = dictionary.populate(temporary_text_file.temp_filename.as_path());
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::iter::Iterator::collect` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:929:13
[INFO] [stdout]     |
[INFO] [stdout] 929 |             test_tuple.2.to_lowercase().split_ascii_whitespace().map(|_word| expected_set.insert(_word.to_string())).collect::<Vec<_>>();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you really need to exhaust the iterator, consider `.for_each(drop)` instead
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 929 |             let _ = test_tuple.2.to_lowercase().split_ascii_whitespace().map(|_word| expected_set.insert(_word.to_string())).collect::<Vec<_>>();
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:945:9
[INFO] [stdout]     |
[INFO] [stdout] 945 |         database::create_database();
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 945 |         let _ = database::create_database();
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::iter::Iterator::collect` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:949:9
[INFO] [stdout]     |
[INFO] [stdout] 949 |         micro_dictionaries[_language].iter().map(|_word| words_to_add.insert(_word.clone())).collect::<Vec<_>>();
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you really need to exhaust the iterator, consider `.for_each(drop)` instead
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 949 |         let _ = micro_dictionaries[_language].iter().map(|_word| words_to_add.insert(_word.clone())).collect::<Vec<_>>();
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/dictionaries.rs:991:9
[INFO] [stdout]     |
[INFO] [stdout] 991 |         database::create_database();
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 991 |         let _ = database::create_database();
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `E` should have a snake case name
[INFO] [stdout]    --> src/attack/simple_attacks.rs:165:25
[INFO] [stdout]     |
[INFO] [stdout] 165 |                     Err(E) => return None
[INFO] [stdout]     |                         ^ help: convert the identifier to snake case: `e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `E` should have a snake case name
[INFO] [stdout]    --> src/attack/substitution.rs:877:21
[INFO] [stdout]     |
[INFO] [stdout] 877 |                 Err(E) => {assert!(false, E); String::new()}
[INFO] [stdout]     |                     ^ help: convert the identifier to snake case: `e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: panic message is not a string literal
[INFO] [stdout]    --> src/attack/substitution.rs:877:43
[INFO] [stdout]     |
[INFO] [stdout] 877 |                 Err(E) => {assert!(false, E); String::new()}
[INFO] [stdout]     |                                           ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this usage of `assert!()` is deprecated; it will be a hard error in Rust 2021
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>
[INFO] [stdout]     = note: `#[warn(non_fmt_panics)]` on by default
[INFO] [stdout] help: add a "{}" format string to `Display` the message
[INFO] [stdout]     |
[INFO] [stdout] 877 |                 Err(E) => {assert!(false, "{}", E); String::new()}
[INFO] [stdout]     |                                           +++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `E` should have a snake case name
[INFO] [stdout]    --> src/attack/substitution.rs:899:21
[INFO] [stdout]     |
[INFO] [stdout] 899 |                 Err(E) => {assert!(false, E); String::new()}
[INFO] [stdout]     |                     ^ help: convert the identifier to snake case: `e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: panic message is not a string literal
[INFO] [stdout]    --> src/attack/substitution.rs:899:43
[INFO] [stdout]     |
[INFO] [stdout] 899 |                 Err(E) => {assert!(false, E); String::new()}
[INFO] [stdout]     |                                           ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this usage of `assert!()` is deprecated; it will be a hard error in Rust 2021
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>
[INFO] [stdout] help: add a "{}" format string to `Display` the message
[INFO] [stdout]     |
[INFO] [stdout] 899 |                 Err(E) => {assert!(false, "{}", E); String::new()}
[INFO] [stdout]     |                                           +++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `E` should have a snake case name
[INFO] [stdout]    --> src/attack/substitution.rs:913:17
[INFO] [stdout]     |
[INFO] [stdout] 913 |             Err(E) => {assert!(false, E); PathBuf::new()}
[INFO] [stdout]     |                 ^ help: convert the identifier to snake case: `e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: panic message is not a string literal
[INFO] [stdout]    --> src/attack/substitution.rs:913:39
[INFO] [stdout]     |
[INFO] [stdout] 913 |             Err(E) => {assert!(false, E); PathBuf::new()}
[INFO] [stdout]     |                                       ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this usage of `assert!()` is deprecated; it will be a hard error in Rust 2021
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>
[INFO] [stdout] help: add a "{}" format string to `Display` the message
[INFO] [stdout]     |
[INFO] [stdout] 913 |             Err(E) => {assert!(false, "{}", E); PathBuf::new()}
[INFO] [stdout]     |                                       +++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `E` should have a snake case name
[INFO] [stdout]    --> src/attack/substitution.rs:918:17
[INFO] [stdout]     |
[INFO] [stdout] 918 |             Err(E) => {assert!(false, E); File::create("/tmp").unwrap()}
[INFO] [stdout]     |                 ^ help: convert the identifier to snake case: `e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: panic message is not a string literal
[INFO] [stdout]    --> src/attack/substitution.rs:918:39
[INFO] [stdout]     |
[INFO] [stdout] 918 |             Err(E) => {assert!(false, E); File::create("/tmp").unwrap()}
[INFO] [stdout]     |                                       ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this usage of `assert!()` is deprecated; it will be a hard error in Rust 2021
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>
[INFO] [stdout] help: add a "{}" format string to `Display` the message
[INFO] [stdout]     |
[INFO] [stdout] 918 |             Err(E) => {assert!(false, "{}", E); File::create("/tmp").unwrap()}
[INFO] [stdout]     |                                       +++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `E` should have a snake case name
[INFO] [stdout]    --> src/attack/substitution.rs:923:17
[INFO] [stdout]     |
[INFO] [stdout] 923 |             Err(E) => {assert!(false, E); ()}
[INFO] [stdout]     |                 ^ help: convert the identifier to snake case: `e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: panic message is not a string literal
[INFO] [stdout]    --> src/attack/substitution.rs:923:39
[INFO] [stdout]     |
[INFO] [stdout] 923 |             Err(E) => {assert!(false, E); ()}
[INFO] [stdout]     |                                       ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this usage of `assert!()` is deprecated; it will be a hard error in Rust 2021
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>
[INFO] [stdout] help: add a "{}" format string to `Display` the message
[INFO] [stdout]     |
[INFO] [stdout] 923 |             Err(E) => {assert!(false, "{}", E); ()}
[INFO] [stdout]     |                                       +++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `E` should have a snake case name
[INFO] [stdout]    --> src/attack/substitution.rs:939:17
[INFO] [stdout]     |
[INFO] [stdout] 939 |             Err(E) => {assert!(false, E); String::new()}
[INFO] [stdout]     |                 ^ help: convert the identifier to snake case: `e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: panic message is not a string literal
[INFO] [stdout]    --> src/attack/substitution.rs:939:39
[INFO] [stdout]     |
[INFO] [stdout] 939 |             Err(E) => {assert!(false, E); String::new()}
[INFO] [stdout]     |                                       ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this usage of `assert!()` is deprecated; it will be a hard error in Rust 2021
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>
[INFO] [stdout] help: add a "{}" format string to `Display` the message
[INFO] [stdout]     |
[INFO] [stdout] 939 |             Err(E) => {assert!(false, "{}", E); String::new()}
[INFO] [stdout]     |                                       +++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `THIS_TEST_CHARSET` should have a snake case name
[INFO] [stdout]     --> src/attack/substitution.rs:1065:13
[INFO] [stdout]      |
[INFO] [stdout] 1065 |         let THIS_TEST_CHARSET = "12345";
[INFO] [stdout]      |             ^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `this_test_charset`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: panic message is not a string literal
[INFO] [stdout]     --> src/attack/substitution.rs:1213:17
[INFO] [stdout]      |
[INFO] [stdout] 1213 |                 format!("Extracted key {} was not among original ones.", &extracted_cipherletter));
[INFO] [stdout]      |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: this usage of `assert!()` is deprecated; it will be a hard error in Rust 2021
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>
[INFO] [stdout]      = note: the `assert!()` macro supports formatting, so there's no need for the `format!()` macro here
[INFO] [stdout] help: remove the `format!(..)` macro call
[INFO] [stdout]      |
[INFO] [stdout] 1213 -                 format!("Extracted key {} was not among original ones.", &extracted_cipherletter));
[INFO] [stdout] 1213 +                 "Extracted key {} was not among original ones.", &extracted_cipherletter);
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: panic message is not a string literal
[INFO] [stdout]     --> src/attack/substitution.rs:1223:17
[INFO] [stdout]      |
[INFO] [stdout] 1223 |                 format!("Extracted cipherletter {} was not removed from mapping", &extracted_cipherletter));
[INFO] [stdout]      |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: this usage of `assert!()` is deprecated; it will be a hard error in Rust 2021
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>
[INFO] [stdout]      = note: the `assert!()` macro supports formatting, so there's no need for the `format!()` macro here
[INFO] [stdout] help: remove the `format!(..)` macro call
[INFO] [stdout]      |
[INFO] [stdout] 1223 -                 format!("Extracted cipherletter {} was not removed from mapping", &extracted_cipherletter));
[INFO] [stdout] 1223 +                 "Extracted cipherletter {} was not removed from mapping", &extracted_cipherletter);
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `E` should have a snake case name
[INFO] [stdout]     --> src/attack/substitution.rs:1229:20
[INFO] [stdout]      |
[INFO] [stdout] 1229 |         if let Err(E) = mapping.pop_item() {
[INFO] [stdout]      |                    ^ help: convert the identifier to snake case: `e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: panic message is not a string literal
[INFO] [stdout]     --> src/attack/substitution.rs:1232:41
[INFO] [stdout]      |
[INFO] [stdout] 1232 |                   error => assert!(false, format!("Raised error was not the one \
[INFO] [stdout]      |  _________________________________________^
[INFO] [stdout] 1233 | |                                           we were expecting but {} instead", error))
[INFO] [stdout]      | |___________________________________________________________________________________^
[INFO] [stdout]      |
[INFO] [stdout]      = note: this usage of `assert!()` is deprecated; it will be a hard error in Rust 2021
[INFO] [stdout]      = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>
[INFO] [stdout]      = note: the `assert!()` macro supports formatting, so there's no need for the `format!()` macro here
[INFO] [stdout] help: remove the `format!(..)` macro call
[INFO] [stdout]      |
[INFO] [stdout] 1232 ~                 error => assert!(false, "Raised error was not the one \
[INFO] [stdout] 1233 ~                                           we were expecting but {} instead", error)
[INFO] [stdout]      |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `item_A` should have a snake case name
[INFO] [stdout]    --> src/attack/frequency.rs:122:34
[INFO] [stdout]     |
[INFO] [stdout] 122 |         values_ordered.sort_by(|&item_A, &item_B| item_B.cmp(item_A));
[INFO] [stdout]     |                                  ^^^^^^ help: convert the identifier to snake case: `item_a`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `item_B` should have a snake case name
[INFO] [stdout]    --> src/attack/frequency.rs:122:43
[INFO] [stdout]     |
[INFO] [stdout] 122 |         values_ordered.sort_by(|&item_A, &item_B| item_B.cmp(item_A));
[INFO] [stdout]     |                                           ^^^^^^ help: convert the identifier to snake case: `item_b`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/frequency.rs:162:9
[INFO] [stdout]     |
[INFO] [stdout] 162 |         ordered_dict_iter.advance_by(self.ordered_dict.len()-width);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 162 |         let _ = ordered_dict_iter.advance_by(self.ordered_dict.len()-width);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/attack/frequency.rs:334:9
[INFO] [stdout]     |
[INFO] [stdout] 334 |         ciphered_stream_iter.advance_by(i);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 334 |         let _ = ciphered_stream_iter.advance_by(i);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `item_A` should have a snake case name
[INFO] [stdout]    --> src/cipher/common.rs:186:25
[INFO] [stdout]     |
[INFO] [stdout] 186 |         items.sort_by(|&item_A, &item_B| item_B.1.cmp(item_A.1));
[INFO] [stdout]     |                         ^^^^^^ help: convert the identifier to snake case: `item_a`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `item_B` should have a snake case name
[INFO] [stdout]    --> src/cipher/common.rs:186:34
[INFO] [stdout]     |
[INFO] [stdout] 186 |         items.sort_by(|&item_A, &item_B| item_B.1.cmp(item_A.1));
[INFO] [stdout]     |                                  ^^^^^^ help: convert the identifier to snake case: `item_b`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `E` should have a snake case name
[INFO] [stdout]    --> src/cipher/substitution.rs:170:17
[INFO] [stdout]     |
[INFO] [stdout] 170 |             Err(E) => {
[INFO] [stdout]     |                 ^ help: convert the identifier to snake case: `e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: panic message is not a string literal
[INFO] [stdout]    --> src/cipher/substitution.rs:171:32
[INFO] [stdout]     |
[INFO] [stdout] 171 |                 assert!(false, format!("Error happened: {}", E))
[INFO] [stdout]     |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this usage of `assert!()` is deprecated; it will be a hard error in Rust 2021
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>
[INFO] [stdout]     = note: the `assert!()` macro supports formatting, so there's no need for the `format!()` macro here
[INFO] [stdout] help: remove the `format!(..)` macro call
[INFO] [stdout]     |
[INFO] [stdout] 171 -                 assert!(false, format!("Error happened: {}", E))
[INFO] [stdout] 171 +                 assert!(false, "Error happened: {}", E)
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `E` should have a snake case name
[INFO] [stdout]    --> src/cipher/substitution.rs:182:17
[INFO] [stdout]     |
[INFO] [stdout] 182 |             Err(E) => {
[INFO] [stdout]     |                 ^ help: convert the identifier to snake case: `e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: panic message is not a string literal
[INFO] [stdout]    --> src/cipher/substitution.rs:183:32
[INFO] [stdout]     |
[INFO] [stdout] 183 |                 assert!(false, format!("Error happened: {}", E))
[INFO] [stdout]     |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this usage of `assert!()` is deprecated; it will be a hard error in Rust 2021
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>
[INFO] [stdout]     = note: the `assert!()` macro supports formatting, so there's no need for the `format!()` macro here
[INFO] [stdout] help: remove the `format!(..)` macro call
[INFO] [stdout]     |
[INFO] [stdout] 183 -                 assert!(false, format!("Error happened: {}", E))
[INFO] [stdout] 183 +                 assert!(false, "Error happened: {}", E)
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `E` should have a snake case name
[INFO] [stdout]    --> src/cipher/substitution.rs:192:20
[INFO] [stdout]     |
[INFO] [stdout] 192 |         if let Err(E) = cipher("", wrong_key, test_charset) {
[INFO] [stdout]     |                    ^ help: convert the identifier to snake case: `e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: panic message is not a string literal
[INFO] [stdout]    --> src/cipher/substitution.rs:195:41
[INFO] [stdout]     |
[INFO] [stdout] 195 |                   error => assert!(false, format!("Raised error was not the one \
[INFO] [stdout]     |  _________________________________________^
[INFO] [stdout] 196 | |                                           we were expecting but {} instead", error))
[INFO] [stdout]     | |___________________________________________________________________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this usage of `assert!()` is deprecated; it will be a hard error in Rust 2021
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>
[INFO] [stdout]     = note: the `assert!()` macro supports formatting, so there's no need for the `format!()` macro here
[INFO] [stdout] help: remove the `format!(..)` macro call
[INFO] [stdout]     |
[INFO] [stdout] 195 ~                 error => assert!(false, "Raised error was not the one \
[INFO] [stdout] 196 ~                                           we were expecting but {} instead", error)
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `E` should have a snake case name
[INFO] [stdout]    --> src/cipher/substitution.rs:205:20
[INFO] [stdout]     |
[INFO] [stdout] 205 |         if let Err(E) = cipher("", wrong_key, test_charset) {
[INFO] [stdout]     |                    ^ help: convert the identifier to snake case: `e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: panic message is not a string literal
[INFO] [stdout]    --> src/cipher/substitution.rs:208:41
[INFO] [stdout]     |
[INFO] [stdout] 208 |                   error => assert!(false, format!("Raised error was not the one \
[INFO] [stdout]     |  _________________________________________^
[INFO] [stdout] 209 | |                                           we were expecting but {} instead", error))
[INFO] [stdout]     | |___________________________________________________________________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this usage of `assert!()` is deprecated; it will be a hard error in Rust 2021
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/panic-macro-consistency.html>
[INFO] [stdout]     = note: the `assert!()` macro supports formatting, so there's no need for the `format!()` macro here
[INFO] [stdout] help: remove the `format!(..)` macro call
[INFO] [stdout]     |
[INFO] [stdout] 208 ~                 error => assert!(false, "Raised error was not the one \
[INFO] [stdout] 209 ~                                           we were expecting but {} instead", error)
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]  --> src/schema.rs:1:1
[INFO] [stdout]   |
[INFO] [stdout] 1 | / table! {
[INFO] [stdout] 2 | |     languages (id) {
[INFO] [stdout] 3 | |         id -> Integer,
[INFO] [stdout] 4 | |         language -> Text,
[INFO] [stdout] 5 | |     }
[INFO] [stdout] 6 | | }
[INFO] [stdout]   | |_^
[INFO] [stdout]   |
[INFO] [stdout]   = help: move this `impl` block outside the of the current function `_impl_query_id_for_table`
[INFO] [stdout]   = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]   = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]   = note: this error originates in the derive macro `QueryId` which comes from the expansion of the macro `table` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]  --> src/schema.rs:1:1
[INFO] [stdout]   |
[INFO] [stdout] 1 | / table! {
[INFO] [stdout] 2 | |     languages (id) {
[INFO] [stdout] 3 | |         id -> Integer,
[INFO] [stdout] 4 | |         language -> Text,
[INFO] [stdout] 5 | |     }
[INFO] [stdout] 6 | | }
[INFO] [stdout]   | |_^
[INFO] [stdout]   |
[INFO] [stdout]   = help: move this `impl` block outside the of the current function `_impl_query_id_for_id`
[INFO] [stdout]   = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]   = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]   = note: this error originates in the derive macro `QueryId` which comes from the expansion of the macro `table` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]  --> src/schema.rs:1:1
[INFO] [stdout]   |
[INFO] [stdout] 1 | / table! {
[INFO] [stdout] 2 | |     languages (id) {
[INFO] [stdout] 3 | |         id -> Integer,
[INFO] [stdout] 4 | |         language -> Text,
[INFO] [stdout] 5 | |     }
[INFO] [stdout] 6 | | }
[INFO] [stdout]   | |_^
[INFO] [stdout]   |
[INFO] [stdout]   = help: move this `impl` block outside the of the current function `_impl_query_id_for_language`
[INFO] [stdout]   = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]   = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]   = note: this error originates in the derive macro `QueryId` which comes from the expansion of the macro `table` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/schema.rs:8:1
[INFO] [stdout]    |
[INFO] [stdout] 8  | / table! {
[INFO] [stdout] 9  | |     words (id) {
[INFO] [stdout] 10 | |         id -> Integer,
[INFO] [stdout] 11 | |         word -> Text,
[INFO] [stdout] ...  |
[INFO] [stdout] 14 | |     }
[INFO] [stdout] 15 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current function `_impl_query_id_for_table`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `QueryId` which comes from the expansion of the macro `table` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/schema.rs:8:1
[INFO] [stdout]    |
[INFO] [stdout] 8  | / table! {
[INFO] [stdout] 9  | |     words (id) {
[INFO] [stdout] 10 | |         id -> Integer,
[INFO] [stdout] 11 | |         word -> Text,
[INFO] [stdout] ...  |
[INFO] [stdout] 14 | |     }
[INFO] [stdout] 15 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current function `_impl_query_id_for_id`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `QueryId` which comes from the expansion of the macro `table` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/schema.rs:8:1
[INFO] [stdout]    |
[INFO] [stdout] 8  | / table! {
[INFO] [stdout] 9  | |     words (id) {
[INFO] [stdout] 10 | |         id -> Integer,
[INFO] [stdout] 11 | |         word -> Text,
[INFO] [stdout] ...  |
[INFO] [stdout] 14 | |     }
[INFO] [stdout] 15 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current function `_impl_query_id_for_word`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `QueryId` which comes from the expansion of the macro `table` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/schema.rs:8:1
[INFO] [stdout]    |
[INFO] [stdout] 8  | / table! {
[INFO] [stdout] 9  | |     words (id) {
[INFO] [stdout] 10 | |         id -> Integer,
[INFO] [stdout] 11 | |         word -> Text,
[INFO] [stdout] ...  |
[INFO] [stdout] 14 | |     }
[INFO] [stdout] 15 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current function `_impl_query_id_for_word_pattern`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `QueryId` which comes from the expansion of the macro `table` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/schema.rs:8:1
[INFO] [stdout]    |
[INFO] [stdout] 8  | / table! {
[INFO] [stdout] 9  | |     words (id) {
[INFO] [stdout] 10 | |         id -> Integer,
[INFO] [stdout] 11 | |         word -> Text,
[INFO] [stdout] ...  |
[INFO] [stdout] 14 | |     }
[INFO] [stdout] 15 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current function `_impl_query_id_for_language_id`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `QueryId` which comes from the expansion of the macro `table` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: aborting due to 15 previous errors; 135 warnings emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `cifra` (lib test) due to 16 previous errors; 135 warnings emitted
[INFO] running `Command { std: "docker" "inspect" "a70427af9425663001da4aae51c2b9e0c5ebffac34363afbb58cd197d6645283", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "a70427af9425663001da4aae51c2b9e0c5ebffac34363afbb58cd197d6645283", kill_on_drop: false }`
[INFO] [stdout] a70427af9425663001da4aae51c2b9e0c5ebffac34363afbb58cd197d6645283
