[INFO] cloning repository https://github.com/Firfi/sstackrr-backend [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Firfi/sstackrr-backend" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FFirfi%2Fsstackrr-backend", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FFirfi%2Fsstackrr-backend'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 5ee2df03974ce0b6a06587d81d093b40f4adfe27 [INFO] linting Firfi/sstackrr-backend against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FFirfi%2Fsstackrr-backend" "/workspace/builds/worker-2-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/Firfi/sstackrr-backend [INFO] finished tweaking git repo https://github.com/Firfi/sstackrr-backend [INFO] tweaked toml for git repo https://github.com/Firfi/sstackrr-backend written to /workspace/builds/worker-2-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/Firfi/sstackrr-backend on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/Firfi/sstackrr-backend 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" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded bytecount v0.6.2 [INFO] [stderr] Downloaded async-graphql-axum v3.0.38 [INFO] [stderr] Downloaded diesel-derive-enum v1.1.2 [INFO] [stderr] Downloaded async-graphql-parser v3.0.38 [INFO] [stderr] Downloaded async-graphql-derive v3.0.38 [INFO] [stderr] Downloaded async-graphql-value v3.0.38 [INFO] [stderr] Downloaded pulldown-cmark v0.9.1 [INFO] [stderr] Downloaded moka v0.8.2 [INFO] [stderr] Downloaded multer v2.0.2 [INFO] [stderr] Downloaded axum v0.5.1 [INFO] [stderr] Downloaded httparse v1.7.0 [INFO] [stderr] Downloaded diesel-derive-newtype v0.1.2 [INFO] [stderr] Downloaded syn v0.14.9 [INFO] [stderr] Downloaded semver v1.0.7 [INFO] [stderr] Downloaded axum-core v0.2.1 [INFO] [stderr] Downloaded async-graphql v3.0.38 [INFO] [stderr] Downloaded quanta v0.9.3 [INFO] [stderr] Downloaded triomphe v0.1.5 [INFO] [stderr] Downloaded strum_macros v0.24.0 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 80acbfa43e7e1329b5825a65214d44a86f6c26cd4f9be3017a6f701f6eba2579 [INFO] running `Command { std: "docker" "start" "-a" "80acbfa43e7e1329b5825a65214d44a86f6c26cd4f9be3017a6f701f6eba2579", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "80acbfa43e7e1329b5825a65214d44a86f6c26cd4f9be3017a6f701f6eba2579", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "80acbfa43e7e1329b5825a65214d44a86f6c26cd4f9be3017a6f701f6eba2579", kill_on_drop: false }` [INFO] [stdout] 80acbfa43e7e1329b5825a65214d44a86f6c26cd4f9be3017a6f701f6eba2579 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 8a4169e78924cd9582a7f69e1c28819b2f92c74a2712c54a921fce544839ecde [INFO] running `Command { std: "docker" "start" "-a" "8a4169e78924cd9582a7f69e1c28819b2f92c74a2712c54a921fce544839ecde", kill_on_drop: false }` [INFO] [stderr] Compiling proc-macro2 v1.0.37 [INFO] [stderr] Compiling syn v1.0.91 [INFO] [stderr] Compiling serde_derive v1.0.136 [INFO] [stderr] Compiling serde v1.0.136 [INFO] [stderr] Compiling libc v0.2.123 [INFO] [stderr] Compiling log v0.4.16 [INFO] [stderr] Checking smallvec v1.8.0 [INFO] [stderr] Compiling futures-core v0.3.21 [INFO] [stderr] Checking pin-project-lite v0.2.8 [INFO] [stderr] Compiling lock_api v0.4.7 [INFO] [stderr] Compiling parking_lot_core v0.9.2 [INFO] [stderr] Checking once_cell v1.10.0 [INFO] [stderr] Compiling futures-task v0.3.21 [INFO] [stderr] Checking futures-sink v0.3.21 [INFO] [stderr] Compiling typenum v1.15.0 [INFO] [stderr] Compiling futures-util v0.3.21 [INFO] [stderr] Checking futures-io v0.3.21 [INFO] [stderr] Compiling generic-array v0.14.5 [INFO] [stderr] Checking slab v0.4.6 [INFO] [stderr] Compiling indexmap v1.8.1 [INFO] [stderr] Compiling httparse v1.7.0 [INFO] [stderr] Compiling crossbeam-utils v0.8.8 [INFO] [stderr] Compiling memoffset v0.6.5 [INFO] [stderr] Checking tracing-core v0.1.26 [INFO] [stderr] Compiling maplit v1.0.2 [INFO] [stderr] Compiling num-traits v0.2.14 [INFO] [stderr] Compiling serde_json v1.0.79 [INFO] [stderr] Checking byteorder v1.4.3 [INFO] [stderr] Compiling pest_meta v2.1.3 [INFO] [stderr] Compiling ryu v1.0.9 [INFO] [stderr] Checking num_cpus v1.13.1 [INFO] [stderr] Checking getrandom v0.2.6 [INFO] [stderr] Checking socket2 v0.4.4 [INFO] [stderr] Checking signal-hook-registry v1.4.0 [INFO] [stderr] Checking mio v0.8.2 [INFO] [stderr] Checking parking_lot_core v0.8.5 [INFO] [stderr] Compiling async-trait v0.1.53 [INFO] [stderr] Checking cpufeatures v0.2.2 [INFO] [stderr] Compiling hashbrown v0.11.2 [INFO] [stderr] Compiling itoa v1.0.1 [INFO] [stderr] Checking parking_lot v0.12.0 [INFO] [stderr] Checking ppv-lite86 v0.2.16 [INFO] [stderr] Checking parking_lot v0.11.2 [INFO] [stderr] Compiling quote v1.0.18 [INFO] [stderr] Compiling crossbeam-epoch v0.9.8 [INFO] [stderr] Checking scheduled-thread-pool v0.2.5 [INFO] [stderr] Checking rand_core v0.6.3 [INFO] [stderr] Compiling proc-macro2 v0.4.30 [INFO] [stderr] Checking rand_chacha v0.3.1 [INFO] [stderr] Compiling pq-sys v0.4.6 [INFO] [stderr] Compiling futures-channel v0.3.21 [INFO] [stderr] Compiling encoding_rs v0.8.31 [INFO] [stderr] Compiling regex v1.5.5 [INFO] [stderr] Compiling multer v2.0.2 [INFO] [stderr] Compiling crossbeam-utils v0.7.2 [INFO] [stderr] Compiling num-integer v0.1.44 [INFO] [stderr] Compiling memoffset v0.5.6 [INFO] [stderr] Compiling rayon-core v1.9.2 [INFO] [stderr] Checking tower-layer v0.3.1 [INFO] [stderr] Checking rand v0.8.5 [INFO] [stderr] Checking want v0.3.0 [INFO] [stderr] Checking r2d2 v0.8.9 [INFO] [stderr] Checking crossbeam-channel v0.5.4 [INFO] [stderr] Compiling crossbeam-epoch v0.8.2 [INFO] [stderr] Checking spin v0.9.2 [INFO] [stderr] Checking fastrand v1.7.0 [INFO] [stderr] Checking http-range-header v0.3.0 [INFO] [stderr] Checking ascii_utils v0.9.3 [INFO] [stderr] Compiling rustversion v1.0.6 [INFO] [stderr] Checking crossbeam-deque v0.8.1 [INFO] [stderr] Checking fast_chemail v0.9.6 [INFO] [stderr] Compiling quote v0.6.13 [INFO] [stderr] Checking tempfile v3.3.0 [INFO] [stderr] Checking raw-cpuid v10.3.0 [INFO] [stderr] Compiling rayon v1.5.2 [INFO] [stderr] Compiling num-bigint v0.4.3 [INFO] [stderr] Checking sync_wrapper v0.1.1 [INFO] [stderr] Compiling heck v0.4.0 [INFO] [stderr] Checking matchit v0.5.0 [INFO] [stderr] Compiling moka v0.8.2 [INFO] [stderr] Compiling syn v0.14.9 [INFO] [stderr] Checking triomphe v0.1.5 [INFO] [stderr] Checking time v0.1.44 [INFO] [stderr] Checking tagptr v0.2.0 [INFO] [stderr] Checking either v1.6.1 [INFO] [stderr] Checking dotenv v0.15.0 [INFO] [stderr] Checking futures-timer v3.0.2 [INFO] [stderr] Checking crypto-common v0.1.3 [INFO] [stderr] Checking block-buffer v0.10.2 [INFO] [stderr] Checking chrono v0.4.19 [INFO] [stderr] Checking digest v0.10.3 [INFO] [stderr] Compiling Inflector v0.11.4 [INFO] [stderr] Checking sha-1 v0.10.0 [INFO] [stderr] Checking quanta v0.9.3 [INFO] [stderr] Compiling pest_generator v2.1.3 [INFO] [stderr] Compiling darling_core v0.13.4 [INFO] [stderr] Compiling tokio-macros v1.7.0 [INFO] [stderr] Compiling futures-macro v0.3.21 [INFO] [stderr] Compiling thiserror-impl v1.0.30 [INFO] [stderr] Compiling tracing-attributes v0.1.20 [INFO] [stderr] Compiling diesel_derives v1.4.1 [INFO] [stderr] Compiling pin-project-internal v1.0.10 [INFO] [stderr] Compiling async-stream-impl v0.3.3 [INFO] [stderr] Compiling strum_macros v0.24.0 [INFO] [stderr] Compiling diesel-derive-enum v1.1.2 [INFO] [stderr] Compiling pest_derive v2.1.0 [INFO] [stderr] Checking async-stream v0.3.3 [INFO] [stderr] Checking pin-project v1.0.10 [INFO] [stderr] Checking tracing v0.1.34 [INFO] [stderr] Checking thiserror v1.0.30 [INFO] [stderr] Compiling darling_macro v0.13.4 [INFO] [stderr] Compiling darling v0.13.4 [INFO] [stderr] Compiling diesel v1.4.8 [INFO] [stderr] Checking bytes v1.1.0 [INFO] [stderr] Checking uuid v0.8.2 [INFO] [stderr] Checking serde_urlencoded v0.7.1 [INFO] [stderr] Checking http v0.2.6 [INFO] [stderr] Checking tokio v1.17.0 [INFO] [stderr] Compiling toml v0.5.9 [INFO] [stderr] Checking async-graphql-value v3.0.38 [INFO] [stderr] Checking async-graphql-parser v3.0.38 [INFO] [stderr] Compiling proc-macro-crate v1.1.3 [INFO] [stderr] Checking http-body v0.4.4 [INFO] [stderr] Checking headers-core v0.2.0 [INFO] [stderr] Checking tungstenite v0.17.2 [INFO] [stderr] Checking headers v0.3.7 [INFO] [stderr] Checking axum-core v0.2.1 [INFO] [stderr] Compiling migrations_internals v1.4.1 [INFO] [stderr] Compiling diesel-derive-newtype v0.1.2 [INFO] [stderr] Compiling migrations_macros v1.4.2 [INFO] [stderr] Compiling async-graphql-derive v3.0.38 [INFO] [stderr] Checking tokio-util v0.7.1 [INFO] [stderr] Checking tokio-tungstenite v0.17.1 [INFO] [stderr] Checking tokio-util v0.6.9 [INFO] [stderr] Checking tokio-stream v0.1.8 [INFO] [stderr] Checking h2 v0.3.13 [INFO] [stderr] Checking tower v0.4.12 [INFO] [stderr] Checking tower-http v0.2.5 [INFO] [stderr] Checking hyper v0.14.18 [INFO] [stderr] Checking async-graphql v3.0.38 [INFO] [stderr] Checking diesel_migrations v1.4.0 [INFO] [stderr] Checking axum v0.5.1 [INFO] [stderr] Checking async-graphql-axum v3.0.38 [INFO] [stderr] Checking sstackrr-backend v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/game.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | use strum_macros; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] = note: `#[warn(clippy::single_component_path_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `fetch_game_state` [INFO] [stdout] --> src/adversary.rs:2:17 [INFO] [stdout] | [INFO] [stdout] 2 | use crate::db::{fetch_game_state}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::cell::Cell` [INFO] [stdout] --> src/adversary_minimax.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use std::cell::Cell; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/adversary_minimax.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::db::GameStateSerialized` [INFO] [stdout] --> src/adversary_minimax.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | use crate::db::GameStateSerialized; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Blue` [INFO] [stdout] --> src/adversary_minimax.rs:155:31 [INFO] [stdout] | [INFO] [stdout] 155 | use crate::game::Player::{Blue, Red}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/game.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | use strum_macros; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] = note: `#[warn(clippy::single_component_path_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `fetch_game_state` [INFO] [stdout] --> src/adversary.rs:2:17 [INFO] [stdout] | [INFO] [stdout] 2 | use crate::db::{fetch_game_state}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::cell::Cell` [INFO] [stdout] --> src/adversary_minimax.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use std::cell::Cell; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/adversary_minimax.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::db::GameStateSerialized` [INFO] [stdout] --> src/adversary_minimax.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | use crate::db::GameStateSerialized; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `field` [INFO] [stdout] --> src/game.rs:82:30 [INFO] [stdout] | [INFO] [stdout] 82 | let (size_x, size_y, field) = (self.size_x, self.size_y, &self.field); [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_field` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `field` [INFO] [stdout] --> src/game.rs:82:30 [INFO] [stdout] | [INFO] [stdout] 82 | let (size_x, size_y, field) = (self.size_x, self.size_y, &self.field); [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_field` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `player` [INFO] [stdout] --> src/adversary.rs:97:20 [INFO] [stdout] | [INFO] [stdout] 97 | Ok(player) => { [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_player` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/adversary_minimax.rs:118:13 [INFO] [stdout] | [INFO] [stdout] 118 | let mut try_game = &mut game.clone(); [INFO] [stdout] | ----^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/adversary_minimax.rs:69:22 [INFO] [stdout] | [INFO] [stdout] 69 | mut alpha: i32, [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/adversary_minimax.rs:76:9 [INFO] [stdout] | [INFO] [stdout] 76 | let mut possible_moves = game.possible_moves(); // so the caller won't trick us with a wrong depth [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/adversary_minimax.rs:96:9 [INFO] [stdout] | [INFO] [stdout] 96 | let mut max = (game.size_x() as i32 * game.size_y() as i32 - 1 - game.current_depth() as i32) / 2; [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/adversary_minimax.rs:114:9 [INFO] [stdout] | [INFO] [stdout] 114 | let mut best_move: Mutex> = Mutex::new(None); [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/adversary_minimax.rs:115:9 [INFO] [stdout] | [INFO] [stdout] 115 | let mut new_alpha: AtomicI32 = AtomicI32::new(alpha.clone()); [INFO] [stdout] | ----^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `player` [INFO] [stdout] --> src/adversary.rs:97:20 [INFO] [stdout] | [INFO] [stdout] 97 | Ok(player) => { [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_player` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/adversary_minimax.rs:118:13 [INFO] [stdout] | [INFO] [stdout] 118 | let mut try_game = &mut game.clone(); [INFO] [stdout] | ----^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/adversary_minimax.rs:69:22 [INFO] [stdout] | [INFO] [stdout] 69 | mut alpha: i32, [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/adversary_minimax.rs:76:9 [INFO] [stdout] | [INFO] [stdout] 76 | let mut possible_moves = game.possible_moves(); // so the caller won't trick us with a wrong depth [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/adversary_minimax.rs:96:9 [INFO] [stdout] | [INFO] [stdout] 96 | let mut max = (game.size_x() as i32 * game.size_y() as i32 - 1 - game.current_depth() as i32) / 2; [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/adversary_minimax.rs:114:9 [INFO] [stdout] | [INFO] [stdout] 114 | let mut best_move: Mutex> = Mutex::new(None); [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/adversary_minimax.rs:115:9 [INFO] [stdout] | [INFO] [stdout] 115 | let mut new_alpha: AtomicI32 = AtomicI32::new(alpha.clone()); [INFO] [stdout] | ----^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `r` [INFO] [stdout] --> src/adversary_minimax.rs:274:13 [INFO] [stdout] | [INFO] [stdout] 274 | let r = minimax(&State::deserialize(&GameStateSerialized(PERFORMANCE_TEST.to_string())).unwrap()); [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_r` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `line_iterators` and `lines` are never used [INFO] [stdout] --> src/game.rs:71:8 [INFO] [stdout] | [INFO] [stdout] 65 | pub trait MatrixOperations { [INFO] [stdout] | ---------------- methods in this trait [INFO] [stdout] ... [INFO] [stdout] 71 | fn line_iterators(&self) -> Vec Vec>>; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 72 | fn lines(&self) -> Vec>>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `is_turn_winning` is never used [INFO] [stdout] --> src/game.rs:138:8 [INFO] [stdout] | [INFO] [stdout] 127 | pub trait GameOperations { [INFO] [stdout] | -------------- method in this trait [INFO] [stdout] ... [INFO] [stdout] 138 | fn is_turn_winning(&self, turn: &Turn) -> bool; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `make_rows_iterator` is never used [INFO] [stdout] --> src/game.rs:142:4 [INFO] [stdout] | [INFO] [stdout] 142 | fn make_rows_iterator(width: u8, height: u8) -> Vec> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `make_columns_iterator` is never used [INFO] [stdout] --> src/game.rs:154:4 [INFO] [stdout] | [INFO] [stdout] 154 | fn make_columns_iterator(width: u8, height: u8) -> Vec> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `make_diagonal_l_iterator` is never used [INFO] [stdout] --> src/game.rs:166:4 [INFO] [stdout] | [INFO] [stdout] 166 | fn make_diagonal_l_iterator(width: u8, height: u8) -> Vec> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `make_diagonal_r_iterator` is never used [INFO] [stdout] --> src/game.rs:181:4 [INFO] [stdout] | [INFO] [stdout] 181 | fn make_diagonal_r_iterator(width: u8, height: u8) -> Vec> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `expectimax` is never used [INFO] [stdout] --> src/adversary_minimax.rs:22:4 [INFO] [stdout] | [INFO] [stdout] 22 | fn expectimax(game: &State, player: Player) -> i32 { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/game.rs:71:33 [INFO] [stdout] | [INFO] [stdout] 71 | fn line_iterators(&self) -> Vec Vec>>; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Option` which implements the `Copy` trait [INFO] [stdout] --> src/game.rs:86:20 [INFO] [stdout] | [INFO] [stdout] 86 | let cell = self.field[self.calc_field_index(x, y) as usize].clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.field[self.calc_field_index(x, y) as usize]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `i8` which implements the `Copy` trait [INFO] [stdout] --> src/game.rs:250:48 [INFO] [stdout] | [INFO] [stdout] 250 | if self.validate_turn((player, y.clone() as u8, s.clone())).is_ok() { [INFO] [stdout] | ^^^^^^^^^ help: try removing the `clone` call: `y` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Side` which implements the `Copy` trait [INFO] [stdout] --> src/game.rs:250:65 [INFO] [stdout] | [INFO] [stdout] 250 | if self.validate_turn((player, y.clone() as u8, s.clone())).is_ok() { [INFO] [stdout] | ^^^^^^^^^ help: try removing the `clone` call: `s` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `(Player, u8, Side)` which implements the `Copy` trait [INFO] [stdout] --> src/game.rs:258:38 [INFO] [stdout] | [INFO] [stdout] 258 | let (player, height, side) = turn.clone(); [INFO] [stdout] | ^^^^^^^^^^^^ help: try dereferencing it: `*turn` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this block may be rewritten with the `?` operator [INFO] [stdout] --> src/game.rs:282:9 [INFO] [stdout] | [INFO] [stdout] 282 | / if last_move_.is_none() { [INFO] [stdout] 283 | | return Cell::None; [INFO] [stdout] 284 | | } [INFO] [stdout] | |_________^ help: replace it with: `last_move_?;` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stdout] = note: `#[warn(clippy::question_mark)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/game.rs:297:13 [INFO] [stdout] | [INFO] [stdout] 297 | / return if next_lc_player_me { [INFO] [stdout] 298 | | check_line(state, player, &next_lc.unwrap(), &rc, acc + 1, lplus, rplus) [INFO] [stdout] 299 | | } else if next_rc_player_me { [INFO] [stdout] 300 | | check_line(state, player, &lc, &next_rc.unwrap(), acc + 1, lplus, rplus) [INFO] [stdout] 301 | | } else { [INFO] [stdout] 302 | | false [INFO] [stdout] 303 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 297 ~ if next_lc_player_me { [INFO] [stdout] 298 + check_line(state, player, &next_lc.unwrap(), &rc, acc + 1, lplus, rplus) [INFO] [stdout] 299 + } else if next_rc_player_me { [INFO] [stdout] 300 + check_line(state, player, &lc, &next_rc.unwrap(), acc + 1, lplus, rplus) [INFO] [stdout] 301 + } else { [INFO] [stdout] 302 + false [INFO] [stdout] 303 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/game.rs:298:62 [INFO] [stdout] | [INFO] [stdout] 298 | check_line(state, player, &next_lc.unwrap(), &rc, acc + 1, lplus, rplus) [INFO] [stdout] | ^^^ help: change this to: `rc` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `is_turn_winning` is never used [INFO] [stdout] --> src/game.rs:138:8 [INFO] [stdout] | [INFO] [stdout] 127 | pub trait GameOperations { [INFO] [stdout] | -------------- method in this trait [INFO] [stdout] ... [INFO] [stdout] 138 | fn is_turn_winning(&self, turn: &Turn) -> bool; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/game.rs:300:43 [INFO] [stdout] | [INFO] [stdout] 300 | check_line(state, player, &lc, &next_rc.unwrap(), acc + 1, lplus, rplus) [INFO] [stdout] | ^^^ help: change this to: `lc` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/game.rs:311:90 [INFO] [stdout] | [INFO] [stdout] 311 | ... let horizontal_adders = (|c: &Coords| checked_coords((c.0 as i8 - 1, c.1 as i8), &self), |c: &Coords| checked_coords((c.0 as ... [INFO] [stdout] | ^^^^^ help: change this to: `self` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/game.rs:311:154 [INFO] [stdout] | [INFO] [stdout] 311 | ...ds| checked_coords((c.0 as i8 + 1, c.1 as i8), &self)); [INFO] [stdout] | ^^^^^ help: change this to: `self` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/game.rs:312:88 [INFO] [stdout] | [INFO] [stdout] 312 | ... let vertical_adders = (|c: &Coords| checked_coords((c.0 as i8, c.1 as i8 - 1), &self), |c: &Coords| checked_coords((c.0 as i8... [INFO] [stdout] | ^^^^^ help: change this to: `self` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/game.rs:312:152 [INFO] [stdout] | [INFO] [stdout] 312 | ...ds| checked_coords((c.0 as i8, c.1 as i8 + 1), &self)); [INFO] [stdout] | ^^^^^ help: change this to: `self` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/game.rs:313:92 [INFO] [stdout] | [INFO] [stdout] 313 | ... let diag_l_r_adders = (|c: &Coords| checked_coords((c.0 as i8 - 1, c.1 as i8 + 1), &self), |c: &Coords| checked_coords((c.0 a... [INFO] [stdout] | ^^^^^ help: change this to: `self` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/game.rs:313:160 [INFO] [stdout] | [INFO] [stdout] 313 | ...checked_coords((c.0 as i8 + 1, c.1 as i8 - 1), &self)); [INFO] [stdout] | ^^^^^ help: change this to: `self` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/game.rs:314:92 [INFO] [stdout] | [INFO] [stdout] 314 | ... let diag_r_l_adders = (|c: &Coords| checked_coords((c.0 as i8 - 1, c.1 as i8 - 1), &self), |c: &Coords| checked_coords((c.0 a... [INFO] [stdout] | ^^^^^ help: change this to: `self` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/game.rs:314:160 [INFO] [stdout] | [INFO] [stdout] 314 | ...checked_coords((c.0 as i8 + 1, c.1 as i8 + 1), &self)); [INFO] [stdout] | ^^^^^ help: change this to: `self` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/game.rs:315:18 [INFO] [stdout] | [INFO] [stdout] 315 | let fns: Vec<(Box Option>, Box Option>)> = vec![ [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/game.rs:323:27 [INFO] [stdout] | [INFO] [stdout] 323 | if check_line(&self, self.last_player().unwrap(), &last_move, &last_move, 1, &**l, &**r) { [INFO] [stdout] | ^^^^^ help: change this to: `self` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/game.rs:323:63 [INFO] [stdout] | [INFO] [stdout] 323 | if check_line(&self, self.last_player().unwrap(), &last_move, &last_move, 1, &**l, &**r) { [INFO] [stdout] | ^^^^^^^^^^ help: change this to: `last_move` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/game.rs:323:75 [INFO] [stdout] | [INFO] [stdout] 323 | if check_line(&self, self.last_player().unwrap(), &last_move, &last_move, 1, &**l, &**r) { [INFO] [stdout] | ^^^^^^^^^^ help: change this to: `last_move` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/game.rs:333:36 [INFO] [stdout] | [INFO] [stdout] 333 | fn validate_continuous(v: &Vec>) -> Result, String> { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 333 - fn validate_continuous(v: &Vec>) -> Result, String> { [INFO] [stdout] 333 + fn validate_continuous(v: &[Option]) -> Result, String> { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/game.rs:334:8 [INFO] [stdout] | [INFO] [stdout] 334 | if v.len() == 0 { return Ok(vec![]); } [INFO] [stdout] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `v.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/game.rs:344:38 [INFO] [stdout] | [INFO] [stdout] 344 | fn validate_serialized_dimensions(s: &String) -> Result<(u8, u8), String> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 344 - fn validate_serialized_dimensions(s: &String) -> Result<(u8, u8), String> { [INFO] [stdout] 344 + fn validate_serialized_dimensions(s: &str) -> Result<(u8, u8), String> { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/game.rs:345:8 [INFO] [stdout] | [INFO] [stdout] 345 | if s.len() == 0 { return Err("empty game?".into()); } [INFO] [stdout] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `s.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/game.rs:353:24 [INFO] [stdout] | [INFO] [stdout] 353 | return Err(format!("invalid dimensions for one of the rows, expected {}, got {}", width, len).into()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `format!("invalid dimensions for one of the rows, expected {}, got {}", width, len)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/game.rs:366:61 [INFO] [stdout] | [INFO] [stdout] 366 | for (x, sturn) in split_row(line.trim()).filter(|x| x.len() != 0).enumerate() { [INFO] [stdout] | ^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!x.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/game.rs:71:33 [INFO] [stdout] | [INFO] [stdout] 71 | fn line_iterators(&self) -> Vec Vec>>; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/game.rs:388:9 [INFO] [stdout] | [INFO] [stdout] 388 | / ... return GameStateSerialized(field.chunks(self.size_x as usize).map(|x| x.iter().map(|n|n.to_string()).collect::>... [INFO] [stdout] 389 | | ... .collect::>().join(SERIALIZATION_ROW_SEPARATOR)); [INFO] [stdout] | |______________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 388 ~ GameStateSerialized(field.chunks(self.size_x as usize).map(|x| x.iter().map(|n|n.to_string()).collect::>().join(SERIALIZATION_COL_SEPARATOR)) [INFO] [stdout] 389 ~ .collect::>().join(SERIALIZATION_ROW_SEPARATOR)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/game.rs:397:9 [INFO] [stdout] | [INFO] [stdout] 397 | / return field.chunks(self.size_x as usize).map(|x| x.iter().map(|n| (match n { [INFO] [stdout] 398 | | Some(Blue) => "B", [INFO] [stdout] 399 | | Some(Red) => "R", [INFO] [stdout] 400 | | None => "_", [INFO] [stdout] 401 | | }).to_string()).collect::>().join(SERIALIZATION_COL_SEPARATOR)) [INFO] [stdout] 402 | | .collect::>().join(SERIALIZATION_ROW_SEPARATOR); [INFO] [stdout] | |_______________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 397 ~ field.chunks(self.size_x as usize).map(|x| x.iter().map(|n| (match n { [INFO] [stdout] 398 + Some(Blue) => "B", [INFO] [stdout] 399 + Some(Red) => "R", [INFO] [stdout] 400 + None => "_", [INFO] [stdout] 401 + }).to_string()).collect::>().join(SERIALIZATION_COL_SEPARATOR)) [INFO] [stdout] 402 ~ .collect::>().join(SERIALIZATION_ROW_SEPARATOR) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `(u8, u8)` which implements the `Copy` trait [INFO] [stdout] --> src/game.rs:409:39 [INFO] [stdout] | [INFO] [stdout] 409 | state.coords_history.push(coords.clone()); [INFO] [stdout] | ^^^^^^^^^^^^^^ help: try dereferencing it: `*coords` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Player` which implements the `Copy` trait [INFO] [stdout] --> src/game.rs:411:48 [INFO] [stdout] | [INFO] [stdout] 411 | state.field[index as usize] = Some(player.clone()); [INFO] [stdout] | ^^^^^^^^^^^^^^ help: try dereferencing it: `*player` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Option` which implements the `Copy` trait [INFO] [stdout] --> src/game.rs:420:57 [INFO] [stdout] | [INFO] [stdout] 420 | res[coords.1 as usize][coords.0 as usize] = cell.clone(); [INFO] [stdout] | ^^^^^^^^^^^^ help: try dereferencing it: `*cell` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: needlessly taken reference of both operands [INFO] [stdout] --> src/game.rs:432:12 [INFO] [stdout] | [INFO] [stdout] 432 | if &self.next_player()? != &turn.0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stdout] = note: `#[warn(clippy::op_ref)]` on by default [INFO] [stdout] help: use the values directly [INFO] [stdout] | [INFO] [stdout] 432 - if &self.next_player()? != &turn.0 { [INFO] [stdout] 432 + if self.next_player()? != turn.0 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Side` which implements the `Copy` trait [INFO] [stdout] --> src/game.rs:435:43 [INFO] [stdout] | [INFO] [stdout] 435 | let next = self.next_cell_towards(turn.2.clone(), turn.1 as u8)?; [INFO] [stdout] | ^^^^^^^^^^^^^^ help: try removing the `clone` call: `turn.2` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/game.rs:435:59 [INFO] [stdout] | [INFO] [stdout] 435 | let next = self.next_cell_towards(turn.2.clone(), turn.1 as u8)?; [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `turn.1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded unit return type [INFO] [stdout] --> src/game.rs:446:32 [INFO] [stdout] | [INFO] [stdout] 446 | fn update_winner(&mut self) -> () { [INFO] [stdout] | ^^^^^^ help: remove the `-> ()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stdout] = note: `#[warn(clippy::unused_unit)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Side` which implements the `Copy` trait [INFO] [stdout] --> src/game.rs:451:43 [INFO] [stdout] | [INFO] [stdout] 451 | let next = self.next_cell_towards(turn.2.clone(), turn.1 as u8)?; [INFO] [stdout] | ^^^^^^^^^^^^^^ help: try removing the `clone` call: `turn.2` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/game.rs:451:59 [INFO] [stdout] | [INFO] [stdout] 451 | let next = self.next_cell_towards(turn.2.clone(), turn.1 as u8)?; [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `turn.1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `u8` which implements the `Copy` trait [INFO] [stdout] --> src/game.rs:455:44 [INFO] [stdout] | [INFO] [stdout] 455 | let index = self.calc_field_index(next_.0.clone(), next_.1.clone()) as usize; [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try removing the `clone` call: `next_.0` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `u8` which implements the `Copy` trait [INFO] [stdout] --> src/game.rs:455:61 [INFO] [stdout] | [INFO] [stdout] 455 | let index = self.calc_field_index(next_.0.clone(), next_.1.clone()) as usize; [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try removing the `clone` call: `next_.1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Option` which implements the `Copy` trait [INFO] [stdout] --> src/game.rs:86:20 [INFO] [stdout] | [INFO] [stdout] 86 | let cell = self.field[self.calc_field_index(x, y) as usize].clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.field[self.calc_field_index(x, y) as usize]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `i8` which implements the `Copy` trait [INFO] [stdout] --> src/game.rs:250:48 [INFO] [stdout] | [INFO] [stdout] 250 | if self.validate_turn((player, y.clone() as u8, s.clone())).is_ok() { [INFO] [stdout] | ^^^^^^^^^ help: try removing the `clone` call: `y` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Side` which implements the `Copy` trait [INFO] [stdout] --> src/game.rs:250:65 [INFO] [stdout] | [INFO] [stdout] 250 | if self.validate_turn((player, y.clone() as u8, s.clone())).is_ok() { [INFO] [stdout] | ^^^^^^^^^ help: try removing the `clone` call: `s` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `(Player, u8, Side)` which implements the `Copy` trait [INFO] [stdout] --> src/game.rs:258:38 [INFO] [stdout] | [INFO] [stdout] 258 | let (player, height, side) = turn.clone(); [INFO] [stdout] | ^^^^^^^^^^^^ help: try dereferencing it: `*turn` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this block may be rewritten with the `?` operator [INFO] [stdout] --> src/game.rs:282:9 [INFO] [stdout] | [INFO] [stdout] 282 | / if last_move_.is_none() { [INFO] [stdout] 283 | | return Cell::None; [INFO] [stdout] 284 | | } [INFO] [stdout] | |_________^ help: replace it with: `last_move_?;` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stdout] = note: `#[warn(clippy::question_mark)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/game.rs:297:13 [INFO] [stdout] | [INFO] [stdout] 297 | / return if next_lc_player_me { [INFO] [stdout] 298 | | check_line(state, player, &next_lc.unwrap(), &rc, acc + 1, lplus, rplus) [INFO] [stdout] 299 | | } else if next_rc_player_me { [INFO] [stdout] 300 | | check_line(state, player, &lc, &next_rc.unwrap(), acc + 1, lplus, rplus) [INFO] [stdout] 301 | | } else { [INFO] [stdout] 302 | | false [INFO] [stdout] 303 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 297 ~ if next_lc_player_me { [INFO] [stdout] 298 + check_line(state, player, &next_lc.unwrap(), &rc, acc + 1, lplus, rplus) [INFO] [stdout] 299 + } else if next_rc_player_me { [INFO] [stdout] 300 + check_line(state, player, &lc, &next_rc.unwrap(), acc + 1, lplus, rplus) [INFO] [stdout] 301 + } else { [INFO] [stdout] 302 + false [INFO] [stdout] 303 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/game.rs:298:62 [INFO] [stdout] | [INFO] [stdout] 298 | check_line(state, player, &next_lc.unwrap(), &rc, acc + 1, lplus, rplus) [INFO] [stdout] | ^^^ help: change this to: `rc` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/game.rs:300:43 [INFO] [stdout] | [INFO] [stdout] 300 | check_line(state, player, &lc, &next_rc.unwrap(), acc + 1, lplus, rplus) [INFO] [stdout] | ^^^ help: change this to: `lc` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/game.rs:311:90 [INFO] [stdout] | [INFO] [stdout] 311 | ... let horizontal_adders = (|c: &Coords| checked_coords((c.0 as i8 - 1, c.1 as i8), &self), |c: &Coords| checked_coords((c.0 as ... [INFO] [stdout] | ^^^^^ help: change this to: `self` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/game.rs:311:154 [INFO] [stdout] | [INFO] [stdout] 311 | ...ds| checked_coords((c.0 as i8 + 1, c.1 as i8), &self)); [INFO] [stdout] | ^^^^^ help: change this to: `self` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/game.rs:312:88 [INFO] [stdout] | [INFO] [stdout] 312 | ... let vertical_adders = (|c: &Coords| checked_coords((c.0 as i8, c.1 as i8 - 1), &self), |c: &Coords| checked_coords((c.0 as i8... [INFO] [stdout] | ^^^^^ help: change this to: `self` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/game.rs:312:152 [INFO] [stdout] | [INFO] [stdout] 312 | ...ds| checked_coords((c.0 as i8, c.1 as i8 + 1), &self)); [INFO] [stdout] | ^^^^^ help: change this to: `self` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/game.rs:313:92 [INFO] [stdout] | [INFO] [stdout] 313 | ... let diag_l_r_adders = (|c: &Coords| checked_coords((c.0 as i8 - 1, c.1 as i8 + 1), &self), |c: &Coords| checked_coords((c.0 a... [INFO] [stdout] | ^^^^^ help: change this to: `self` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/game.rs:313:160 [INFO] [stdout] | [INFO] [stdout] 313 | ...checked_coords((c.0 as i8 + 1, c.1 as i8 - 1), &self)); [INFO] [stdout] | ^^^^^ help: change this to: `self` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/game.rs:314:92 [INFO] [stdout] | [INFO] [stdout] 314 | ... let diag_r_l_adders = (|c: &Coords| checked_coords((c.0 as i8 - 1, c.1 as i8 - 1), &self), |c: &Coords| checked_coords((c.0 a... [INFO] [stdout] | ^^^^^ help: change this to: `self` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/game.rs:314:160 [INFO] [stdout] | [INFO] [stdout] 314 | ...checked_coords((c.0 as i8 + 1, c.1 as i8 + 1), &self)); [INFO] [stdout] | ^^^^^ help: change this to: `self` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/game.rs:315:18 [INFO] [stdout] | [INFO] [stdout] 315 | let fns: Vec<(Box Option>, Box Option>)> = vec![ [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/game.rs:323:27 [INFO] [stdout] | [INFO] [stdout] 323 | if check_line(&self, self.last_player().unwrap(), &last_move, &last_move, 1, &**l, &**r) { [INFO] [stdout] | ^^^^^ help: change this to: `self` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/game.rs:323:63 [INFO] [stdout] | [INFO] [stdout] 323 | if check_line(&self, self.last_player().unwrap(), &last_move, &last_move, 1, &**l, &**r) { [INFO] [stdout] | ^^^^^^^^^^ help: change this to: `last_move` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/game.rs:323:75 [INFO] [stdout] | [INFO] [stdout] 323 | if check_line(&self, self.last_player().unwrap(), &last_move, &last_move, 1, &**l, &**r) { [INFO] [stdout] | ^^^^^^^^^^ help: change this to: `last_move` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/game.rs:333:36 [INFO] [stdout] | [INFO] [stdout] 333 | fn validate_continuous(v: &Vec>) -> Result, String> { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 333 - fn validate_continuous(v: &Vec>) -> Result, String> { [INFO] [stdout] 333 + fn validate_continuous(v: &[Option]) -> Result, String> { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/game.rs:334:8 [INFO] [stdout] | [INFO] [stdout] 334 | if v.len() == 0 { return Ok(vec![]); } [INFO] [stdout] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `v.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/game.rs:344:38 [INFO] [stdout] | [INFO] [stdout] 344 | fn validate_serialized_dimensions(s: &String) -> Result<(u8, u8), String> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 344 - fn validate_serialized_dimensions(s: &String) -> Result<(u8, u8), String> { [INFO] [stdout] 344 + fn validate_serialized_dimensions(s: &str) -> Result<(u8, u8), String> { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/game.rs:345:8 [INFO] [stdout] | [INFO] [stdout] 345 | if s.len() == 0 { return Err("empty game?".into()); } [INFO] [stdout] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `s.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/game.rs:353:24 [INFO] [stdout] | [INFO] [stdout] 353 | return Err(format!("invalid dimensions for one of the rows, expected {}, got {}", width, len).into()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `format!("invalid dimensions for one of the rows, expected {}, got {}", width, len)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/game.rs:366:61 [INFO] [stdout] | [INFO] [stdout] 366 | for (x, sturn) in split_row(line.trim()).filter(|x| x.len() != 0).enumerate() { [INFO] [stdout] | ^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!x.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/game.rs:388:9 [INFO] [stdout] | [INFO] [stdout] 388 | / ... return GameStateSerialized(field.chunks(self.size_x as usize).map(|x| x.iter().map(|n|n.to_string()).collect::>... [INFO] [stdout] 389 | | ... .collect::>().join(SERIALIZATION_ROW_SEPARATOR)); [INFO] [stdout] | |______________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 388 ~ GameStateSerialized(field.chunks(self.size_x as usize).map(|x| x.iter().map(|n|n.to_string()).collect::>().join(SERIALIZATION_COL_SEPARATOR)) [INFO] [stdout] 389 ~ .collect::>().join(SERIALIZATION_ROW_SEPARATOR)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/game.rs:397:9 [INFO] [stdout] | [INFO] [stdout] 397 | / return field.chunks(self.size_x as usize).map(|x| x.iter().map(|n| (match n { [INFO] [stdout] 398 | | Some(Blue) => "B", [INFO] [stdout] 399 | | Some(Red) => "R", [INFO] [stdout] 400 | | None => "_", [INFO] [stdout] 401 | | }).to_string()).collect::>().join(SERIALIZATION_COL_SEPARATOR)) [INFO] [stdout] 402 | | .collect::>().join(SERIALIZATION_ROW_SEPARATOR); [INFO] [stdout] | |_______________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 397 ~ field.chunks(self.size_x as usize).map(|x| x.iter().map(|n| (match n { [INFO] [stdout] 398 + Some(Blue) => "B", [INFO] [stdout] 399 + Some(Red) => "R", [INFO] [stdout] 400 + None => "_", [INFO] [stdout] 401 + }).to_string()).collect::>().join(SERIALIZATION_COL_SEPARATOR)) [INFO] [stdout] 402 ~ .collect::>().join(SERIALIZATION_ROW_SEPARATOR) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `(u8, u8)` which implements the `Copy` trait [INFO] [stdout] --> src/game.rs:409:39 [INFO] [stdout] | [INFO] [stdout] 409 | state.coords_history.push(coords.clone()); [INFO] [stdout] | ^^^^^^^^^^^^^^ help: try dereferencing it: `*coords` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Player` which implements the `Copy` trait [INFO] [stdout] --> src/game.rs:411:48 [INFO] [stdout] | [INFO] [stdout] 411 | state.field[index as usize] = Some(player.clone()); [INFO] [stdout] | ^^^^^^^^^^^^^^ help: try dereferencing it: `*player` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Option` which implements the `Copy` trait [INFO] [stdout] --> src/game.rs:420:57 [INFO] [stdout] | [INFO] [stdout] 420 | res[coords.1 as usize][coords.0 as usize] = cell.clone(); [INFO] [stdout] | ^^^^^^^^^^^^ help: try dereferencing it: `*cell` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: needlessly taken reference of both operands [INFO] [stdout] --> src/game.rs:432:12 [INFO] [stdout] | [INFO] [stdout] 432 | if &self.next_player()? != &turn.0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stdout] = note: `#[warn(clippy::op_ref)]` on by default [INFO] [stdout] help: use the values directly [INFO] [stdout] | [INFO] [stdout] 432 - if &self.next_player()? != &turn.0 { [INFO] [stdout] 432 + if self.next_player()? != turn.0 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Side` which implements the `Copy` trait [INFO] [stdout] --> src/game.rs:435:43 [INFO] [stdout] | [INFO] [stdout] 435 | let next = self.next_cell_towards(turn.2.clone(), turn.1 as u8)?; [INFO] [stdout] | ^^^^^^^^^^^^^^ help: try removing the `clone` call: `turn.2` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/game.rs:435:59 [INFO] [stdout] | [INFO] [stdout] 435 | let next = self.next_cell_towards(turn.2.clone(), turn.1 as u8)?; [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `turn.1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded unit return type [INFO] [stdout] --> src/game.rs:446:32 [INFO] [stdout] | [INFO] [stdout] 446 | fn update_winner(&mut self) -> () { [INFO] [stdout] | ^^^^^^ help: remove the `-> ()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stdout] = note: `#[warn(clippy::unused_unit)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Side` which implements the `Copy` trait [INFO] [stdout] --> src/game.rs:451:43 [INFO] [stdout] | [INFO] [stdout] 451 | let next = self.next_cell_towards(turn.2.clone(), turn.1 as u8)?; [INFO] [stdout] | ^^^^^^^^^^^^^^ help: try removing the `clone` call: `turn.2` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/game.rs:451:59 [INFO] [stdout] | [INFO] [stdout] 451 | let next = self.next_cell_towards(turn.2.clone(), turn.1 as u8)?; [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `turn.1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `u8` which implements the `Copy` trait [INFO] [stdout] --> src/game.rs:455:44 [INFO] [stdout] | [INFO] [stdout] 455 | let index = self.calc_field_index(next_.0.clone(), next_.1.clone()) as usize; [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try removing the `clone` call: `next_.0` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `u8` which implements the `Copy` trait [INFO] [stdout] --> src/game.rs:455:61 [INFO] [stdout] | [INFO] [stdout] 455 | let index = self.calc_field_index(next_.0.clone(), next_.1.clone()) as usize; [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try removing the `clone` call: `next_.1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/db.rs:143:16 [INFO] [stdout] | [INFO] [stdout] 143 | if !game.player_red.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `game.player_red.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/db.rs:154:16 [INFO] [stdout] | [INFO] [stdout] 154 | if !game.player_blue.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `game.player_blue.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling `push_str()` using a single-character string literal [INFO] [stdout] --> src/db_schema.rs:68:9 [INFO] [stdout] | [INFO] [stdout] 68 | res.push_str("\n"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `res.push('\n')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_add_str [INFO] [stdout] = note: `#[warn(clippy::single_char_add_str)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `RANDY` contains a capitalized acronym [INFO] [stdout] --> src/adversary.rs:13:5 [INFO] [stdout] | [INFO] [stdout] 13 | RANDY, SMART [INFO] [stdout] | ^^^^^ help: consider making the acronym lowercase, except the initial letter: `Randy` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] = note: `#[warn(clippy::upper_case_acronyms)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `SMART` contains a capitalized acronym [INFO] [stdout] --> src/adversary.rs:13:12 [INFO] [stdout] | [INFO] [stdout] 13 | RANDY, SMART [INFO] [stdout] | ^^^^^ help: consider making the acronym lowercase, except the initial letter: `Smart` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/adversary.rs:56:5 [INFO] [stdout] | [INFO] [stdout] 56 | return true; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 56 - return true; [INFO] [stdout] 56 + true [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `filter` for `Some` followed by `unwrap` [INFO] [stdout] --> src/adversary.rs:35:99 [INFO] [stdout] | [INFO] [stdout] 35 | ...f()].into_iter().filter(|p| p.is_some()).map(|p| p.unwrap()).collect::>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `flatten` instead: `flatten()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_filter_map [INFO] [stdout] = note: `#[warn(clippy::option_filter_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/adversary.rs:47:13 [INFO] [stdout] | [INFO] [stdout] 47 | db_game.player_red == None [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `db_game.player_red.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] = note: `#[warn(clippy::partialeq_to_none)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/adversary.rs:50:13 [INFO] [stdout] | [INFO] [stdout] 50 | db_game.player_blue == None [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `db_game.player_blue.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/adversary.rs:75:13 [INFO] [stdout] | [INFO] [stdout] 75 | return; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 74 ~ None => { [INFO] [stdout] 75 | } [INFO] [stdout] 76 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `adversary::BotId` [INFO] [stdout] --> src/adversary.rs:63:18 [INFO] [stdout] | [INFO] [stdout] 63 | let bot_id = BotId::try_from(db_game.bot_id.clone().unwrap()).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider removing `BotId::try_from()` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Option` which implements the `Copy` trait [INFO] [stdout] --> src/adversary.rs:63:34 [INFO] [stdout] | [INFO] [stdout] 63 | let bot_id = BotId::try_from(db_game.bot_id.clone().unwrap()).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `db_game.bot_id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/adversary.rs:93:13 [INFO] [stdout] | [INFO] [stdout] 93 | / return match game.next_player() { [INFO] [stdout] 94 | | Err(_) => { [INFO] [stdout] 95 | | None [INFO] [stdout] ... | [INFO] [stdout] 108 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 93 ~ match game.next_player() { [INFO] [stdout] 94 + Err(_) => { [INFO] [stdout] 95 + None [INFO] [stdout] 96 + } [INFO] [stdout] 97 + Ok(player) => { [INFO] [stdout] 98 + // first 2 turns are for Randy [INFO] [stdout] 99 + if game.current_depth() < 2 { [INFO] [stdout] 100 + randy(game) [INFO] [stdout] 101 + } else if game.depth_left() > MINMAX_DEPTH_RESTRICTION { [INFO] [stdout] 102 + randy(game) [INFO] [stdout] 103 + } else { [INFO] [stdout] 104 + minimax(&mut game.clone()) [INFO] [stdout] 105 + } [INFO] [stdout] 106 + [INFO] [stdout] 107 + } [INFO] [stdout] 108 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> src/adversary.rs:99:49 [INFO] [stdout] | [INFO] [stdout] 99 | if game.current_depth() < 2 { [INFO] [stdout] | _________________________________________________^ [INFO] [stdout] 100 | | randy(game) [INFO] [stdout] 101 | | } else if game.depth_left() > MINMAX_DEPTH_RESTRICTION { [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/adversary.rs:101:76 [INFO] [stdout] | [INFO] [stdout] 101 | } else if game.depth_left() > MINMAX_DEPTH_RESTRICTION { [INFO] [stdout] | ____________________________________________________________________________^ [INFO] [stdout] 102 | | randy(game) [INFO] [stdout] 103 | | } else { [INFO] [stdout] | |_____________________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stdout] = note: `#[warn(clippy::if_same_then_else)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the function `minimax` doesn't need a mutable reference [INFO] [stdout] --> src/adversary.rs:104:33 [INFO] [stdout] | [INFO] [stdout] 104 | minimax(&mut game.clone()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stdout] = note: `#[warn(clippy::unnecessary_mut_passed)]` on by default [INFO] [stdout] help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] 104 - minimax(&mut game.clone()) [INFO] [stdout] 104 + minimax(&game.clone()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this multiplication by -1 can be written more succinctly [INFO] [stdout] --> src/adversary_minimax.rs:18:113 [INFO] [stdout] | [INFO] [stdout] 18 | ...mut hm), if weak { -1 } else { game.size_x() as i32 * game.size_y() as i32 / 2 * -1 }, if weak { 1 } else { game.size_x() as i32 ... [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `-(game.size_x() as i32 * game.size_y() as i32 / 2)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#neg_multiply [INFO] [stdout] = note: `#[warn(clippy::neg_multiply)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/adversary_minimax.rs:56:9 [INFO] [stdout] | [INFO] [stdout] 56 | return occurrences * signum; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 56 - return occurrences * signum; [INFO] [stdout] 56 + occurrences * signum [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/adversary_minimax.rs:29:16 [INFO] [stdout] | [INFO] [stdout] 29 | if cell == None { [INFO] [stdout] | ^^^^^^^^^^^^ help: use `Option::is_none()` instead: `cell.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/adversary_minimax.rs:36:16 [INFO] [stdout] | [INFO] [stdout] 36 | if last_player == None { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `last_player.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `i32` is unnecessary [INFO] [stdout] --> src/adversary_minimax.rs:64:20 [INFO] [stdout] | [INFO] [stdout] 64 | min(max(score, -1 as i32 * game.size_y() as i32 * game.size_x() as i32 - 1), game.size_y() as i32 * game.size_x() as i32 + 1) //... [INFO] [stdout] | ^^^^^^^^^ help: try: `-1_i32` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/adversary_minimax.rs:68:38 [INFO] [stdout] | [INFO] [stdout] 68 | solutions_done: &Arc<&mut Cache, Option)>>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `(u8, Side)` which implements the `Copy` trait [INFO] [stdout] --> src/adversary_minimax.rs:86:24 [INFO] [stdout] | [INFO] [stdout] 86 | game.push_move(m.clone()).unwrap(); [INFO] [stdout] | ^^^^^^^^^ help: try dereferencing it: `*m` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `(u8, Side)` which implements the `Copy` trait [INFO] [stdout] --> src/adversary_minimax.rs:91:26 [INFO] [stdout] | [INFO] [stdout] 91 | return (Some(m.clone()), [INFO] [stdout] | ^^^^^^^^^ help: try dereferencing it: `*m` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `i32` which implements the `Copy` trait [INFO] [stdout] --> src/adversary_minimax.rs:115:51 [INFO] [stdout] | [INFO] [stdout] 115 | let mut new_alpha: AtomicI32 = AtomicI32::new(alpha.clone()); [INFO] [stdout] | ^^^^^^^^^^^^^ help: try removing the `clone` call: `alpha` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `solution_done` after checking its variant with `is_some` [INFO] [stdout] --> src/adversary_minimax.rs:123:13 [INFO] [stdout] | [INFO] [stdout] 122 | let score = if solution_done.is_some() { [INFO] [stdout] | -------------------------- help: try: `if let Some() = solution_done` [INFO] [stdout] 123 | solution_done.unwrap().1 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `score` after checking its variant with `is_some` [INFO] [stdout] --> src/adversary_minimax.rs:133:29 [INFO] [stdout] | [INFO] [stdout] 130 | if score.is_some() && score.unwrap() >= beta { [INFO] [stdout] | --------------- the check is happening here [INFO] [stdout] ... [INFO] [stdout] 133 | new_alpha.store(score.unwrap(), Ordering::SeqCst); [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `score` after checking its variant with `is_some` [INFO] [stdout] --> src/adversary_minimax.rs:137:29 [INFO] [stdout] | [INFO] [stdout] 136 | if score.is_some() && score.unwrap() > new_alpha.load(Ordering::SeqCst) { [INFO] [stdout] | --------------- the check is happening here [INFO] [stdout] 137 | new_alpha.store(score.unwrap(), Ordering::SeqCst); [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/adversary_minimax.rs:141:9 [INFO] [stdout] | [INFO] [stdout] 141 | return Ok(()); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 141 - return Ok(()); [INFO] [stdout] 141 + Ok(()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this multiplication by -1 can be written more succinctly [INFO] [stdout] --> src/adversary_minimax.rs:125:73 [INFO] [stdout] | [INFO] [stdout] 125 | ... let r = minimax_recursion(try_game, player, solutions_done, beta * -1, new_alpha.load(Ordering::SeqCst) * -1, recommended_dep... [INFO] [stdout] | ^^^^^^^^^ help: consider using: `-beta` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#neg_multiply [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this multiplication by -1 can be written more succinctly [INFO] [stdout] --> src/adversary_minimax.rs:125:84 [INFO] [stdout] | [INFO] [stdout] 125 | ...one, beta * -1, new_alpha.load(Ordering::SeqCst) * -1, recommended_depth.map(|d| d - 1)).1.map(|s| s * -1); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `-new_alpha.load(Ordering::SeqCst)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#neg_multiply [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this multiplication by -1 can be written more succinctly [INFO] [stdout] --> src/adversary_minimax.rs:125:167 [INFO] [stdout] | [INFO] [stdout] 125 | ...1, recommended_depth.map(|d| d - 1)).1.map(|s| s * -1); [INFO] [stdout] | ^^^^^^ help: consider using: `-s` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#neg_multiply [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `(u8, Side)` which implements the `Copy` trait [INFO] [stdout] --> src/adversary_minimax.rs:126:47 [INFO] [stdout] | [INFO] [stdout] 126 | solutions_done.insert(hash, (Some(m.clone()), r.clone())); [INFO] [stdout] | ^^^^^^^^^ help: try removing the `clone` call: `m` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Option` which implements the `Copy` trait [INFO] [stdout] --> src/adversary_minimax.rs:126:59 [INFO] [stdout] | [INFO] [stdout] 126 | solutions_done.insert(hash, (Some(m.clone()), r.clone())); [INFO] [stdout] | ^^^^^^^^^ help: try removing the `clone` call: `r` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `(u8, Side)` which implements the `Copy` trait [INFO] [stdout] --> src/adversary_minimax.rs:132:47 [INFO] [stdout] | [INFO] [stdout] 132 | *best_move.lock().unwrap() = Some(m.clone()); [INFO] [stdout] | ^^^^^^^^^ help: try removing the `clone` call: `m` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `(u8, Side)` which implements the `Copy` trait [INFO] [stdout] --> src/adversary_minimax.rs:138:47 [INFO] [stdout] | [INFO] [stdout] 138 | *best_move.lock().unwrap() = Some(m.clone()); [INFO] [stdout] | ^^^^^^^^^ help: try removing the `clone` call: `m` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: parameter is only used in recursion [INFO] [stdout] --> src/adversary_minimax.rs:67:40 [INFO] [stdout] | [INFO] [stdout] 67 | fn minimax_recursion(game: &mut State, player: Player, [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_player` [INFO] [stdout] | [INFO] [stdout] note: parameter used here [INFO] [stdout] --> src/adversary_minimax.rs:125:49 [INFO] [stdout] | [INFO] [stdout] 125 | ... let r = minimax_recursion(try_game, player, solutions_done, beta * -1, new_alpha.load(Ordering::SeqCst) * -1, recommended_dep... [INFO] [stdout] | ^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#only_used_in_recursion [INFO] [stdout] = note: `#[warn(clippy::only_used_in_recursion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/db.rs:143:16 [INFO] [stdout] | [INFO] [stdout] 143 | if !game.player_red.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `game.player_red.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/db.rs:154:16 [INFO] [stdout] | [INFO] [stdout] 154 | if !game.player_blue.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `game.player_blue.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` in tuple element 1 that must be used [INFO] [stdout] --> src/main.rs:72:5 [INFO] [stdout] | [INFO] [stdout] 72 | / tokio::join!(run_subscribe_bots(), axum::Server::bind(&format!("0.0.0.0:{}", &port).parse().unwrap()) [INFO] [stdout] 73 | | .serve(app.into_make_service())); [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)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/game.rs:15:17 [INFO] [stdout] | [INFO] [stdout] 15 | fn split_row(s: &str) -> SplitWhitespace { [INFO] [stdout] | ^^^^ ^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 15 | fn split_row(s: &str) -> SplitWhitespace<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/db.rs:38:5 [INFO] [stdout] | [INFO] [stdout] 38 | embedded_migrations::run(&STATICS.db_connection.get().unwrap()); [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] 38 | let _ = embedded_migrations::run(&STATICS.db_connection.get().unwrap()); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:41:17 [INFO] [stdout] | [INFO] [stdout] 41 | #[derive(Clone, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `ToSql` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMESTATESERIALIZED` [INFO] [stdout] 42 | pub struct GameStateSerialized(pub String); [INFO] [stdout] | ------------------- `GameStateSerialized` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: `#[warn(non_local_definitions)]` on by default [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:41:17 [INFO] [stdout] | [INFO] [stdout] 41 | #[derive(Clone, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `AsExpression` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMESTATESERIALIZED` [INFO] [stdout] 42 | pub struct GameStateSerialized(pub String); [INFO] [stdout] | ------------------- `GameStateSerialized` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:41:17 [INFO] [stdout] | [INFO] [stdout] 41 | #[derive(Clone, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | -^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | `AsExpression` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMESTATESERIALIZED` [INFO] [stdout] 42 | pub struct GameStateSerialized(pub String); [INFO] [stdout] | ------------------- `GameStateSerialized` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:41:17 [INFO] [stdout] | [INFO] [stdout] 41 | #[derive(Clone, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `FromSql` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMESTATESERIALIZED` [INFO] [stdout] 42 | pub struct GameStateSerialized(pub String); [INFO] [stdout] | ------------------- `GameStateSerialized` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:41:17 [INFO] [stdout] | [INFO] [stdout] 41 | #[derive(Clone, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `FromSqlRow` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMESTATESERIALIZED` [INFO] [stdout] 42 | pub struct GameStateSerialized(pub String); [INFO] [stdout] | ------------------- `GameStateSerialized` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:41:17 [INFO] [stdout] | [INFO] [stdout] 41 | #[derive(Clone, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `Queryable` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMESTATESERIALIZED` [INFO] [stdout] 42 | pub struct GameStateSerialized(pub String); [INFO] [stdout] | ------------------- `GameStateSerialized` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:41:17 [INFO] [stdout] | [INFO] [stdout] 41 | #[derive(Clone, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `QueryId` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMESTATESERIALIZED` [INFO] [stdout] 42 | pub struct GameStateSerialized(pub String); [INFO] [stdout] | ------------------- `GameStateSerialized` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (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/db.rs:47:9 [INFO] [stdout] | [INFO] [stdout] 47 | f.write_str("GameStateSerialized(\n"); [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] 47 | let _ = f.write_str("GameStateSerialized(\n"); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:79:33 [INFO] [stdout] | [INFO] [stdout] 79 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `ToSql` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_PLAYERTOKEN` [INFO] [stdout] 80 | pub struct PlayerToken(pub Uuid); [INFO] [stdout] | ----------- `PlayerToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:79:33 [INFO] [stdout] | [INFO] [stdout] 79 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `AsExpression` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_PLAYERTOKEN` [INFO] [stdout] 80 | pub struct PlayerToken(pub Uuid); [INFO] [stdout] | ----------- `PlayerToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:79:33 [INFO] [stdout] | [INFO] [stdout] 79 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | -^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | `AsExpression` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_PLAYERTOKEN` [INFO] [stdout] 80 | pub struct PlayerToken(pub Uuid); [INFO] [stdout] | ----------- `PlayerToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:79:33 [INFO] [stdout] | [INFO] [stdout] 79 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `FromSql` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_PLAYERTOKEN` [INFO] [stdout] 80 | pub struct PlayerToken(pub Uuid); [INFO] [stdout] | ----------- `PlayerToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:79:33 [INFO] [stdout] | [INFO] [stdout] 79 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `FromSqlRow` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_PLAYERTOKEN` [INFO] [stdout] 80 | pub struct PlayerToken(pub Uuid); [INFO] [stdout] | ----------- `PlayerToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:79:33 [INFO] [stdout] | [INFO] [stdout] 79 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `Queryable` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_PLAYERTOKEN` [INFO] [stdout] 80 | pub struct PlayerToken(pub Uuid); [INFO] [stdout] | ----------- `PlayerToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:79:33 [INFO] [stdout] | [INFO] [stdout] 79 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `QueryId` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_PLAYERTOKEN` [INFO] [stdout] 80 | pub struct PlayerToken(pub Uuid); [INFO] [stdout] | ----------- `PlayerToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling `push_str()` using a single-character string literal [INFO] [stdout] --> src/db_schema.rs:68:9 [INFO] [stdout] | [INFO] [stdout] 68 | res.push_str("\n"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `res.push('\n')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_add_str [INFO] [stdout] = note: `#[warn(clippy::single_char_add_str)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:81:33 [INFO] [stdout] | [INFO] [stdout] 81 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `ToSql` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMETOKEN` [INFO] [stdout] 82 | pub struct GameToken(pub Uuid); [INFO] [stdout] | --------- `GameToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:81:33 [INFO] [stdout] | [INFO] [stdout] 81 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `AsExpression` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMETOKEN` [INFO] [stdout] 82 | pub struct GameToken(pub Uuid); [INFO] [stdout] | --------- `GameToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:81:33 [INFO] [stdout] | [INFO] [stdout] 81 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | -^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | `AsExpression` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMETOKEN` [INFO] [stdout] 82 | pub struct GameToken(pub Uuid); [INFO] [stdout] | --------- `GameToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:81:33 [INFO] [stdout] | [INFO] [stdout] 81 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `FromSql` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMETOKEN` [INFO] [stdout] 82 | pub struct GameToken(pub Uuid); [INFO] [stdout] | --------- `GameToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:81:33 [INFO] [stdout] | [INFO] [stdout] 81 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `FromSqlRow` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMETOKEN` [INFO] [stdout] 82 | pub struct GameToken(pub Uuid); [INFO] [stdout] | --------- `GameToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:81:33 [INFO] [stdout] | [INFO] [stdout] 81 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `Queryable` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMETOKEN` [INFO] [stdout] 82 | pub struct GameToken(pub Uuid); [INFO] [stdout] | --------- `GameToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:81:33 [INFO] [stdout] | [INFO] [stdout] 81 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `QueryId` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMETOKEN` [INFO] [stdout] 82 | pub struct GameToken(pub Uuid); [INFO] [stdout] | --------- `GameToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:7:10 [INFO] [stdout] | [INFO] [stdout] 7 | #[derive(Queryable, Insertable, Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^-------- [INFO] [stdout] | | [INFO] [stdout] | `Queryable` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_queryable_for_dbgame` [INFO] [stdout] 8 | #[table_name="games"] [INFO] [stdout] 9 | pub struct DbGame { [INFO] [stdout] | ------ `DbGame` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Queryable` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Queryable` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `Queryable` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `RANDY` contains a capitalized acronym [INFO] [stdout] --> src/adversary.rs:13:5 [INFO] [stdout] | [INFO] [stdout] 13 | RANDY, SMART [INFO] [stdout] | ^^^^^ help: consider making the acronym lowercase, except the initial letter: `Randy` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] = note: `#[warn(clippy::upper_case_acronyms)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `SMART` contains a capitalized acronym [INFO] [stdout] --> src/adversary.rs:13:12 [INFO] [stdout] | [INFO] [stdout] 13 | RANDY, SMART [INFO] [stdout] | ^^^^^ help: consider making the acronym lowercase, except the initial letter: `Smart` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:7:21 [INFO] [stdout] | [INFO] [stdout] 7 | #[derive(Queryable, Insertable, Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^--------- [INFO] [stdout] | | [INFO] [stdout] | `Insertable` is not local [INFO] [stdout] | `table` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_insertable_for_dbgame` [INFO] [stdout] 8 | #[table_name="games"] [INFO] [stdout] 9 | pub struct DbGame { [INFO] [stdout] | ------ `DbGame` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Insertable` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Insertable` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `Insertable` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:7:21 [INFO] [stdout] | [INFO] [stdout] 7 | #[derive(Queryable, Insertable, Identifiable, AsChangeset, Clone)] [INFO] [stdout] | -^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | `Insertable` is not local [INFO] [stdout] | `table` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_insertable_for_dbgame` [INFO] [stdout] 8 | #[table_name="games"] [INFO] [stdout] 9 | pub struct DbGame { [INFO] [stdout] | ------ `DbGame` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Insertable` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Insertable` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `Insertable` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:7:21 [INFO] [stdout] | [INFO] [stdout] 7 | #[derive(Queryable, Insertable, Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^--------- [INFO] [stdout] | | [INFO] [stdout] | `UndecoratedInsertRecord` is not local [INFO] [stdout] | `table` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_insertable_for_dbgame` [INFO] [stdout] 8 | #[table_name="games"] [INFO] [stdout] 9 | pub struct DbGame { [INFO] [stdout] | ------ `DbGame` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Insertable` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Insertable` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `Insertable` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:7:33 [INFO] [stdout] | [INFO] [stdout] 7 | #[derive(Queryable, Insertable, Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^----------- [INFO] [stdout] | | [INFO] [stdout] | `HasTable` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_identifiable_for_dbgame` [INFO] [stdout] 8 | #[table_name="games"] [INFO] [stdout] 9 | pub struct DbGame { [INFO] [stdout] | ------ `DbGame` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Identifiable` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Identifiable` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `Identifiable` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:7:33 [INFO] [stdout] | [INFO] [stdout] 7 | #[derive(Queryable, Insertable, Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | `Identifiable` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_identifiable_for_dbgame` [INFO] [stdout] 8 | #[table_name="games"] [INFO] [stdout] 9 | pub struct DbGame { [INFO] [stdout] | ------ `DbGame` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Identifiable` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Identifiable` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `Identifiable` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:7:47 [INFO] [stdout] | [INFO] [stdout] 7 | #[derive(Queryable, Insertable, Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | `AsChangeset` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_as_changeset_for_dbgame` [INFO] [stdout] 8 | #[table_name="games"] [INFO] [stdout] 9 | pub struct DbGame { [INFO] [stdout] | ------ `DbGame` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `AsChangeset` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `AsChangeset` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `AsChangeset` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:7:47 [INFO] [stdout] | [INFO] [stdout] 7 | #[derive(Queryable, Insertable, Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^---------- [INFO] [stdout] | | [INFO] [stdout] | `AsChangeset` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_as_changeset_for_dbgame` [INFO] [stdout] 8 | #[table_name="games"] [INFO] [stdout] 9 | pub struct DbGame { [INFO] [stdout] | ------ `DbGame` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `AsChangeset` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `AsChangeset` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `AsChangeset` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:46:10 [INFO] [stdout] | [INFO] [stdout] 46 | #[derive(Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^----------- [INFO] [stdout] | | [INFO] [stdout] | `HasTable` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_identifiable_for_dbgameplayerredupdate` [INFO] [stdout] 47 | #[table_name="games"] [INFO] [stdout] 48 | pub struct DbGamePlayerRedUpdate { [INFO] [stdout] | --------------------- `DbGamePlayerRedUpdate` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Identifiable` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Identifiable` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `Identifiable` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:46:10 [INFO] [stdout] | [INFO] [stdout] 46 | #[derive(Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | `Identifiable` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_identifiable_for_dbgameplayerredupdate` [INFO] [stdout] 47 | #[table_name="games"] [INFO] [stdout] 48 | pub struct DbGamePlayerRedUpdate { [INFO] [stdout] | --------------------- `DbGamePlayerRedUpdate` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Identifiable` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Identifiable` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `Identifiable` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:46:24 [INFO] [stdout] | [INFO] [stdout] 46 | #[derive(Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | `AsChangeset` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_as_changeset_for_dbgameplayerredupdate` [INFO] [stdout] 47 | #[table_name="games"] [INFO] [stdout] 48 | pub struct DbGamePlayerRedUpdate { [INFO] [stdout] | --------------------- `DbGamePlayerRedUpdate` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `AsChangeset` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `AsChangeset` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `AsChangeset` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:46:24 [INFO] [stdout] | [INFO] [stdout] 46 | #[derive(Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^---------- [INFO] [stdout] | | [INFO] [stdout] | `AsChangeset` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_as_changeset_for_dbgameplayerredupdate` [INFO] [stdout] 47 | #[table_name="games"] [INFO] [stdout] 48 | pub struct DbGamePlayerRedUpdate { [INFO] [stdout] | --------------------- `DbGamePlayerRedUpdate` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `AsChangeset` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `AsChangeset` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `AsChangeset` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:53:10 [INFO] [stdout] | [INFO] [stdout] 53 | #[derive(Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^----------- [INFO] [stdout] | | [INFO] [stdout] | `HasTable` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_identifiable_for_dbgameplayerblueupdate` [INFO] [stdout] 54 | #[table_name="games"] [INFO] [stdout] 55 | pub struct DbGamePlayerBlueUpdate { [INFO] [stdout] | ---------------------- `DbGamePlayerBlueUpdate` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Identifiable` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Identifiable` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `Identifiable` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:53:10 [INFO] [stdout] | [INFO] [stdout] 53 | #[derive(Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | `Identifiable` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_identifiable_for_dbgameplayerblueupdate` [INFO] [stdout] 54 | #[table_name="games"] [INFO] [stdout] 55 | pub struct DbGamePlayerBlueUpdate { [INFO] [stdout] | ---------------------- `DbGamePlayerBlueUpdate` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Identifiable` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Identifiable` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `Identifiable` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:53:24 [INFO] [stdout] | [INFO] [stdout] 53 | #[derive(Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | `AsChangeset` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_as_changeset_for_dbgameplayerblueupdate` [INFO] [stdout] 54 | #[table_name="games"] [INFO] [stdout] 55 | pub struct DbGamePlayerBlueUpdate { [INFO] [stdout] | ---------------------- `DbGamePlayerBlueUpdate` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `AsChangeset` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `AsChangeset` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `AsChangeset` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:53:24 [INFO] [stdout] | [INFO] [stdout] 53 | #[derive(Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^---------- [INFO] [stdout] | | [INFO] [stdout] | `AsChangeset` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_as_changeset_for_dbgameplayerblueupdate` [INFO] [stdout] 54 | #[table_name="games"] [INFO] [stdout] 55 | pub struct DbGamePlayerBlueUpdate { [INFO] [stdout] | ---------------------- `DbGamePlayerBlueUpdate` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `AsChangeset` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `AsChangeset` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `AsChangeset` (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/adversary_minimax.rs:117:5 [INFO] [stdout] | [INFO] [stdout] 117 | / possible_moves.into_par_iter().try_for_each(|m| { [INFO] [stdout] 118 | | let mut try_game = &mut game.clone(); [INFO] [stdout] 119 | | try_game.push_move(m).unwrap(); [INFO] [stdout] 120 | | let hash = try_game.hash_non_historical(); [INFO] [stdout] ... | [INFO] [stdout] 141 | | return Ok(()); [INFO] [stdout] 142 | | }); [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] 117 | let _ = possible_moves.into_par_iter().try_for_each(|m| { [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema_macro.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | / table! { [INFO] [stdout] 2 | | use crate::adversary::BotIdMapping; [INFO] [stdout] 3 | | use diesel::sql_types::{Nullable, Text, Uuid}; [INFO] [stdout] 4 | | games { [INFO] [stdout] ... | [INFO] [stdout] 11 | | } [INFO] [stdout] | | ^ [INFO] [stdout] | | | [INFO] [stdout] | | `table` is not local [INFO] [stdout] | |_`QueryId` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_query_id_for_table` [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `QueryId` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `QueryId` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning 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: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema_macro.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | / table! { [INFO] [stdout] 2 | | use crate::adversary::BotIdMapping; [INFO] [stdout] 3 | | use diesel::sql_types::{Nullable, Text, Uuid}; [INFO] [stdout] 4 | | games { [INFO] [stdout] 5 | | id -> Uuid, [INFO] [stdout] | | -- `id` is not local [INFO] [stdout] ... | [INFO] [stdout] 11 | | } [INFO] [stdout] | | ^ [INFO] [stdout] | | | [INFO] [stdout] | |_`QueryId` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_query_id_for_id` [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `QueryId` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `QueryId` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning 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: unneeded `return` statement [INFO] [stdout] --> src/adversary.rs:56:5 [INFO] [stdout] | [INFO] [stdout] 56 | return true; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 56 - return true; [INFO] [stdout] 56 + true [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `filter` for `Some` followed by `unwrap` [INFO] [stdout] --> src/adversary.rs:35:99 [INFO] [stdout] | [INFO] [stdout] 35 | ...f()].into_iter().filter(|p| p.is_some()).map(|p| p.unwrap()).collect::>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `flatten` instead: `flatten()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_filter_map [INFO] [stdout] = note: `#[warn(clippy::option_filter_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/adversary.rs:47:13 [INFO] [stdout] | [INFO] [stdout] 47 | db_game.player_red == None [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `db_game.player_red.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] = note: `#[warn(clippy::partialeq_to_none)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/adversary.rs:50:13 [INFO] [stdout] | [INFO] [stdout] 50 | db_game.player_blue == None [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `db_game.player_blue.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/adversary.rs:75:13 [INFO] [stdout] | [INFO] [stdout] 75 | return; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 74 ~ None => { [INFO] [stdout] 75 | } [INFO] [stdout] 76 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `adversary::BotId` [INFO] [stdout] --> src/adversary.rs:63:18 [INFO] [stdout] | [INFO] [stdout] 63 | let bot_id = BotId::try_from(db_game.bot_id.clone().unwrap()).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider removing `BotId::try_from()` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Option` which implements the `Copy` trait [INFO] [stdout] --> src/adversary.rs:63:34 [INFO] [stdout] | [INFO] [stdout] 63 | let bot_id = BotId::try_from(db_game.bot_id.clone().unwrap()).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `db_game.bot_id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema_macro.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | / table! { [INFO] [stdout] 2 | | use crate::adversary::BotIdMapping; [INFO] [stdout] 3 | | use diesel::sql_types::{Nullable, Text, Uuid}; [INFO] [stdout] 4 | | games { [INFO] [stdout] 5 | | id -> Uuid, [INFO] [stdout] 6 | | state -> Text, [INFO] [stdout] | | ----- `state` is not local [INFO] [stdout] ... | [INFO] [stdout] 11 | | } [INFO] [stdout] | | ^ [INFO] [stdout] | | | [INFO] [stdout] | |_`QueryId` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_query_id_for_state` [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `QueryId` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `QueryId` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning 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: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema_macro.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | / table! { [INFO] [stdout] 2 | | use crate::adversary::BotIdMapping; [INFO] [stdout] 3 | | use diesel::sql_types::{Nullable, Text, Uuid}; [INFO] [stdout] 4 | | games { [INFO] [stdout] ... | [INFO] [stdout] 7 | | player_red -> Nullable, [INFO] [stdout] | | ---------- `player_red` is not local [INFO] [stdout] ... | [INFO] [stdout] 11 | | } [INFO] [stdout] | | ^ [INFO] [stdout] | | | [INFO] [stdout] | |_`QueryId` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_query_id_for_player_red` [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `QueryId` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `QueryId` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning 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: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema_macro.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | / table! { [INFO] [stdout] 2 | | use crate::adversary::BotIdMapping; [INFO] [stdout] 3 | | use diesel::sql_types::{Nullable, Text, Uuid}; [INFO] [stdout] 4 | | games { [INFO] [stdout] ... | [INFO] [stdout] 8 | | player_blue -> Nullable, [INFO] [stdout] | | ----------- `player_blue` is not local [INFO] [stdout] ... | [INFO] [stdout] 11 | | } [INFO] [stdout] | | ^ [INFO] [stdout] | | | [INFO] [stdout] | |_`QueryId` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_query_id_for_player_blue` [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `QueryId` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `QueryId` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning 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: unneeded `return` statement [INFO] [stdout] --> src/adversary.rs:93:13 [INFO] [stdout] | [INFO] [stdout] 93 | / return match game.next_player() { [INFO] [stdout] 94 | | Err(_) => { [INFO] [stdout] 95 | | None [INFO] [stdout] ... | [INFO] [stdout] 108 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 93 ~ match game.next_player() { [INFO] [stdout] 94 + Err(_) => { [INFO] [stdout] 95 + None [INFO] [stdout] 96 + } [INFO] [stdout] 97 + Ok(player) => { [INFO] [stdout] 98 + // first 2 turns are for Randy [INFO] [stdout] 99 + if game.current_depth() < 2 { [INFO] [stdout] 100 + randy(game) [INFO] [stdout] 101 + } else if game.depth_left() > MINMAX_DEPTH_RESTRICTION { [INFO] [stdout] 102 + randy(game) [INFO] [stdout] 103 + } else { [INFO] [stdout] 104 + minimax(&mut game.clone()) [INFO] [stdout] 105 + } [INFO] [stdout] 106 + [INFO] [stdout] 107 + } [INFO] [stdout] 108 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> src/adversary.rs:99:49 [INFO] [stdout] | [INFO] [stdout] 99 | if game.current_depth() < 2 { [INFO] [stdout] | _________________________________________________^ [INFO] [stdout] 100 | | randy(game) [INFO] [stdout] 101 | | } else if game.depth_left() > MINMAX_DEPTH_RESTRICTION { [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/adversary.rs:101:76 [INFO] [stdout] | [INFO] [stdout] 101 | } else if game.depth_left() > MINMAX_DEPTH_RESTRICTION { [INFO] [stdout] | ____________________________________________________________________________^ [INFO] [stdout] 102 | | randy(game) [INFO] [stdout] 103 | | } else { [INFO] [stdout] | |_____________________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stdout] = note: `#[warn(clippy::if_same_then_else)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the function `minimax` doesn't need a mutable reference [INFO] [stdout] --> src/adversary.rs:104:33 [INFO] [stdout] | [INFO] [stdout] 104 | minimax(&mut game.clone()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stdout] = note: `#[warn(clippy::unnecessary_mut_passed)]` on by default [INFO] [stdout] help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] 104 - minimax(&mut game.clone()) [INFO] [stdout] 104 + minimax(&game.clone()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema_macro.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | / table! { [INFO] [stdout] 2 | | use crate::adversary::BotIdMapping; [INFO] [stdout] 3 | | use diesel::sql_types::{Nullable, Text, Uuid}; [INFO] [stdout] 4 | | games { [INFO] [stdout] ... | [INFO] [stdout] 9 | | bot_id -> Nullable, [INFO] [stdout] | | ------ `bot_id` is not local [INFO] [stdout] 10 | | } [INFO] [stdout] 11 | | } [INFO] [stdout] | | ^ [INFO] [stdout] | | | [INFO] [stdout] | |_`QueryId` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_query_id_for_bot_id` [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `QueryId` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `QueryId` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning 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: this multiplication by -1 can be written more succinctly [INFO] [stdout] --> src/adversary_minimax.rs:18:113 [INFO] [stdout] | [INFO] [stdout] 18 | ...mut hm), if weak { -1 } else { game.size_x() as i32 * game.size_y() as i32 / 2 * -1 }, if weak { 1 } else { game.size_x() as i32 ... [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `-(game.size_x() as i32 * game.size_y() as i32 / 2)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#neg_multiply [INFO] [stdout] = note: `#[warn(clippy::neg_multiply)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/adversary_minimax.rs:56:9 [INFO] [stdout] | [INFO] [stdout] 56 | return occurrences * signum; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 56 - return occurrences * signum; [INFO] [stdout] 56 + occurrences * signum [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/adversary_minimax.rs:29:16 [INFO] [stdout] | [INFO] [stdout] 29 | if cell == None { [INFO] [stdout] | ^^^^^^^^^^^^ help: use `Option::is_none()` instead: `cell.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/adversary_minimax.rs:36:16 [INFO] [stdout] | [INFO] [stdout] 36 | if last_player == None { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `last_player.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `i32` is unnecessary [INFO] [stdout] --> src/adversary_minimax.rs:64:20 [INFO] [stdout] | [INFO] [stdout] 64 | min(max(score, -1 as i32 * game.size_y() as i32 * game.size_x() as i32 - 1), game.size_y() as i32 * game.size_x() as i32 + 1) //... [INFO] [stdout] | ^^^^^^^^^ help: try: `-1_i32` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/adversary_minimax.rs:68:38 [INFO] [stdout] | [INFO] [stdout] 68 | solutions_done: &Arc<&mut Cache, Option)>>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `(u8, Side)` which implements the `Copy` trait [INFO] [stdout] --> src/adversary_minimax.rs:86:24 [INFO] [stdout] | [INFO] [stdout] 86 | game.push_move(m.clone()).unwrap(); [INFO] [stdout] | ^^^^^^^^^ help: try dereferencing it: `*m` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `(u8, Side)` which implements the `Copy` trait [INFO] [stdout] --> src/adversary_minimax.rs:91:26 [INFO] [stdout] | [INFO] [stdout] 91 | return (Some(m.clone()), [INFO] [stdout] | ^^^^^^^^^ help: try dereferencing it: `*m` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `i32` which implements the `Copy` trait [INFO] [stdout] --> src/adversary_minimax.rs:115:51 [INFO] [stdout] | [INFO] [stdout] 115 | let mut new_alpha: AtomicI32 = AtomicI32::new(alpha.clone()); [INFO] [stdout] | ^^^^^^^^^^^^^ help: try removing the `clone` call: `alpha` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `solution_done` after checking its variant with `is_some` [INFO] [stdout] --> src/adversary_minimax.rs:123:13 [INFO] [stdout] | [INFO] [stdout] 122 | let score = if solution_done.is_some() { [INFO] [stdout] | -------------------------- help: try: `if let Some() = solution_done` [INFO] [stdout] 123 | solution_done.unwrap().1 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `score` after checking its variant with `is_some` [INFO] [stdout] --> src/adversary_minimax.rs:133:29 [INFO] [stdout] | [INFO] [stdout] 130 | if score.is_some() && score.unwrap() >= beta { [INFO] [stdout] | --------------- the check is happening here [INFO] [stdout] ... [INFO] [stdout] 133 | new_alpha.store(score.unwrap(), Ordering::SeqCst); [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `score` after checking its variant with `is_some` [INFO] [stdout] --> src/adversary_minimax.rs:137:29 [INFO] [stdout] | [INFO] [stdout] 136 | if score.is_some() && score.unwrap() > new_alpha.load(Ordering::SeqCst) { [INFO] [stdout] | --------------- the check is happening here [INFO] [stdout] 137 | new_alpha.store(score.unwrap(), Ordering::SeqCst); [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/adversary_minimax.rs:141:9 [INFO] [stdout] | [INFO] [stdout] 141 | return Ok(()); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 141 - return Ok(()); [INFO] [stdout] 141 + Ok(()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this multiplication by -1 can be written more succinctly [INFO] [stdout] --> src/adversary_minimax.rs:125:73 [INFO] [stdout] | [INFO] [stdout] 125 | ... let r = minimax_recursion(try_game, player, solutions_done, beta * -1, new_alpha.load(Ordering::SeqCst) * -1, recommended_dep... [INFO] [stdout] | ^^^^^^^^^ help: consider using: `-beta` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#neg_multiply [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this multiplication by -1 can be written more succinctly [INFO] [stdout] --> src/adversary_minimax.rs:125:84 [INFO] [stdout] | [INFO] [stdout] 125 | ...one, beta * -1, new_alpha.load(Ordering::SeqCst) * -1, recommended_depth.map(|d| d - 1)).1.map(|s| s * -1); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `-new_alpha.load(Ordering::SeqCst)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#neg_multiply [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this multiplication by -1 can be written more succinctly [INFO] [stdout] --> src/adversary_minimax.rs:125:167 [INFO] [stdout] | [INFO] [stdout] 125 | ...1, recommended_depth.map(|d| d - 1)).1.map(|s| s * -1); [INFO] [stdout] | ^^^^^^ help: consider using: `-s` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#neg_multiply [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `(u8, Side)` which implements the `Copy` trait [INFO] [stdout] --> src/adversary_minimax.rs:126:47 [INFO] [stdout] | [INFO] [stdout] 126 | solutions_done.insert(hash, (Some(m.clone()), r.clone())); [INFO] [stdout] | ^^^^^^^^^ help: try removing the `clone` call: `m` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Option` which implements the `Copy` trait [INFO] [stdout] --> src/adversary_minimax.rs:126:59 [INFO] [stdout] | [INFO] [stdout] 126 | solutions_done.insert(hash, (Some(m.clone()), r.clone())); [INFO] [stdout] | ^^^^^^^^^ help: try removing the `clone` call: `r` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `(u8, Side)` which implements the `Copy` trait [INFO] [stdout] --> src/adversary_minimax.rs:132:47 [INFO] [stdout] | [INFO] [stdout] 132 | *best_move.lock().unwrap() = Some(m.clone()); [INFO] [stdout] | ^^^^^^^^^ help: try removing the `clone` call: `m` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `(u8, Side)` which implements the `Copy` trait [INFO] [stdout] --> src/adversary_minimax.rs:138:47 [INFO] [stdout] | [INFO] [stdout] 138 | *best_move.lock().unwrap() = Some(m.clone()); [INFO] [stdout] | ^^^^^^^^^ help: try removing the `clone` call: `m` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: parameter is only used in recursion [INFO] [stdout] --> src/adversary_minimax.rs:67:40 [INFO] [stdout] | [INFO] [stdout] 67 | fn minimax_recursion(game: &mut State, player: Player, [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_player` [INFO] [stdout] | [INFO] [stdout] note: parameter used here [INFO] [stdout] --> src/adversary_minimax.rs:125:49 [INFO] [stdout] | [INFO] [stdout] 125 | ... let r = minimax_recursion(try_game, player, solutions_done, beta * -1, new_alpha.load(Ordering::SeqCst) * -1, recommended_dep... [INFO] [stdout] | ^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#only_used_in_recursion [INFO] [stdout] = note: `#[warn(clippy::only_used_in_recursion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` in tuple element 1 that must be used [INFO] [stdout] --> src/main.rs:72:5 [INFO] [stdout] | [INFO] [stdout] 72 | / tokio::join!(run_subscribe_bots(), axum::Server::bind(&format!("0.0.0.0:{}", &port).parse().unwrap()) [INFO] [stdout] 73 | | .serve(app.into_make_service())); [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)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/game.rs:15:17 [INFO] [stdout] | [INFO] [stdout] 15 | fn split_row(s: &str) -> SplitWhitespace { [INFO] [stdout] | ^^^^ ^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 15 | fn split_row(s: &str) -> SplitWhitespace<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/db.rs:38:5 [INFO] [stdout] | [INFO] [stdout] 38 | embedded_migrations::run(&STATICS.db_connection.get().unwrap()); [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] 38 | let _ = embedded_migrations::run(&STATICS.db_connection.get().unwrap()); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:41:17 [INFO] [stdout] | [INFO] [stdout] 41 | #[derive(Clone, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `ToSql` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMESTATESERIALIZED` [INFO] [stdout] 42 | pub struct GameStateSerialized(pub String); [INFO] [stdout] | ------------------- `GameStateSerialized` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: `#[warn(non_local_definitions)]` on by default [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:41:17 [INFO] [stdout] | [INFO] [stdout] 41 | #[derive(Clone, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `AsExpression` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMESTATESERIALIZED` [INFO] [stdout] 42 | pub struct GameStateSerialized(pub String); [INFO] [stdout] | ------------------- `GameStateSerialized` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:41:17 [INFO] [stdout] | [INFO] [stdout] 41 | #[derive(Clone, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | -^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | `AsExpression` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMESTATESERIALIZED` [INFO] [stdout] 42 | pub struct GameStateSerialized(pub String); [INFO] [stdout] | ------------------- `GameStateSerialized` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:41:17 [INFO] [stdout] | [INFO] [stdout] 41 | #[derive(Clone, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `FromSql` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMESTATESERIALIZED` [INFO] [stdout] 42 | pub struct GameStateSerialized(pub String); [INFO] [stdout] | ------------------- `GameStateSerialized` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:41:17 [INFO] [stdout] | [INFO] [stdout] 41 | #[derive(Clone, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `FromSqlRow` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMESTATESERIALIZED` [INFO] [stdout] 42 | pub struct GameStateSerialized(pub String); [INFO] [stdout] | ------------------- `GameStateSerialized` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:41:17 [INFO] [stdout] | [INFO] [stdout] 41 | #[derive(Clone, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `Queryable` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMESTATESERIALIZED` [INFO] [stdout] 42 | pub struct GameStateSerialized(pub String); [INFO] [stdout] | ------------------- `GameStateSerialized` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:41:17 [INFO] [stdout] | [INFO] [stdout] 41 | #[derive(Clone, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `QueryId` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMESTATESERIALIZED` [INFO] [stdout] 42 | pub struct GameStateSerialized(pub String); [INFO] [stdout] | ------------------- `GameStateSerialized` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (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/db.rs:47:9 [INFO] [stdout] | [INFO] [stdout] 47 | f.write_str("GameStateSerialized(\n"); [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] 47 | let _ = f.write_str("GameStateSerialized(\n"); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:79:33 [INFO] [stdout] | [INFO] [stdout] 79 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `ToSql` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_PLAYERTOKEN` [INFO] [stdout] 80 | pub struct PlayerToken(pub Uuid); [INFO] [stdout] | ----------- `PlayerToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:79:33 [INFO] [stdout] | [INFO] [stdout] 79 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `AsExpression` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_PLAYERTOKEN` [INFO] [stdout] 80 | pub struct PlayerToken(pub Uuid); [INFO] [stdout] | ----------- `PlayerToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:79:33 [INFO] [stdout] | [INFO] [stdout] 79 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | -^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | `AsExpression` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_PLAYERTOKEN` [INFO] [stdout] 80 | pub struct PlayerToken(pub Uuid); [INFO] [stdout] | ----------- `PlayerToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:79:33 [INFO] [stdout] | [INFO] [stdout] 79 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `FromSql` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_PLAYERTOKEN` [INFO] [stdout] 80 | pub struct PlayerToken(pub Uuid); [INFO] [stdout] | ----------- `PlayerToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:79:33 [INFO] [stdout] | [INFO] [stdout] 79 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `FromSqlRow` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_PLAYERTOKEN` [INFO] [stdout] 80 | pub struct PlayerToken(pub Uuid); [INFO] [stdout] | ----------- `PlayerToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:79:33 [INFO] [stdout] | [INFO] [stdout] 79 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `Queryable` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_PLAYERTOKEN` [INFO] [stdout] 80 | pub struct PlayerToken(pub Uuid); [INFO] [stdout] | ----------- `PlayerToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:79:33 [INFO] [stdout] | [INFO] [stdout] 79 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `QueryId` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_PLAYERTOKEN` [INFO] [stdout] 80 | pub struct PlayerToken(pub Uuid); [INFO] [stdout] | ----------- `PlayerToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:81:33 [INFO] [stdout] | [INFO] [stdout] 81 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `ToSql` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMETOKEN` [INFO] [stdout] 82 | pub struct GameToken(pub Uuid); [INFO] [stdout] | --------- `GameToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:81:33 [INFO] [stdout] | [INFO] [stdout] 81 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `AsExpression` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMETOKEN` [INFO] [stdout] 82 | pub struct GameToken(pub Uuid); [INFO] [stdout] | --------- `GameToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:81:33 [INFO] [stdout] | [INFO] [stdout] 81 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | -^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | `AsExpression` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMETOKEN` [INFO] [stdout] 82 | pub struct GameToken(pub Uuid); [INFO] [stdout] | --------- `GameToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:81:33 [INFO] [stdout] | [INFO] [stdout] 81 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `FromSql` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMETOKEN` [INFO] [stdout] 82 | pub struct GameToken(pub Uuid); [INFO] [stdout] | --------- `GameToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:81:33 [INFO] [stdout] | [INFO] [stdout] 81 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `FromSqlRow` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMETOKEN` [INFO] [stdout] 82 | pub struct GameToken(pub Uuid); [INFO] [stdout] | --------- `GameToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:81:33 [INFO] [stdout] | [INFO] [stdout] 81 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `Queryable` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMETOKEN` [INFO] [stdout] 82 | pub struct GameToken(pub Uuid); [INFO] [stdout] | --------- `GameToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db.rs:81:33 [INFO] [stdout] | [INFO] [stdout] 81 | #[derive(Clone, Debug, NewType, DieselNewType, PartialEq, Eq, Hash)] [INFO] [stdout] | ^------------ [INFO] [stdout] | | [INFO] [stdout] | `QueryId` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_DIESEL_NEW_TYPE_FOR_GAMETOKEN` [INFO] [stdout] 82 | pub struct GameToken(pub Uuid); [INFO] [stdout] | --------- `GameToken` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `DieselNewType` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `DieselNewType` may come from an old version of the `diesel_derive_newtype` crate, try updating your dependency with `cargo update -p diesel_derive_newtype` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `DieselNewType` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:7:10 [INFO] [stdout] | [INFO] [stdout] 7 | #[derive(Queryable, Insertable, Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^-------- [INFO] [stdout] | | [INFO] [stdout] | `Queryable` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_queryable_for_dbgame` [INFO] [stdout] 8 | #[table_name="games"] [INFO] [stdout] 9 | pub struct DbGame { [INFO] [stdout] | ------ `DbGame` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Queryable` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Queryable` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `Queryable` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:7:21 [INFO] [stdout] | [INFO] [stdout] 7 | #[derive(Queryable, Insertable, Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^--------- [INFO] [stdout] | | [INFO] [stdout] | `Insertable` is not local [INFO] [stdout] | `table` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_insertable_for_dbgame` [INFO] [stdout] 8 | #[table_name="games"] [INFO] [stdout] 9 | pub struct DbGame { [INFO] [stdout] | ------ `DbGame` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Insertable` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Insertable` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `Insertable` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:7:21 [INFO] [stdout] | [INFO] [stdout] 7 | #[derive(Queryable, Insertable, Identifiable, AsChangeset, Clone)] [INFO] [stdout] | -^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | `Insertable` is not local [INFO] [stdout] | `table` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_insertable_for_dbgame` [INFO] [stdout] 8 | #[table_name="games"] [INFO] [stdout] 9 | pub struct DbGame { [INFO] [stdout] | ------ `DbGame` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Insertable` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Insertable` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `Insertable` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:7:21 [INFO] [stdout] | [INFO] [stdout] 7 | #[derive(Queryable, Insertable, Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^--------- [INFO] [stdout] | | [INFO] [stdout] | `UndecoratedInsertRecord` is not local [INFO] [stdout] | `table` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_insertable_for_dbgame` [INFO] [stdout] 8 | #[table_name="games"] [INFO] [stdout] 9 | pub struct DbGame { [INFO] [stdout] | ------ `DbGame` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Insertable` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Insertable` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `Insertable` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:7:33 [INFO] [stdout] | [INFO] [stdout] 7 | #[derive(Queryable, Insertable, Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^----------- [INFO] [stdout] | | [INFO] [stdout] | `HasTable` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_identifiable_for_dbgame` [INFO] [stdout] 8 | #[table_name="games"] [INFO] [stdout] 9 | pub struct DbGame { [INFO] [stdout] | ------ `DbGame` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Identifiable` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Identifiable` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `Identifiable` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:7:33 [INFO] [stdout] | [INFO] [stdout] 7 | #[derive(Queryable, Insertable, Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | `Identifiable` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_identifiable_for_dbgame` [INFO] [stdout] 8 | #[table_name="games"] [INFO] [stdout] 9 | pub struct DbGame { [INFO] [stdout] | ------ `DbGame` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Identifiable` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Identifiable` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `Identifiable` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:7:47 [INFO] [stdout] | [INFO] [stdout] 7 | #[derive(Queryable, Insertable, Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | `AsChangeset` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_as_changeset_for_dbgame` [INFO] [stdout] 8 | #[table_name="games"] [INFO] [stdout] 9 | pub struct DbGame { [INFO] [stdout] | ------ `DbGame` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `AsChangeset` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `AsChangeset` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `AsChangeset` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:7:47 [INFO] [stdout] | [INFO] [stdout] 7 | #[derive(Queryable, Insertable, Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^---------- [INFO] [stdout] | | [INFO] [stdout] | `AsChangeset` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_as_changeset_for_dbgame` [INFO] [stdout] 8 | #[table_name="games"] [INFO] [stdout] 9 | pub struct DbGame { [INFO] [stdout] | ------ `DbGame` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `AsChangeset` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `AsChangeset` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `AsChangeset` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:46:10 [INFO] [stdout] | [INFO] [stdout] 46 | #[derive(Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^----------- [INFO] [stdout] | | [INFO] [stdout] | `HasTable` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_identifiable_for_dbgameplayerredupdate` [INFO] [stdout] 47 | #[table_name="games"] [INFO] [stdout] 48 | pub struct DbGamePlayerRedUpdate { [INFO] [stdout] | --------------------- `DbGamePlayerRedUpdate` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Identifiable` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Identifiable` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `Identifiable` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:46:10 [INFO] [stdout] | [INFO] [stdout] 46 | #[derive(Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | `Identifiable` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_identifiable_for_dbgameplayerredupdate` [INFO] [stdout] 47 | #[table_name="games"] [INFO] [stdout] 48 | pub struct DbGamePlayerRedUpdate { [INFO] [stdout] | --------------------- `DbGamePlayerRedUpdate` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Identifiable` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Identifiable` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `Identifiable` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:46:24 [INFO] [stdout] | [INFO] [stdout] 46 | #[derive(Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | `AsChangeset` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_as_changeset_for_dbgameplayerredupdate` [INFO] [stdout] 47 | #[table_name="games"] [INFO] [stdout] 48 | pub struct DbGamePlayerRedUpdate { [INFO] [stdout] | --------------------- `DbGamePlayerRedUpdate` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `AsChangeset` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `AsChangeset` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `AsChangeset` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:46:24 [INFO] [stdout] | [INFO] [stdout] 46 | #[derive(Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^---------- [INFO] [stdout] | | [INFO] [stdout] | `AsChangeset` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_as_changeset_for_dbgameplayerredupdate` [INFO] [stdout] 47 | #[table_name="games"] [INFO] [stdout] 48 | pub struct DbGamePlayerRedUpdate { [INFO] [stdout] | --------------------- `DbGamePlayerRedUpdate` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `AsChangeset` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `AsChangeset` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `AsChangeset` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:53:10 [INFO] [stdout] | [INFO] [stdout] 53 | #[derive(Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^----------- [INFO] [stdout] | | [INFO] [stdout] | `HasTable` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_identifiable_for_dbgameplayerblueupdate` [INFO] [stdout] 54 | #[table_name="games"] [INFO] [stdout] 55 | pub struct DbGamePlayerBlueUpdate { [INFO] [stdout] | ---------------------- `DbGamePlayerBlueUpdate` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Identifiable` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Identifiable` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `Identifiable` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:53:10 [INFO] [stdout] | [INFO] [stdout] 53 | #[derive(Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | `Identifiable` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_identifiable_for_dbgameplayerblueupdate` [INFO] [stdout] 54 | #[table_name="games"] [INFO] [stdout] 55 | pub struct DbGamePlayerBlueUpdate { [INFO] [stdout] | ---------------------- `DbGamePlayerBlueUpdate` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Identifiable` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Identifiable` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `Identifiable` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:53:24 [INFO] [stdout] | [INFO] [stdout] 53 | #[derive(Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | `AsChangeset` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_as_changeset_for_dbgameplayerblueupdate` [INFO] [stdout] 54 | #[table_name="games"] [INFO] [stdout] 55 | pub struct DbGamePlayerBlueUpdate { [INFO] [stdout] | ---------------------- `DbGamePlayerBlueUpdate` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `AsChangeset` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `AsChangeset` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `AsChangeset` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema.rs:53:24 [INFO] [stdout] | [INFO] [stdout] 53 | #[derive(Identifiable, AsChangeset, Clone)] [INFO] [stdout] | ^---------- [INFO] [stdout] | | [INFO] [stdout] | `AsChangeset` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_as_changeset_for_dbgameplayerblueupdate` [INFO] [stdout] 54 | #[table_name="games"] [INFO] [stdout] 55 | pub struct DbGamePlayerBlueUpdate { [INFO] [stdout] | ---------------------- `DbGamePlayerBlueUpdate` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `AsChangeset` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `AsChangeset` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning originates in the derive macro `AsChangeset` (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/adversary_minimax.rs:117:5 [INFO] [stdout] | [INFO] [stdout] 117 | / possible_moves.into_par_iter().try_for_each(|m| { [INFO] [stdout] 118 | | let mut try_game = &mut game.clone(); [INFO] [stdout] 119 | | try_game.push_move(m).unwrap(); [INFO] [stdout] 120 | | let hash = try_game.hash_non_historical(); [INFO] [stdout] ... | [INFO] [stdout] 141 | | return Ok(()); [INFO] [stdout] 142 | | }); [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] 117 | let _ = possible_moves.into_par_iter().try_for_each(|m| { [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema_macro.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | / table! { [INFO] [stdout] 2 | | use crate::adversary::BotIdMapping; [INFO] [stdout] 3 | | use diesel::sql_types::{Nullable, Text, Uuid}; [INFO] [stdout] 4 | | games { [INFO] [stdout] ... | [INFO] [stdout] 11 | | } [INFO] [stdout] | | ^ [INFO] [stdout] | | | [INFO] [stdout] | | `table` is not local [INFO] [stdout] | |_`QueryId` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_query_id_for_table` [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `QueryId` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `QueryId` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning 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: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema_macro.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | / table! { [INFO] [stdout] 2 | | use crate::adversary::BotIdMapping; [INFO] [stdout] 3 | | use diesel::sql_types::{Nullable, Text, Uuid}; [INFO] [stdout] 4 | | games { [INFO] [stdout] 5 | | id -> Uuid, [INFO] [stdout] | | -- `id` is not local [INFO] [stdout] ... | [INFO] [stdout] 11 | | } [INFO] [stdout] | | ^ [INFO] [stdout] | | | [INFO] [stdout] | |_`QueryId` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_query_id_for_id` [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `QueryId` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `QueryId` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning 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: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema_macro.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | / table! { [INFO] [stdout] 2 | | use crate::adversary::BotIdMapping; [INFO] [stdout] 3 | | use diesel::sql_types::{Nullable, Text, Uuid}; [INFO] [stdout] 4 | | games { [INFO] [stdout] 5 | | id -> Uuid, [INFO] [stdout] 6 | | state -> Text, [INFO] [stdout] | | ----- `state` is not local [INFO] [stdout] ... | [INFO] [stdout] 11 | | } [INFO] [stdout] | | ^ [INFO] [stdout] | | | [INFO] [stdout] | |_`QueryId` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_query_id_for_state` [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `QueryId` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `QueryId` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning 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: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema_macro.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | / table! { [INFO] [stdout] 2 | | use crate::adversary::BotIdMapping; [INFO] [stdout] 3 | | use diesel::sql_types::{Nullable, Text, Uuid}; [INFO] [stdout] 4 | | games { [INFO] [stdout] ... | [INFO] [stdout] 7 | | player_red -> Nullable, [INFO] [stdout] | | ---------- `player_red` is not local [INFO] [stdout] ... | [INFO] [stdout] 11 | | } [INFO] [stdout] | | ^ [INFO] [stdout] | | | [INFO] [stdout] | |_`QueryId` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_query_id_for_player_red` [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `QueryId` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `QueryId` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning 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: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema_macro.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | / table! { [INFO] [stdout] 2 | | use crate::adversary::BotIdMapping; [INFO] [stdout] 3 | | use diesel::sql_types::{Nullable, Text, Uuid}; [INFO] [stdout] 4 | | games { [INFO] [stdout] ... | [INFO] [stdout] 8 | | player_blue -> Nullable, [INFO] [stdout] | | ----------- `player_blue` is not local [INFO] [stdout] ... | [INFO] [stdout] 11 | | } [INFO] [stdout] | | ^ [INFO] [stdout] | | | [INFO] [stdout] | |_`QueryId` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_query_id_for_player_blue` [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `QueryId` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `QueryId` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning 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: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/db_schema_macro.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | / table! { [INFO] [stdout] 2 | | use crate::adversary::BotIdMapping; [INFO] [stdout] 3 | | use diesel::sql_types::{Nullable, Text, Uuid}; [INFO] [stdout] 4 | | games { [INFO] [stdout] ... | [INFO] [stdout] 9 | | bot_id -> Nullable, [INFO] [stdout] | | ------ `bot_id` is not local [INFO] [stdout] 10 | | } [INFO] [stdout] 11 | | } [INFO] [stdout] | | ^ [INFO] [stdout] | | | [INFO] [stdout] | |_`QueryId` is not local [INFO] [stdout] | move the `impl` block outside of this function `_impl_query_id_for_bot_id` [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `QueryId` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `QueryId` may come from an old version of the `diesel_derives` crate, try updating your dependency with `cargo update -p diesel_derives` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: this warning 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] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 07s [INFO] [stderr] warning: the following packages contain code that will be rejected by a future version of Rust: migrations_internals v1.4.1, syn v0.14.9 [INFO] [stderr] note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 2` [INFO] running `Command { std: "docker" "inspect" "8a4169e78924cd9582a7f69e1c28819b2f92c74a2712c54a921fce544839ecde", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "8a4169e78924cd9582a7f69e1c28819b2f92c74a2712c54a921fce544839ecde", kill_on_drop: false }` [INFO] [stdout] 8a4169e78924cd9582a7f69e1c28819b2f92c74a2712c54a921fce544839ecde