[INFO] cloning repository https://github.com/Ruddle/oxidator
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Ruddle/oxidator" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FRuddle%2Foxidator", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FRuddle%2Foxidator'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] ba77b3419a1c285fb6c63b2590bf138ce3ab661d
[INFO] checking Ruddle/oxidator against master#5518eaa946291f00471af8b254b2a1715f234882 for pr-120393
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FRuddle%2Foxidator" "/workspace/builds/worker-6-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc1/source'...
[INFO] [stderr] done.
[INFO] validating manifest of git repo https://github.com/Ruddle/oxidator on toolchain 5518eaa946291f00471af8b254b2a1715f234882
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+5518eaa946291f00471af8b254b2a1715f234882" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] started tweaking git repo https://github.com/Ruddle/oxidator
[INFO] finished tweaking git repo https://github.com/Ruddle/oxidator
[INFO] tweaked toml for git repo https://github.com/Ruddle/oxidator written to /workspace/builds/worker-6-tc1/source/Cargo.toml
[INFO] crate git repo https://github.com/Ruddle/oxidator already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+5518eaa946291f00471af8b254b2a1715f234882" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded gfx-auxil v0.1.0
[INFO] [stderr]   Downloaded wayland-client v0.23.6
[INFO] [stderr]   Downloaded instant v0.1.2
[INFO] [stderr]   Downloaded gfx-backend-vulkan v0.4.2
[INFO] [stderr]   Downloaded wayland-sys v0.23.6
[INFO] [stderr]   Downloaded metal v0.17.1
[INFO] [stderr]   Downloaded base-62 v0.1.1
[INFO] [stderr]   Downloaded rendy-descriptor v0.5.1
[INFO] [stderr]   Downloaded chashmap v2.2.2
[INFO] [stderr]   Downloaded gfx-backend-empty v0.4.0
[INFO] [stderr]   Downloaded storage-map v0.2.0
[INFO] [stderr]   Downloaded wayland-scanner v0.23.6
[INFO] [stderr]   Downloaded d3d12 v0.3.0
[INFO] [stderr]   Downloaded core-video-sys v0.1.3
[INFO] [stderr]   Downloaded shaderc v0.6.1
[INFO] [stderr]   Downloaded parking_lot v0.4.8
[INFO] [stderr]   Downloaded spin_sleep v0.3.7
[INFO] [stderr]   Downloaded cocoa v0.19.1
[INFO] [stderr]   Downloaded gfx-hal v0.4.1
[INFO] [stderr]   Downloaded wayland-protocols v0.23.6
[INFO] [stderr]   Downloaded nalgebra v0.19.0
[INFO] [stderr]   Downloaded spirv_cross v0.16.0
[INFO] [stderr]   Downloaded typename_derive v0.1.4
[INFO] [stderr]   Downloaded shaderc-sys v0.6.1
[INFO] [stderr]   Downloaded obj-rs v0.5.0
[INFO] [stderr]   Downloaded notify v5.0.0-pre.1
[INFO] [stderr]   Downloaded wgpu v0.4.0
[INFO] [stderr]   Downloaded syn v1.0.15
[INFO] [stderr]   Downloaded zerocopy-derive v0.1.4
[INFO] [stderr]   Downloaded winit v0.20.0-alpha4
[INFO] [stderr]   Downloaded gfx-backend-metal v0.4.3
[INFO] [stderr]   Downloaded smithay-client-toolkit v0.6.6
[INFO] [stderr]   Downloaded wgpu-native v0.4.3
[INFO] [stderr]   Downloaded gfx-backend-dx12 v0.4.3
[INFO] [stderr]   Downloaded typename v0.1.2
[INFO] [stderr]   Downloaded wayland-commons v0.23.6
[INFO] [stderr]   Downloaded calloop v0.4.4
[INFO] [stderr]   Downloaded rendy-memory v0.5.2
[INFO] [stderr]   Downloaded zerocopy v0.2.8
[INFO] [stderr]   Downloaded dispatch v0.1.4
[INFO] [stderr]   Downloaded gfx-backend-dx11 v0.4.5
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:2788e3201cd34a07e3172128adcd8b3090168a8e3bcc40d7c032b9dda1df7d1c" "/opt/rustwide/cargo-home/bin/cargo" "+5518eaa946291f00471af8b254b2a1715f234882" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 288098f808fd3eef3aa44ad82787ea7ce44a73fa4aea4df17253a3926f5833f2
[INFO] running `Command { std: "docker" "start" "-a" "288098f808fd3eef3aa44ad82787ea7ce44a73fa4aea4df17253a3926f5833f2", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "288098f808fd3eef3aa44ad82787ea7ce44a73fa4aea4df17253a3926f5833f2", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "288098f808fd3eef3aa44ad82787ea7ce44a73fa4aea4df17253a3926f5833f2", kill_on_drop: false }`
[INFO] [stdout] 288098f808fd3eef3aa44ad82787ea7ce44a73fa4aea4df17253a3926f5833f2
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:2788e3201cd34a07e3172128adcd8b3090168a8e3bcc40d7c032b9dda1df7d1c" "/opt/rustwide/cargo-home/bin/cargo" "+5518eaa946291f00471af8b254b2a1715f234882" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 776bf5bb7becc1f1f8b8967f78f14aab2caba534008e5d76b2804ed5ab22a698
[INFO] running `Command { std: "docker" "start" "-a" "776bf5bb7becc1f1f8b8967f78f14aab2caba534008e5d76b2804ed5ab22a698", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.67
[INFO] [stderr]    Compiling autocfg v1.0.0
[INFO] [stderr]    Compiling maybe-uninit v2.0.0
[INFO] [stderr]    Compiling bitflags v1.2.1
[INFO] [stderr]    Compiling semver-parser v0.7.0
[INFO] [stderr]    Compiling byteorder v1.3.4
[INFO] [stderr]    Compiling cc v1.0.50
[INFO] [stderr]    Compiling proc-macro2 v1.0.8
[INFO] [stderr]    Compiling semver v0.9.0
[INFO] [stderr]    Compiling num-traits v0.2.11
[INFO] [stderr]    Compiling proc-macro2 v0.4.30
[INFO] [stderr]    Compiling unicode-xid v0.2.0
[INFO] [stderr]    Compiling log v0.4.8
[INFO] [stderr]    Compiling rustc_version v0.2.3
[INFO] [stderr]    Compiling unicode-xid v0.1.0
[INFO] [stderr]    Compiling syn v1.0.15
[INFO] [stderr]     Checking smallvec v0.6.13
[INFO] [stderr]    Compiling quote v1.0.2
[INFO] [stderr]    Compiling num-integer v0.1.42
[INFO] [stderr]     Checking slab v0.4.2
[INFO] [stderr]    Compiling pkg-config v0.3.17
[INFO] [stderr]    Compiling libloading v0.5.2
[INFO] [stderr]    Compiling quote v0.6.13
[INFO] [stderr]    Compiling crossbeam-utils v0.7.2
[INFO] [stderr]    Compiling xml-rs v0.8.0
[INFO] [stderr]    Compiling memoffset v0.5.3
[INFO] [stderr]     Checking iovec v0.1.4
[INFO] [stderr]     Checking net2 v0.2.33
[INFO] [stderr]     Checking raw-window-handle v0.3.3
[INFO] [stderr]    Compiling serde v1.0.104
[INFO] [stderr]    Compiling nix v0.14.1
[INFO] [stderr]     Checking arrayvec v0.5.1
[INFO] [stderr]     Checking adler32 v1.0.4
[INFO] [stderr]     Checking mio v0.6.21
[INFO] [stderr]    Compiling wayland-scanner v0.23.6
[INFO] [stderr]     Checking approx v0.3.2
[INFO] [stderr]    Compiling parking_lot_core v0.6.2
[INFO] [stderr]    Compiling crossbeam-epoch v0.8.2
[INFO] [stderr]     Checking lazycell v1.2.1
[INFO] [stderr]     Checking void v1.0.2
[INFO] [stderr]     Checking dlib v0.4.1
[INFO] [stderr]    Compiling parking_lot v0.9.0
[INFO] [stderr]    Compiling num-iter v0.1.40
[INFO] [stderr]    Compiling num-bigint v0.2.6
[INFO] [stderr]     Checking mio-extras v2.0.6
[INFO] [stderr]    Compiling getrandom v0.1.14
[INFO] [stderr]     Checking wayland-sys v0.23.6
[INFO] [stderr]     Checking gfx-hal v0.4.1
[INFO] [stderr]     Checking ordered-float v1.0.2
[INFO] [stderr]     Checking lock_api v0.3.3
[INFO] [stderr]     Checking stb_truetype v0.3.1
[INFO] [stderr]    Compiling num-complex v0.2.4
[INFO] [stderr]    Compiling syn v0.15.44
[INFO] [stderr]     Checking same-file v1.0.6
[INFO] [stderr]    Compiling rayon-core v1.7.0
[INFO] [stderr]     Checking walkdir v2.3.1
[INFO] [stderr]     Checking rusttype v0.8.2
[INFO] [stderr]     Checking crossbeam-deque v0.7.3
[INFO] [stderr]     Checking crossbeam-queue v0.2.1
[INFO] [stderr]    Compiling x11 v2.18.2
[INFO] [stderr]    Compiling backtrace-sys v0.1.32
[INFO] [stderr]     Checking num_cpus v1.12.0
[INFO] [stderr]    Compiling num-rational v0.2.3
[INFO] [stderr]     Checking ppv-lite86 v0.2.6
[INFO] [stderr]    Compiling wayland-client v0.23.6
[INFO] [stderr]    Compiling wayland-protocols v0.23.6
[INFO] [stderr]     Checking downcast-rs v1.1.1
[INFO] [stderr]    Compiling memchr v2.3.3
[INFO] [stderr]     Checking c2-chacha v0.2.3
[INFO] [stderr]     Checking rusttype v0.7.9
[INFO] [stderr]     Checking rand_core v0.5.1
[INFO] [stderr]     Checking deflate v0.7.20
[INFO] [stderr]    Compiling x11-dl v2.18.5
[INFO] [stderr]     Checking wayland-commons v0.23.6
[INFO] [stderr]     Checking calloop v0.4.4
[INFO] [stderr]     Checking line_drawing v0.7.0
[INFO] [stderr]    Compiling imgui-sys v0.2.0
[INFO] [stderr]     Checking relevant v0.4.2
[INFO] [stderr]     Checking shared_library v0.1.9
[INFO] [stderr]     Checking rand v0.4.6
[INFO] [stderr]    Compiling crc32fast v1.2.0
[INFO] [stderr]    Compiling failure_derive v0.1.6
[INFO] [stderr]     Checking atom v0.3.5
[INFO] [stderr]     Checking xdg v2.2.0
[INFO] [stderr]     Checking either v1.5.3
[INFO] [stderr]    Compiling libm v0.1.4
[INFO] [stderr]     Checking stable_deref_trait v1.1.1
[INFO] [stderr]    Compiling typenum v1.11.2
[INFO] [stderr]     Checking parking_lot_core v0.2.14
[INFO] [stderr]     Checking owning_ref v0.3.3
[INFO] [stderr]     Checking rayon v1.3.0
[INFO] [stderr]     Checking andrew v0.2.1
[INFO] [stderr]     Checking hibitset v0.6.3
[INFO] [stderr]     Checking ash v0.29.0
[INFO] [stderr]    Compiling synstructure v0.12.3
[INFO] [stderr]     Checking rand_chacha v0.2.1
[INFO] [stderr]    Compiling synstructure v0.10.2
[INFO] [stderr]    Compiling serde_derive v1.0.104
[INFO] [stderr]     Checking inflate v0.3.4
[INFO] [stderr]     Checking num-traits v0.1.43
[INFO] [stderr]     Checking memmap v0.7.0
[INFO] [stderr]     Checking rustc-demangle v0.1.16
[INFO] [stderr]     Checking color_quant v1.0.1
[INFO] [stderr]     Checking lzw v0.10.0
[INFO] [stderr]     Checking rand_core v0.4.2
[INFO] [stderr]     Checking colorful v0.2.1
[INFO] [stderr]    Compiling ryu v1.0.2
[INFO] [stderr]     Checking rand_core v0.3.1
[INFO] [stderr]     Checking gif v0.9.2
[INFO] [stderr]     Checking rendy-memory v0.5.2
[INFO] [stderr]     Checking backtrace v0.3.44
[INFO] [stderr]    Compiling zerocopy-derive v0.1.4
[INFO] [stderr]     Checking enum_primitive v0.1.1
[INFO] [stderr]     Checking png v0.11.0
[INFO] [stderr]     Checking aho-corasick v0.7.8
[INFO] [stderr]     Checking jpeg-decoder v0.1.18
[INFO] [stderr]     Checking rand v0.7.3
[INFO] [stderr]     Checking parking_lot v0.4.8
[INFO] [stderr]     Checking rendy-descriptor v0.5.1
[INFO] [stderr]     Checking gfx-backend-empty v0.4.0
[INFO] [stderr]     Checking num-rational v0.1.42
[INFO] [stderr]     Checking inotify-sys v0.1.3
[INFO] [stderr]     Checking fxhash v0.2.1
[INFO] [stderr]     Checking thread_local v1.0.1
[INFO] [stderr]     Checking crossbeam-utils v0.6.6
[INFO] [stderr]     Checking percent-encoding v2.1.0
[INFO] [stderr]     Checking copyless v0.1.4
[INFO] [stderr]     Checking regex-syntax v0.6.14
[INFO] [stderr]     Checking instant v0.1.2
[INFO] [stderr]     Checking rawpointer v0.2.1
[INFO] [stderr]     Checking vec_map v0.8.1
[INFO] [stderr]     Checking quick-error v1.2.3
[INFO] [stderr]     Checking image v0.18.0
[INFO] [stderr]     Checking humantime v1.3.0
[INFO] [stderr]     Checking matrixmultiply v0.2.3
[INFO] [stderr]     Checking crossbeam-channel v0.3.9
[INFO] [stderr]     Checking inotify v0.7.0
[INFO] [stderr]     Checking gfx-backend-vulkan v0.4.2
[INFO] [stderr]     Checking generic-array v0.13.2
[INFO] [stderr]     Checking failure v0.1.6
[INFO] [stderr]     Checking chashmap v2.2.2
[INFO] [stderr]     Checking rand_distr v0.2.2
[INFO] [stderr]     Checking zerocopy v0.2.8
[INFO] [stderr]     Checking wgpu-native v0.4.3
[INFO] [stderr]     Checking rand v0.5.6
[INFO] [stderr]    Compiling typename_derive v0.1.4
[INFO] [stderr]     Checking regex v1.3.4
[INFO] [stderr]     Checking miniz_oxide v0.3.6
[INFO] [stderr]     Checking inflate v0.4.5
[INFO] [stderr]     Checking atty v0.2.14
[INFO] [stderr]     Checking filetime v0.2.8
[INFO] [stderr]     Checking itoa v0.4.5
[INFO] [stderr]     Checking termcolor v1.1.0
[INFO] [stderr]     Checking vec_map v0.6.0
[INFO] [stderr]     Checking anymap v0.12.1
[INFO] [stderr]     Checking flate2 v1.0.13
[INFO] [stderr]     Checking png v0.15.3
[INFO] [stderr]     Checking notify v5.0.0-pre.1
[INFO] [stderr]     Checking env_logger v0.7.1
[INFO] [stderr]     Checking wgpu v0.4.0
[INFO] [stderr]     Checking typename v0.1.2
[INFO] [stderr]     Checking noise v0.6.0
[INFO] [stderr]     Checking base-62 v0.1.1
[INFO] [stderr]     Checking fnv v1.0.6
[INFO] [stderr]     Checking spin_sleep v0.3.7
[INFO] [stderr]     Checking imgui v0.2.1
[INFO] [stderr]     Checking smithay-client-toolkit v0.6.6
[INFO] [stderr]     Checking winit v0.20.0-alpha4
[INFO] [stderr]     Checking serde_json v1.0.48
[INFO] [stderr]     Checking bincode v1.2.1
[INFO] [stderr]     Checking alga v0.9.2
[INFO] [stderr]     Checking num v0.2.1
[INFO] [stderr]     Checking obj-rs v0.5.0
[INFO] [stderr]     Checking imgui-winit-support v0.2.1
[INFO] [stderr]     Checking nalgebra v0.19.0
[INFO] [stderr]     Checking oxidator v0.2.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `Vector4`
[INFO] [stdout]  --> src/client/mod.rs:3:56
[INFO] [stdout]   |
[INFO] [stdout] 3 | use na::{Isometry3, Matrix4, Point3, Vector2, Vector3, Vector4};
[INFO] [stdout]   |                                                        ^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::botdef`
[INFO] [stdout]  --> src/client/game_state.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::botdef;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HashSet`
[INFO] [stdout]  --> src/client/unit_part_gpu.rs:4:33
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::collections::{HashMap, HashSet};
[INFO] [stdout]   |                                 ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Path`
[INFO] [stdout]  --> src/client/unit_part_gpu.rs:5:17
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::path::{Path, PathBuf};
[INFO] [stdout]   |                 ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model::*`
[INFO] [stdout]  --> src/client/unit_editor.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::model::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `gpu_obj::model_gpu::ModelGpu`
[INFO] [stdout]  --> src/client/unit_editor.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use gpu_obj::model_gpu::ModelGpu;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Vector2`
[INFO] [stdout]  --> src/client/unit_editor.rs:7:27
[INFO] [stdout]   |
[INFO] [stdout] 7 | use na::{Matrix4, Point3, Vector2, Vector3, Vector4};
[INFO] [stdout]   |                           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `HashMap`, `HashSet`
[INFO] [stdout]  --> src/client/unit_editor.rs:8:24
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::collections::{HashMap, HashSet};
[INFO] [stdout]   |                        ^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Path`
[INFO] [stdout]  --> src/client/unit_editor.rs:9:17
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::path::{Path, PathBuf};
[INFO] [stdout]   |                 ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BufReader`
[INFO] [stdout]    --> src/client/unit_editor.rs:228:23
[INFO] [stdout]     |
[INFO] [stdout] 228 |         use std::io::{BufReader, BufWriter};
[INFO] [stdout]     |                       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BufWriter`
[INFO] [stdout]    --> src/client/unit_editor.rs:244:34
[INFO] [stdout]     |
[INFO] [stdout] 244 |         use std::io::{BufReader, BufWriter};
[INFO] [stdout]     |                                  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]    --> src/client/heightmap_editor.rs:328:13
[INFO] [stdout]     |
[INFO] [stdout] 328 |         use std::io::BufReader;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around pattern
[INFO] [stdout]   --> src/client/misc.rs:19:13
[INFO] [stdout]    |
[INFO] [stdout] 19 |         for (model_gpu_state) in self.unit_part_gpu.states.iter_mut() {
[INFO] [stdout]    |             ^               ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 19 -         for (model_gpu_state) in self.unit_part_gpu.states.iter_mut() {
[INFO] [stdout] 19 +         for model_gpu_state in self.unit_part_gpu.states.iter_mut() {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around function argument
[INFO] [stdout]    --> src/client/misc.rs:159:25
[INFO] [stdout]     |
[INFO] [stdout] 159 |                         (t * 2.0),
[INFO] [stdout]     |                         ^       ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 159 -                         (t * 2.0),
[INFO] [stdout] 159 +                         t * 2.0,
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::botdef`
[INFO] [stdout]  --> src/client/play.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::botdef;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `imgui::*`
[INFO] [stdout]  --> src/client/play.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use imgui::*;
[INFO] [stdout]   |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Isometry3`, `Vector2`, `Vector4`
[INFO] [stdout]  --> src/client/play.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | use na::{Isometry3, Matrix4, Point3, Vector2, Vector3, Vector4};
[INFO] [stdout]   |          ^^^^^^^^^                   ^^^^^^^           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Duration`, `Instant`
[INFO] [stdout]   --> src/client/play.rs:10:17
[INFO] [stdout]    |
[INFO] [stdout] 10 | use std::time::{Duration, Instant};
[INFO] [stdout]    |                 ^^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::frame::Player`
[INFO] [stdout]  --> src/client/render.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::frame::Player;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `IsometryMatrix3`, `Matrix4`, `Vector2`, `Vector4`
[INFO] [stdout]  --> src/client/render.rs:8:10
[INFO] [stdout]   |
[INFO] [stdout] 8 | use na::{IsometryMatrix3, Matrix4, Point3, Vector2, Vector3, Vector4};
[INFO] [stdout]   |          ^^^^^^^^^^^^^^^  ^^^^^^^          ^^^^^^^           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/client/render.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `unit_part_gpu::UnitPartGpu`
[INFO] [stdout]   --> src/client/render.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use unit_part_gpu::UnitPartGpu;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HashMap`
[INFO] [stdout]   --> src/client/mod.rs:34:24
[INFO] [stdout]    |
[INFO] [stdout] 34 | use std::collections::{HashMap, HashSet};
[INFO] [stdout]    |                        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PathBuf`
[INFO] [stdout]   --> src/client/mod.rs:35:23
[INFO] [stdout]    |
[INFO] [stdout] 35 | use std::path::{Path, PathBuf};
[INFO] [stdout]    |                       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Instant`
[INFO] [stdout]   --> src/client/mod.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | use std::time::Instant;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BufferMapAsyncResult`, `Extent3d`, `SwapChain`
[INFO] [stdout]   --> src/client/mod.rs:38:12
[INFO] [stdout]    |
[INFO] [stdout] 38 | use wgpu::{BufferMapAsyncResult, Extent3d, SwapChain, TextureFormat};
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around type
[INFO] [stdout]    --> src/client/mod.rs:154:10
[INFO] [stdout]     |
[INFO] [stdout] 154 |     ) -> (Self) {
[INFO] [stdout]     |          ^    ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 154 -     ) -> (Self) {
[INFO] [stdout] 154 +     ) -> Self {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: the item `unbounded` is imported redundantly
[INFO] [stdout]    --> src/client/mod.rs:436:17
[INFO] [stdout]     |
[INFO] [stdout] 1   | use crate::*;
[INFO] [stdout]     |     -------- the item `unbounded` is already imported here
[INFO] [stdout] ...
[INFO] [stdout] 436 |             use crossbeam_channel::unbounded;
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Result`
[INFO] [stdout]    --> src/client/mod.rs:437:50
[INFO] [stdout]     |
[INFO] [stdout] 437 |             use notify::{watcher, RecursiveMode, Result};
[INFO] [stdout]     |                                                  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]    --> src/client/mod.rs:608:9
[INFO] [stdout]     |
[INFO] [stdout] 608 |         (this)
[INFO] [stdout]     |         ^    ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 608 -         (this)
[INFO] [stdout] 608 +         this
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around pattern
[INFO] [stdout]    --> src/client/mod.rs:927:25
[INFO] [stdout]     |
[INFO] [stdout] 927 |                     for (model_gpu_state) in self.unit_part_gpu.states.iter_mut() {
[INFO] [stdout]     |                         ^               ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 927 -                     for (model_gpu_state) in self.unit_part_gpu.states.iter_mut() {
[INFO] [stdout] 927 +                     for model_gpu_state in self.unit_part_gpu.states.iter_mut() {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Point3`
[INFO] [stdout]   --> src/frame.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | use na::{Point3, Vector3};
[INFO] [stdout]    |          ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::unit`
[INFO] [stdout]   --> src/frame.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use crate::unit;
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Matrix4`
[INFO] [stdout]  --> src/frame_server/mod.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | use na::{Matrix4, Point3, Vector2, Vector3};
[INFO] [stdout]   |          ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused label
[INFO] [stdout]    --> src/frame_server/mod.rs:393:25
[INFO] [stdout]     |
[INFO] [stdout] 393 |                         'bot_test: for kbot_id in kbots_in_proximity.iter() {
[INFO] [stdout]     |                         ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_labels)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]    --> src/frame_server/mod.rs:452:10
[INFO] [stdout]     |
[INFO] [stdout] 452 |         };
[INFO] [stdout]     |          ^ help: remove this semicolon
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(redundant_semicolons)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::slice`
[INFO] [stdout]  --> src/glsl.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::slice;
[INFO] [stdout]   |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]   --> src/gpu_obj/arrow_gpu.rs:45:95
[INFO] [stdout]    |
[INFO] [stdout] 45 |         let pipeline = Self::create_pipeline(device, main_bind_group_layout, format).unwrap();;
[INFO] [stdout]    |                                                                                               ^ help: remove this semicolon
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model`
[INFO] [stdout]  --> src/gpu_obj/blit_texture.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::model;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model`
[INFO] [stdout]  --> src/gpu_obj/explosion.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::model;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BigEndian`, `ReadBytesExt`
[INFO] [stdout]    --> src/gpu_obj/explosion.rs:312:25
[INFO] [stdout]     |
[INFO] [stdout] 312 |         use byteorder::{BigEndian, ReadBytesExt};
[INFO] [stdout]     |                         ^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::slice`
[INFO] [stdout]   --> src/gpu_obj/glsl_compiler.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | use std::slice;
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model`
[INFO] [stdout]  --> src/gpu_obj/health_bar.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::model;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Vector4`
[INFO] [stdout]  --> src/client/mod.rs:3:56
[INFO] [stdout]   |
[INFO] [stdout] 3 | use na::{Isometry3, Matrix4, Point3, Vector2, Vector3, Vector4};
[INFO] [stdout]   |                                                        ^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::botdef`
[INFO] [stdout]  --> src/client/game_state.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::botdef;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model`
[INFO] [stdout]  --> src/gpu_obj/line.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::model;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HashSet`
[INFO] [stdout]  --> src/client/unit_part_gpu.rs:4:33
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::collections::{HashMap, HashSet};
[INFO] [stdout]   |                                 ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]   --> src/gpu_obj/line.rs:29:95
[INFO] [stdout]    |
[INFO] [stdout] 29 |         let pipeline = Self::create_pipeline(device, main_bind_group_layout, format).unwrap();;
[INFO] [stdout]    |                                                                                               ^ help: remove this semicolon
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Path`
[INFO] [stdout]  --> src/client/unit_part_gpu.rs:5:17
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::path::{Path, PathBuf};
[INFO] [stdout]   |                 ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]   --> src/gpu_obj/model_gpu.rs:46:95
[INFO] [stdout]    |
[INFO] [stdout] 46 |         let pipeline = Self::create_pipeline(device, main_bind_group_layout, format).unwrap();;
[INFO] [stdout]    |                                                                                               ^ help: remove this semicolon
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model::*`
[INFO] [stdout]  --> src/client/unit_editor.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::model::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `gpu_obj::model_gpu::ModelGpu`
[INFO] [stdout]  --> src/client/unit_editor.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use gpu_obj::model_gpu::ModelGpu;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BindGroup`, `RenderPass`
[INFO] [stdout]  --> src/gpu_obj/trait_gpu.rs:2:12
[INFO] [stdout]   |
[INFO] [stdout] 2 | use wgpu::{BindGroup, BindGroupLayout, RenderPass, TextureFormat};
[INFO] [stdout]   |            ^^^^^^^^^                   ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Vector2`
[INFO] [stdout]  --> src/client/unit_editor.rs:7:27
[INFO] [stdout]   |
[INFO] [stdout] 7 | use na::{Matrix4, Point3, Vector2, Vector3, Vector4};
[INFO] [stdout]   |                           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model`
[INFO] [stdout]  --> src/gpu_obj/unit_icon.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::model;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]   --> src/gpu_obj/unit_icon.rs:29:95
[INFO] [stdout]    |
[INFO] [stdout] 29 |         let pipeline = Self::create_pipeline(device, main_bind_group_layout, format).unwrap();;
[INFO] [stdout]    |                                                                                               ^ help: remove this semicolon
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `HashMap`, `HashSet`
[INFO] [stdout]  --> src/client/unit_editor.rs:8:24
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::collections::{HashMap, HashSet};
[INFO] [stdout]   |                        ^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]   --> src/gpu_obj/water.rs:62:27
[INFO] [stdout]    |
[INFO] [stdout] 62 |                 .unwrap();;
[INFO] [stdout]    |                           ^ help: remove this semicolon
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Path`
[INFO] [stdout]  --> src/client/unit_editor.rs:9:17
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::path::{Path, PathBuf};
[INFO] [stdout]   |                 ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BufReader`
[INFO] [stdout]    --> src/client/unit_editor.rs:228:23
[INFO] [stdout]     |
[INFO] [stdout] 228 |         use std::io::{BufReader, BufWriter};
[INFO] [stdout]     |                       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BufWriter`
[INFO] [stdout]    --> src/client/unit_editor.rs:244:34
[INFO] [stdout]     |
[INFO] [stdout] 244 |         use std::io::{BufReader, BufWriter};
[INFO] [stdout]     |                                  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::unit`
[INFO] [stdout]  --> src/mobile.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::unit;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]    --> src/client/heightmap_editor.rs:328:13
[INFO] [stdout]     |
[INFO] [stdout] 328 |         use std::io::BufReader;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `PathBuf`, `Path`
[INFO] [stdout]  --> src/mobile.rs:7:17
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::path::{Path, PathBuf};
[INFO] [stdout]   |                 ^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]   --> src/mobile.rs:37:20
[INFO] [stdout]    |
[INFO] [stdout] 37 |         let diff = (other - self);
[INFO] [stdout]    |                    ^            ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 37 -         let diff = (other - self);
[INFO] [stdout] 37 +         let diff = other - self;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::unit`
[INFO] [stdout]  --> src/moddef.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::unit;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::prelude::*`
[INFO] [stdout]  --> src/net_client.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::io::prelude::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]  --> src/net_client.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::io::BufReader;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::net::TcpListener`
[INFO] [stdout]  --> src/net_client.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::net::TcpListener;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::client::*`
[INFO] [stdout]  --> src/unit.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use super::client::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model::*`
[INFO] [stdout]  --> src/unit.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::model::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::utils::FileTree`
[INFO] [stdout]  --> src/unit.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::utils::FileTree;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `gpu_obj::model_gpu::ModelGpu`
[INFO] [stdout]  --> src/unit.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use gpu_obj::model_gpu::ModelGpu;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Vector2`, `Vector3`
[INFO] [stdout]  --> src/unit.rs:6:27
[INFO] [stdout]   |
[INFO] [stdout] 6 | use na::{Matrix4, Point3, Vector2, Vector3};
[INFO] [stdout]   |                           ^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `HashMap`, `HashSet`
[INFO] [stdout]  --> src/unit.rs:8:24
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::collections::{HashMap, HashSet};
[INFO] [stdout]   |                        ^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Path`
[INFO] [stdout]  --> src/unit.rs:9:17
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::path::{Path, PathBuf};
[INFO] [stdout]   |                 ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around pattern
[INFO] [stdout]   --> src/client/misc.rs:19:13
[INFO] [stdout]    |
[INFO] [stdout] 19 |         for (model_gpu_state) in self.unit_part_gpu.states.iter_mut() {
[INFO] [stdout]    |             ^               ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 19 -         for (model_gpu_state) in self.unit_part_gpu.states.iter_mut() {
[INFO] [stdout] 19 +         for model_gpu_state in self.unit_part_gpu.states.iter_mut() {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `IsometryMatrix3`, `Point3`, `Vector2`, `Vector4`
[INFO] [stdout]  --> src/utils.rs:2:10
[INFO] [stdout]   |
[INFO] [stdout] 2 | use na::{IsometryMatrix3, Matrix4, Point3, Vector2, Vector3, Vector4};
[INFO] [stdout]   |          ^^^^^^^^^^^^^^^           ^^^^^^  ^^^^^^^           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around function argument
[INFO] [stdout]    --> src/client/misc.rs:159:25
[INFO] [stdout]     |
[INFO] [stdout] 159 |                         (t * 2.0),
[INFO] [stdout]     |                         ^       ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 159 -                         (t * 2.0),
[INFO] [stdout] 159 +                         t * 2.0,
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HashMap`
[INFO] [stdout]  --> src/utils.rs:6:24
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::collections::{HashMap, HashSet};
[INFO] [stdout]   |                        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::botdef`
[INFO] [stdout]  --> src/client/play.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::botdef;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DirEntry`
[INFO] [stdout]    --> src/utils.rs:134:21
[INFO] [stdout]     |
[INFO] [stdout] 134 | use std::fs::{self, DirEntry};
[INFO] [stdout]     |                     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io`
[INFO] [stdout]    --> src/utils.rs:135:5
[INFO] [stdout]     |
[INFO] [stdout] 135 | use std::io;
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `imgui::*`
[INFO] [stdout]  --> src/client/play.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use imgui::*;
[INFO] [stdout]   |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Path`
[INFO] [stdout]    --> src/utils.rs:136:17
[INFO] [stdout]     |
[INFO] [stdout] 136 | use std::path::{Path, PathBuf};
[INFO] [stdout]     |                 ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BigEndian`, `ReadBytesExt`
[INFO] [stdout]    --> src/utils.rs:177:25
[INFO] [stdout]     |
[INFO] [stdout] 177 |         use byteorder::{BigEndian, ReadBytesExt};
[INFO] [stdout]     |                         ^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Isometry3`, `Vector2`, `Vector4`
[INFO] [stdout]  --> src/client/play.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | use na::{Isometry3, Matrix4, Point3, Vector2, Vector3, Vector4};
[INFO] [stdout]   |          ^^^^^^^^^                   ^^^^^^^           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Duration`, `Instant`
[INFO] [stdout]   --> src/client/play.rs:10:17
[INFO] [stdout]    |
[INFO] [stdout] 10 | use std::time::{Duration, Instant};
[INFO] [stdout]    |                 ^^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::frame::Player`
[INFO] [stdout]  --> src/client/render.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::frame::Player;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `IsometryMatrix3`, `Matrix4`, `Vector2`, `Vector4`
[INFO] [stdout]  --> src/client/render.rs:8:10
[INFO] [stdout]   |
[INFO] [stdout] 8 | use na::{IsometryMatrix3, Matrix4, Point3, Vector2, Vector3, Vector4};
[INFO] [stdout]   |          ^^^^^^^^^^^^^^^  ^^^^^^^          ^^^^^^^           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/client/render.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `unit_part_gpu::UnitPartGpu`
[INFO] [stdout]   --> src/client/render.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use unit_part_gpu::UnitPartGpu;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HashMap`
[INFO] [stdout]   --> src/client/mod.rs:34:24
[INFO] [stdout]    |
[INFO] [stdout] 34 | use std::collections::{HashMap, HashSet};
[INFO] [stdout]    |                        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PathBuf`
[INFO] [stdout]   --> src/client/mod.rs:35:23
[INFO] [stdout]    |
[INFO] [stdout] 35 | use std::path::{Path, PathBuf};
[INFO] [stdout]    |                       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Instant`
[INFO] [stdout]   --> src/client/mod.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | use std::time::Instant;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BufferMapAsyncResult`, `Extent3d`, `SwapChain`
[INFO] [stdout]   --> src/client/mod.rs:38:12
[INFO] [stdout]    |
[INFO] [stdout] 38 | use wgpu::{BufferMapAsyncResult, Extent3d, SwapChain, TextureFormat};
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around type
[INFO] [stdout]    --> src/client/mod.rs:154:10
[INFO] [stdout]     |
[INFO] [stdout] 154 |     ) -> (Self) {
[INFO] [stdout]     |          ^    ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 154 -     ) -> (Self) {
[INFO] [stdout] 154 +     ) -> Self {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: the item `unbounded` is imported redundantly
[INFO] [stdout]    --> src/client/mod.rs:436:17
[INFO] [stdout]     |
[INFO] [stdout] 1   | use crate::*;
[INFO] [stdout]     |     -------- the item `unbounded` is already imported here
[INFO] [stdout] ...
[INFO] [stdout] 436 |             use crossbeam_channel::unbounded;
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Result`
[INFO] [stdout]    --> src/client/mod.rs:437:50
[INFO] [stdout]     |
[INFO] [stdout] 437 |             use notify::{watcher, RecursiveMode, Result};
[INFO] [stdout]     |                                                  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]    --> src/client/mod.rs:608:9
[INFO] [stdout]     |
[INFO] [stdout] 608 |         (this)
[INFO] [stdout]     |         ^    ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 608 -         (this)
[INFO] [stdout] 608 +         this
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around pattern
[INFO] [stdout]    --> src/client/mod.rs:927:25
[INFO] [stdout]     |
[INFO] [stdout] 927 |                     for (model_gpu_state) in self.unit_part_gpu.states.iter_mut() {
[INFO] [stdout]     |                         ^               ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 927 -                     for (model_gpu_state) in self.unit_part_gpu.states.iter_mut() {
[INFO] [stdout] 927 +                     for model_gpu_state in self.unit_part_gpu.states.iter_mut() {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Point3`
[INFO] [stdout]   --> src/frame.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | use na::{Point3, Vector3};
[INFO] [stdout]    |          ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::unit`
[INFO] [stdout]   --> src/frame.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use crate::unit;
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Matrix4`
[INFO] [stdout]  --> src/frame_server/mod.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | use na::{Matrix4, Point3, Vector2, Vector3};
[INFO] [stdout]   |          ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused label
[INFO] [stdout]    --> src/frame_server/mod.rs:393:25
[INFO] [stdout]     |
[INFO] [stdout] 393 |                         'bot_test: for kbot_id in kbots_in_proximity.iter() {
[INFO] [stdout]     |                         ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_labels)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]    --> src/frame_server/mod.rs:452:10
[INFO] [stdout]     |
[INFO] [stdout] 452 |         };
[INFO] [stdout]     |          ^ help: remove this semicolon
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(redundant_semicolons)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::slice`
[INFO] [stdout]  --> src/glsl.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::slice;
[INFO] [stdout]   |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]   --> src/gpu_obj/arrow_gpu.rs:45:95
[INFO] [stdout]    |
[INFO] [stdout] 45 |         let pipeline = Self::create_pipeline(device, main_bind_group_layout, format).unwrap();;
[INFO] [stdout]    |                                                                                               ^ help: remove this semicolon
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model`
[INFO] [stdout]  --> src/gpu_obj/blit_texture.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::model;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model`
[INFO] [stdout]  --> src/gpu_obj/explosion.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::model;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BigEndian`, `ReadBytesExt`
[INFO] [stdout]    --> src/gpu_obj/explosion.rs:312:25
[INFO] [stdout]     |
[INFO] [stdout] 312 |         use byteorder::{BigEndian, ReadBytesExt};
[INFO] [stdout]     |                         ^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::slice`
[INFO] [stdout]   --> src/gpu_obj/glsl_compiler.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | use std::slice;
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model`
[INFO] [stdout]  --> src/gpu_obj/health_bar.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::model;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model`
[INFO] [stdout]  --> src/gpu_obj/line.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::model;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]   --> src/gpu_obj/line.rs:29:95
[INFO] [stdout]    |
[INFO] [stdout] 29 |         let pipeline = Self::create_pipeline(device, main_bind_group_layout, format).unwrap();;
[INFO] [stdout]    |                                                                                               ^ help: remove this semicolon
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]   --> src/gpu_obj/model_gpu.rs:46:95
[INFO] [stdout]    |
[INFO] [stdout] 46 |         let pipeline = Self::create_pipeline(device, main_bind_group_layout, format).unwrap();;
[INFO] [stdout]    |                                                                                               ^ help: remove this semicolon
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BindGroup`, `RenderPass`
[INFO] [stdout]  --> src/gpu_obj/trait_gpu.rs:2:12
[INFO] [stdout]   |
[INFO] [stdout] 2 | use wgpu::{BindGroup, BindGroupLayout, RenderPass, TextureFormat};
[INFO] [stdout]   |            ^^^^^^^^^                   ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model`
[INFO] [stdout]  --> src/gpu_obj/unit_icon.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::model;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]   --> src/gpu_obj/unit_icon.rs:29:95
[INFO] [stdout]    |
[INFO] [stdout] 29 |         let pipeline = Self::create_pipeline(device, main_bind_group_layout, format).unwrap();;
[INFO] [stdout]    |                                                                                               ^ help: remove this semicolon
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]   --> src/gpu_obj/water.rs:62:27
[INFO] [stdout]    |
[INFO] [stdout] 62 |                 .unwrap();;
[INFO] [stdout]    |                           ^ help: remove this semicolon
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::unit`
[INFO] [stdout]  --> src/mobile.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::unit;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `PathBuf`, `Path`
[INFO] [stdout]  --> src/mobile.rs:7:17
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::path::{Path, PathBuf};
[INFO] [stdout]   |                 ^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]   --> src/mobile.rs:37:20
[INFO] [stdout]    |
[INFO] [stdout] 37 |         let diff = (other - self);
[INFO] [stdout]    |                    ^            ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 37 -         let diff = (other - self);
[INFO] [stdout] 37 +         let diff = other - self;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::unit`
[INFO] [stdout]  --> src/moddef.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::unit;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::prelude::*`
[INFO] [stdout]  --> src/net_client.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::io::prelude::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]  --> src/net_client.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::io::BufReader;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::net::TcpListener`
[INFO] [stdout]  --> src/net_client.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::net::TcpListener;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::client::*`
[INFO] [stdout]  --> src/unit.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use super::client::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model::*`
[INFO] [stdout]  --> src/unit.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::model::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::utils::FileTree`
[INFO] [stdout]  --> src/unit.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::utils::FileTree;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `gpu_obj::model_gpu::ModelGpu`
[INFO] [stdout]  --> src/unit.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use gpu_obj::model_gpu::ModelGpu;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Vector2`, `Vector3`
[INFO] [stdout]  --> src/unit.rs:6:27
[INFO] [stdout]   |
[INFO] [stdout] 6 | use na::{Matrix4, Point3, Vector2, Vector3};
[INFO] [stdout]   |                           ^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `HashMap`, `HashSet`
[INFO] [stdout]  --> src/unit.rs:8:24
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::collections::{HashMap, HashSet};
[INFO] [stdout]   |                        ^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Path`
[INFO] [stdout]  --> src/unit.rs:9:17
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::path::{Path, PathBuf};
[INFO] [stdout]   |                 ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `IsometryMatrix3`, `Point3`, `Vector2`, `Vector4`
[INFO] [stdout]  --> src/utils.rs:2:10
[INFO] [stdout]   |
[INFO] [stdout] 2 | use na::{IsometryMatrix3, Matrix4, Point3, Vector2, Vector3, Vector4};
[INFO] [stdout]   |          ^^^^^^^^^^^^^^^           ^^^^^^  ^^^^^^^           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HashMap`
[INFO] [stdout]  --> src/utils.rs:6:24
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::collections::{HashMap, HashSet};
[INFO] [stdout]   |                        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DirEntry`
[INFO] [stdout]    --> src/utils.rs:134:21
[INFO] [stdout]     |
[INFO] [stdout] 134 | use std::fs::{self, DirEntry};
[INFO] [stdout]     |                     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io`
[INFO] [stdout]    --> src/utils.rs:135:5
[INFO] [stdout]     |
[INFO] [stdout] 135 | use std::io;
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Path`
[INFO] [stdout]    --> src/utils.rs:136:17
[INFO] [stdout]     |
[INFO] [stdout] 136 | use std::path::{Path, PathBuf};
[INFO] [stdout]     |                 ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BigEndian`, `ReadBytesExt`
[INFO] [stdout]    --> src/utils.rs:177:25
[INFO] [stdout]     |
[INFO] [stdout] 177 |         use byteorder::{BigEndian, ReadBytesExt};
[INFO] [stdout]     |                         ^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::prelude`
[INFO] [stdout]    --> src/client/unit_editor.rs:227:13
[INFO] [stdout]     |
[INFO] [stdout] 227 |         use std::io::prelude::*;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::prelude`
[INFO] [stdout]    --> src/client/unit_editor.rs:243:13
[INFO] [stdout]     |
[INFO] [stdout] 243 |         use std::io::prelude::*;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::prelude`
[INFO] [stdout]    --> src/client/heightmap_editor.rs:327:13
[INFO] [stdout]     |
[INFO] [stdout] 327 |         use std::io::prelude::*;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::prelude`
[INFO] [stdout]    --> src/client/unit_editor.rs:227:13
[INFO] [stdout]     |
[INFO] [stdout] 227 |         use std::io::prelude::*;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::prelude`
[INFO] [stdout]    --> src/client/unit_editor.rs:243:13
[INFO] [stdout]     |
[INFO] [stdout] 243 |         use std::io::prelude::*;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::prelude`
[INFO] [stdout]    --> src/client/heightmap_editor.rs:327:13
[INFO] [stdout]     |
[INFO] [stdout] 327 |         use std::io::prelude::*;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `id`
[INFO] [stdout]    --> src/client/unit_editor.rs:104:21
[INFO] [stdout]     |
[INFO] [stdout] 104 |                     id,
[INFO] [stdout]     |                     ^^ help: try ignoring the field: `id: _`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `radius`
[INFO] [stdout]    --> src/client/unit_editor.rs:106:21
[INFO] [stdout]     |
[INFO] [stdout] 106 |                     radius,
[INFO] [stdout]     |                     ^^^^^^ help: try ignoring the field: `radius: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `metal_cost`
[INFO] [stdout]    --> src/client/unit_editor.rs:115:21
[INFO] [stdout]     |
[INFO] [stdout] 115 |                     metal_cost,
[INFO] [stdout]     |                     ^^^^^^^^^^ help: try ignoring the field: `metal_cost: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `part_tree`
[INFO] [stdout]    --> src/client/unit_editor.rs:116:21
[INFO] [stdout]     |
[INFO] [stdout] 116 |                     part_tree,
[INFO] [stdout]     |                     ^^^^^^^^^ help: try ignoring the field: `part_tree: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/client/unit_editor.rs:236:13
[INFO] [stdout]     |
[INFO] [stdout] 236 |         let mut buf_w = BufWriter::new(file);
[INFO] [stdout]     |             ----^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/client/unit_editor.rs:251:13
[INFO] [stdout]     |
[INFO] [stdout] 251 |         let mut buf_r = BufReader::new(file);
[INFO] [stdout]     |             ----^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `deleter`
[INFO] [stdout]    --> src/client/unit_editor.rs:290:25
[INFO] [stdout]     |
[INFO] [stdout] 290 |                     let deleter = unit_editor.botdef.part_tree.remove_node(part_tree.id);
[INFO] [stdout]     |                         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_deleter`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/client/unit_editor.rs:492:46
[INFO] [stdout]     |
[INFO] [stdout] 492 |                         ModelGpuState::Error(e) => {
[INFO] [stdout]     |                                              ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/client/unit_editor.rs:583:51
[INFO] [stdout]     |
[INFO] [stdout] 583 |                         Some(ModelGpuState::Error(e)) => {
[INFO] [stdout]     |                                                   ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/client/heightmap_editor.rs:336:13
[INFO] [stdout]     |
[INFO] [stdout] 336 |         let mut buf_w = BufWriter::new(file);
[INFO] [stdout]     |             ----^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `encoder`
[INFO] [stdout]    --> src/client/misc.rs:127:63
[INFO] [stdout]     |
[INFO] [stdout] 127 |     pub fn upload_to_gpu(&mut self, view_proj: &Matrix4<f32>, encoder: &mut wgpu::CommandEncoder) {
[INFO] [stdout]     |                                                               ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_encoder`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `id`
[INFO] [stdout]    --> src/client/unit_editor.rs:104:21
[INFO] [stdout]     |
[INFO] [stdout] 104 |                     id,
[INFO] [stdout]     |                     ^^ help: try ignoring the field: `id: _`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `radius`
[INFO] [stdout]    --> src/client/unit_editor.rs:106:21
[INFO] [stdout]     |
[INFO] [stdout] 106 |                     radius,
[INFO] [stdout]     |                     ^^^^^^ help: try ignoring the field: `radius: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `metal_cost`
[INFO] [stdout]    --> src/client/unit_editor.rs:115:21
[INFO] [stdout]     |
[INFO] [stdout] 115 |                     metal_cost,
[INFO] [stdout]     |                     ^^^^^^^^^^ help: try ignoring the field: `metal_cost: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `part_tree`
[INFO] [stdout]    --> src/client/unit_editor.rs:116:21
[INFO] [stdout]     |
[INFO] [stdout] 116 |                     part_tree,
[INFO] [stdout]     |                     ^^^^^^^^^ help: try ignoring the field: `part_tree: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/client/unit_editor.rs:236:13
[INFO] [stdout]     |
[INFO] [stdout] 236 |         let mut buf_w = BufWriter::new(file);
[INFO] [stdout]     |             ----^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/client/unit_editor.rs:251:13
[INFO] [stdout]     |
[INFO] [stdout] 251 |         let mut buf_r = BufReader::new(file);
[INFO] [stdout]     |             ----^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `deleter`
[INFO] [stdout]    --> src/client/unit_editor.rs:290:25
[INFO] [stdout]     |
[INFO] [stdout] 290 |                     let deleter = unit_editor.botdef.part_tree.remove_node(part_tree.id);
[INFO] [stdout]     |                         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_deleter`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/client/unit_editor.rs:492:46
[INFO] [stdout]     |
[INFO] [stdout] 492 |                         ModelGpuState::Error(e) => {
[INFO] [stdout]     |                                              ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/client/play.rs:70:21
[INFO] [stdout]    |
[INFO] [stdout] 70 |                 let mut moddef = crate::moddef::ModDef {
[INFO] [stdout]    |                     ----^^^^^^
[INFO] [stdout]    |                     |
[INFO] [stdout]    |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `delta_sim_sec`
[INFO] [stdout]    --> src/client/play.rs:114:9
[INFO] [stdout]     |
[INFO] [stdout] 114 |         delta_sim_sec: f32,
[INFO] [stdout]     |         ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_delta_sim_sec`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `encoder`
[INFO] [stdout]    --> src/client/play.rs:115:9
[INFO] [stdout]     |
[INFO] [stdout] 115 |         encoder: &mut wgpu::CommandEncoder,
[INFO] [stdout]     |         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_encoder`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/client/unit_editor.rs:583:51
[INFO] [stdout]     |
[INFO] [stdout] 583 |                         Some(ModelGpuState::Error(e)) => {
[INFO] [stdout]     |                                                   ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]   --> src/client/render.rs:87:17
[INFO] [stdout]    |
[INFO] [stdout] 87 |                 _ => {
[INFO] [stdout]    |                 ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unreachable_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]   --> src/client/render.rs:45:21
[INFO] [stdout]    |
[INFO] [stdout] 45 |                     from,
[INFO] [stdout]    |                     ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]   --> src/client/render.rs:54:21
[INFO] [stdout]    |
[INFO] [stdout] 54 |                     from,
[INFO] [stdout]    |                     ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]   --> src/client/render.rs:61:21
[INFO] [stdout]    |
[INFO] [stdout] 61 |                     from,
[INFO] [stdout]    |                     ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]   --> src/client/render.rs:78:21
[INFO] [stdout]    |
[INFO] [stdout] 78 |                     from,
[INFO] [stdout]    |                     ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]   --> src/client/render.rs:82:21
[INFO] [stdout]    |
[INFO] [stdout] 82 |                     from,
[INFO] [stdout]    |                     ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `can_be_built`
[INFO] [stdout]    --> src/client/render.rs:405:29
[INFO] [stdout]     |
[INFO] [stdout] 405 |                         let can_be_built: Vec<_> = self
[INFO] [stdout]     |                             ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_can_be_built`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `d`
[INFO] [stdout]    --> src/client/render.rs:274:42
[INFO] [stdout]     |
[INFO] [stdout] 274 | ...                   .filter(|(n, d)| *n != "frame_time")
[INFO] [stdout]     |                                    ^ help: if this is intentional, prefix it with an underscore: `_d`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `d`
[INFO] [stdout]    --> src/client/render.rs:298:42
[INFO] [stdout]     |
[INFO] [stdout] 298 | ...                   .filter(|(n, d)| *n != "total")
[INFO] [stdout]     |                                    ^ help: if this is intentional, prefix it with an underscore: `_d`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/client/heightmap_editor.rs:336:13
[INFO] [stdout]     |
[INFO] [stdout] 336 |         let mut buf_w = BufWriter::new(file);
[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/client/render.rs:142:21
[INFO] [stdout]     |
[INFO] [stdout] 142 |                 let mut generic_gpu = ModelGpu::new(
[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/client/render.rs:149:21
[INFO] [stdout]     |
[INFO] [stdout] 149 |                 let mut generic_gpu_state_new = unit_part_gpu::ModelGpuState::Ready(generic_gpu);
[INFO] [stdout]     |                     ----^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `encoder`
[INFO] [stdout]    --> src/client/misc.rs:127:63
[INFO] [stdout]     |
[INFO] [stdout] 127 |     pub fn upload_to_gpu(&mut self, view_proj: &Matrix4<f32>, encoder: &mut wgpu::CommandEncoder) {
[INFO] [stdout]     |                                                               ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_encoder`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/client/play.rs:70:21
[INFO] [stdout]    |
[INFO] [stdout] 70 |                 let mut moddef = crate::moddef::ModDef {
[INFO] [stdout]    |                     ----^^^^^^
[INFO] [stdout]    |                     |
[INFO] [stdout]    |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `delta_sim_sec`
[INFO] [stdout]    --> src/client/play.rs:114:9
[INFO] [stdout]     |
[INFO] [stdout] 114 |         delta_sim_sec: f32,
[INFO] [stdout]     |         ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_delta_sim_sec`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `encoder`
[INFO] [stdout]    --> src/client/play.rs:115:9
[INFO] [stdout]     |
[INFO] [stdout] 115 |         encoder: &mut wgpu::CommandEncoder,
[INFO] [stdout]     |         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_encoder`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]   --> src/client/render.rs:87:17
[INFO] [stdout]    |
[INFO] [stdout] 87 |                 _ => {
[INFO] [stdout]    |                 ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unreachable_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]   --> src/client/render.rs:45:21
[INFO] [stdout]    |
[INFO] [stdout] 45 |                     from,
[INFO] [stdout]    |                     ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]   --> src/client/render.rs:54:21
[INFO] [stdout]    |
[INFO] [stdout] 54 |                     from,
[INFO] [stdout]    |                     ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]   --> src/client/render.rs:61:21
[INFO] [stdout]    |
[INFO] [stdout] 61 |                     from,
[INFO] [stdout]    |                     ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]   --> src/client/render.rs:78:21
[INFO] [stdout]    |
[INFO] [stdout] 78 |                     from,
[INFO] [stdout]    |                     ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]   --> src/client/render.rs:82:21
[INFO] [stdout]    |
[INFO] [stdout] 82 |                     from,
[INFO] [stdout]    |                     ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `can_be_built`
[INFO] [stdout]    --> src/client/render.rs:405:29
[INFO] [stdout]     |
[INFO] [stdout] 405 |                         let can_be_built: Vec<_> = self
[INFO] [stdout]     |                             ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_can_be_built`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `d`
[INFO] [stdout]    --> src/client/render.rs:274:42
[INFO] [stdout]     |
[INFO] [stdout] 274 | ...                   .filter(|(n, d)| *n != "frame_time")
[INFO] [stdout]     |                                    ^ help: if this is intentional, prefix it with an underscore: `_d`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `d`
[INFO] [stdout]    --> src/client/render.rs:298:42
[INFO] [stdout]     |
[INFO] [stdout] 298 | ...                   .filter(|(n, d)| *n != "total")
[INFO] [stdout]     |                                    ^ help: if this is intentional, prefix it with an underscore: `_d`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/client/render.rs:142:21
[INFO] [stdout]     |
[INFO] [stdout] 142 |                 let mut generic_gpu = ModelGpu::new(
[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/client/render.rs:149:21
[INFO] [stdout]     |
[INFO] [stdout] 149 |                 let mut generic_gpu_state_new = unit_part_gpu::ModelGpuState::Ready(generic_gpu);
[INFO] [stdout]     |                     ----^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `id`
[INFO] [stdout]   --> src/frame_server/mod.rs:98:21
[INFO] [stdout]    |
[INFO] [stdout] 98 |                     id,
[INFO] [stdout]    |                     ^^ help: try ignoring the field: `id: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `id`
[INFO] [stdout]    --> src/frame_server/mod.rs:131:21
[INFO] [stdout]     |
[INFO] [stdout] 131 |                     id,
[INFO] [stdout]     |                     ^^ help: try ignoring the field: `id: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `to`
[INFO] [stdout]    --> src/frame_server/mod.rs:598:9
[INFO] [stdout]     |
[INFO] [stdout] 598 |         to,
[INFO] [stdout]     |         ^^ help: try ignoring the field: `to: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]    --> src/frame_server/mod.rs:600:9
[INFO] [stdout]     |
[INFO] [stdout] 600 |         from,
[INFO] [stdout]     |         ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `resources_surplus`
[INFO] [stdout]    --> src/frame_server/mod.rs:650:13
[INFO] [stdout]     |
[INFO] [stdout] 650 |     let mut resources_surplus = FnvHashMap::<Id<Player>, ResourceSurplus>::default();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_resources_surplus`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]    --> src/frame_server/mod.rs:654:9
[INFO] [stdout]     |
[INFO] [stdout] 654 |         from,
[INFO] [stdout]     |         ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `arrows`
[INFO] [stdout]    --> src/frame_server/mod.rs:261:5
[INFO] [stdout]     |
[INFO] [stdout] 261 |     arrows: &mut Vec<Arrow>,
[INFO] [stdout]     |     ^^^^^^ help: if this is intentional, prefix it with an underscore: `_arrows`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/frame_server/mod.rs:650:9
[INFO] [stdout]     |
[INFO] [stdout] 650 |     let mut resources_surplus = FnvHashMap::<Id<Player>, ResourceSurplus>::default();
[INFO] [stdout]     |         ----^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `id`
[INFO] [stdout]   --> src/frame_server/mod.rs:98:21
[INFO] [stdout]    |
[INFO] [stdout] 98 |                     id,
[INFO] [stdout]    |                     ^^ help: try ignoring the field: `id: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `id`
[INFO] [stdout]    --> src/frame_server/mod.rs:131:21
[INFO] [stdout]     |
[INFO] [stdout] 131 |                     id,
[INFO] [stdout]     |                     ^^ help: try ignoring the field: `id: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start`
[INFO] [stdout]    --> src/gpu_obj/heightmap_gpu.rs:188:13
[INFO] [stdout]     |
[INFO] [stdout] 188 |         let start = std::time::Instant::now();
[INFO] [stdout]     |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_start`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `update_left` is never read
[INFO] [stdout]    --> src/gpu_obj/heightmap_gpu.rs:774:13
[INFO] [stdout]     |
[INFO] [stdout] 774 |             update_left -= update_to_do;
[INFO] [stdout]     |             ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `to`
[INFO] [stdout]    --> src/frame_server/mod.rs:598:9
[INFO] [stdout]     |
[INFO] [stdout] 598 |         to,
[INFO] [stdout]     |         ^^ help: try ignoring the field: `to: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]    --> src/frame_server/mod.rs:600:9
[INFO] [stdout]     |
[INFO] [stdout] 600 |         from,
[INFO] [stdout]     |         ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `resources_surplus`
[INFO] [stdout]    --> src/frame_server/mod.rs:650:13
[INFO] [stdout]     |
[INFO] [stdout] 650 |     let mut resources_surplus = FnvHashMap::<Id<Player>, ResourceSurplus>::default();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_resources_surplus`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]    --> src/frame_server/mod.rs:654:9
[INFO] [stdout]     |
[INFO] [stdout] 654 |         from,
[INFO] [stdout]     |         ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `arrows`
[INFO] [stdout]    --> src/frame_server/mod.rs:261:5
[INFO] [stdout]     |
[INFO] [stdout] 261 |     arrows: &mut Vec<Arrow>,
[INFO] [stdout]     |     ^^^^^^ help: if this is intentional, prefix it with an underscore: `_arrows`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `x`
[INFO] [stdout]   --> src/gpu_obj/heightmap_helper.rs:33:10
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub fn z(x: f32, y: f32) -> f32 {
[INFO] [stdout]    |          ^ help: if this is intentional, prefix it with an underscore: `_x`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `y`
[INFO] [stdout]   --> src/gpu_obj/heightmap_helper.rs:33:18
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub fn z(x: f32, y: f32) -> f32 {
[INFO] [stdout]    |                  ^ help: if this is intentional, prefix it with an underscore: `_y`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/frame_server/mod.rs:650:9
[INFO] [stdout]     |
[INFO] [stdout] 650 |     let mut resources_surplus = FnvHashMap::<Id<Player>, ResourceSurplus>::default();
[INFO] [stdout]     |         ----^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start`
[INFO] [stdout]    --> src/gpu_obj/heightmap_gpu.rs:188:13
[INFO] [stdout]     |
[INFO] [stdout] 188 |         let start = std::time::Instant::now();
[INFO] [stdout]     |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_start`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `device`
[INFO] [stdout]    --> src/gpu_obj/post_fx.rs:144:50
[INFO] [stdout]     |
[INFO] [stdout] 144 |     pub fn render(&self, rpass: &mut RenderPass, device: &Device, main_bind_group: &BindGroup) {
[INFO] [stdout]     |                                                  ^^^^^^ help: if this is intentional, prefix it with an underscore: `_device`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `device`
[INFO] [stdout]    --> src/gpu_obj/post_fxaa.rs:151:50
[INFO] [stdout]     |
[INFO] [stdout] 151 |     pub fn render(&self, rpass: &mut RenderPass, device: &Device, main_bind_group: &BindGroup) {
[INFO] [stdout]     |                                                  ^^^^^^ help: if this is intentional, prefix it with an underscore: `_device`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `device`
[INFO] [stdout]    --> src/gpu_obj/texture_view_bicopy.rs:141:50
[INFO] [stdout]     |
[INFO] [stdout] 141 |     pub fn render(&self, rpass: &mut RenderPass, device: &Device, main_bind_group: &BindGroup) {
[INFO] [stdout]     |                                                  ^^^^^^ help: if this is intentional, prefix it with an underscore: `_device`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `update_left` is never read
[INFO] [stdout]    --> src/gpu_obj/heightmap_gpu.rs:774:13
[INFO] [stdout]     |
[INFO] [stdout] 774 |             update_left -= update_to_do;
[INFO] [stdout]     |             ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `vertex_size`
[INFO] [stdout]    --> src/gpu_obj/water.rs:146:13
[INFO] [stdout]     |
[INFO] [stdout] 146 |         let vertex_size = std::mem::size_of::<model::Vertex>();
[INFO] [stdout]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_vertex_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `x`
[INFO] [stdout]   --> src/gpu_obj/heightmap_helper.rs:33:10
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub fn z(x: f32, y: f32) -> f32 {
[INFO] [stdout]    |          ^ help: if this is intentional, prefix it with an underscore: `_x`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `y`
[INFO] [stdout]   --> src/gpu_obj/heightmap_helper.rs:33:18
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub fn z(x: f32, y: f32) -> f32 {
[INFO] [stdout]    |                  ^ help: if this is intentional, prefix it with an underscore: `_y`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `j`
[INFO] [stdout]   --> src/heightmap_phy.rs:35:13
[INFO] [stdout]    |
[INFO] [stdout] 35 |         for j in 0..height {
[INFO] [stdout]    |             ^ help: if this is intentional, prefix it with an underscore: `_j`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `i`
[INFO] [stdout]   --> src/heightmap_phy.rs:36:17
[INFO] [stdout]    |
[INFO] [stdout] 36 |             for i in 0..width {
[INFO] [stdout]    |                 ^ help: if this is intentional, prefix it with an underscore: `_i`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `x`
[INFO] [stdout]   --> src/manager.rs:89:79
[INFO] [stdout]    |
[INFO] [stdout] 89 | ...                   frame::FrameEventFromPlayer::ReplaceFrame(x) => false,
[INFO] [stdout]    |                                                                 ^ help: if this is intentional, prefix it with an underscore: `_x`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `max`
[INFO] [stdout]   --> src/mobile.rs:35:13
[INFO] [stdout]    |
[INFO] [stdout] 35 |         let max = other + cone_angle;
[INFO] [stdout]    |             ^^^ help: if this is intentional, prefix it with an underscore: `_max`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `min`
[INFO] [stdout]   --> src/mobile.rs:36:13
[INFO] [stdout]    |
[INFO] [stdout] 36 |         let min = other - cone_angle;
[INFO] [stdout]    |             ^^^ help: if this is intentional, prefix it with an underscore: `_min`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `device`
[INFO] [stdout]    --> src/gpu_obj/post_fx.rs:144:50
[INFO] [stdout]     |
[INFO] [stdout] 144 |     pub fn render(&self, rpass: &mut RenderPass, device: &Device, main_bind_group: &BindGroup) {
[INFO] [stdout]     |                                                  ^^^^^^ help: if this is intentional, prefix it with an underscore: `_device`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `device`
[INFO] [stdout]    --> src/gpu_obj/post_fxaa.rs:151:50
[INFO] [stdout]     |
[INFO] [stdout] 151 |     pub fn render(&self, rpass: &mut RenderPass, device: &Device, main_bind_group: &BindGroup) {
[INFO] [stdout]     |                                                  ^^^^^^ help: if this is intentional, prefix it with an underscore: `_device`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `device`
[INFO] [stdout]    --> src/gpu_obj/texture_view_bicopy.rs:141:50
[INFO] [stdout]     |
[INFO] [stdout] 141 |     pub fn render(&self, rpass: &mut RenderPass, device: &Device, main_bind_group: &BindGroup) {
[INFO] [stdout]     |                                                  ^^^^^^ help: if this is intentional, prefix it with an underscore: `_device`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `vertex_size`
[INFO] [stdout]    --> src/gpu_obj/water.rs:146:13
[INFO] [stdout]     |
[INFO] [stdout] 146 |         let vertex_size = std::mem::size_of::<model::Vertex>();
[INFO] [stdout]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_vertex_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `j`
[INFO] [stdout]   --> src/heightmap_phy.rs:35:13
[INFO] [stdout]    |
[INFO] [stdout] 35 |         for j in 0..height {
[INFO] [stdout]    |             ^ help: if this is intentional, prefix it with an underscore: `_j`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `i`
[INFO] [stdout]   --> src/heightmap_phy.rs:36:17
[INFO] [stdout]    |
[INFO] [stdout] 36 |             for i in 0..width {
[INFO] [stdout]    |                 ^ help: if this is intentional, prefix it with an underscore: `_i`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `x`
[INFO] [stdout]   --> src/manager.rs:89:79
[INFO] [stdout]    |
[INFO] [stdout] 89 | ...                   frame::FrameEventFromPlayer::ReplaceFrame(x) => false,
[INFO] [stdout]    |                                                                 ^ help: if this is intentional, prefix it with an underscore: `_x`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `max`
[INFO] [stdout]   --> src/mobile.rs:35:13
[INFO] [stdout]    |
[INFO] [stdout] 35 |         let max = other + cone_angle;
[INFO] [stdout]    |             ^^^ help: if this is intentional, prefix it with an underscore: `_max`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `min`
[INFO] [stdout]   --> src/mobile.rs:36:13
[INFO] [stdout]    |
[INFO] [stdout] 36 |         let min = other - cone_angle;
[INFO] [stdout]    |             ^^^ help: if this is intentional, prefix it with an underscore: `_min`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame_server`
[INFO] [stdout]   --> src/main.rs:58:9
[INFO] [stdout]    |
[INFO] [stdout] 58 |     let frame_server =
[INFO] [stdout]    |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_frame_server`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `manager`
[INFO] [stdout]   --> src/main.rs:64:9
[INFO] [stdout]    |
[INFO] [stdout] 64 |     let manager = manager::Manager::new(
[INFO] [stdout]    |         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_manager`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `watcher` is never read
[INFO] [stdout]    --> src/client/mod.rs:134:5
[INFO] [stdout]     |
[INFO] [stdout] 84  | pub struct App {
[INFO] [stdout]     |            --- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 134 |     watcher: notify::RecommendedWatcher,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NEAR` is never used
[INFO] [stdout]  --> src/client/camera.rs:6:7
[INFO] [stdout]   |
[INFO] [stdout] 6 | const NEAR: f32 = 1.0;
[INFO] [stdout]   |       ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `path_get_mut` is never used
[INFO] [stdout]   --> src/client/unit_part_gpu.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl UnitPartGpu {
[INFO] [stdout]    | ---------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub fn path_get_mut(&mut self, path: PathBuf) -> Option<&mut ModelGpuState> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Move`, `Guard`, and `Attack` are never constructed
[INFO] [stdout]   --> src/client/uitool.rs:7:5
[INFO] [stdout]    |
[INFO] [stdout] 5  | pub enum UiTool {
[INFO] [stdout]    |          ------ variants in this enum
[INFO] [stdout] 6  |     None,
[INFO] [stdout] 7  |     Move,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 8  |     Repair,
[INFO] [stdout] 9  |     Guard,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 10 |     Attack,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `UiTool` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `energy` is never read
[INFO] [stdout]    --> src/frame_server/mod.rs:616:9
[INFO] [stdout]     |
[INFO] [stdout] 614 |     struct ResourceUsagePropMax {
[INFO] [stdout]     |            -------------------- field in this struct
[INFO] [stdout] 615 |         metal: f64,
[INFO] [stdout] 616 |         energy: f64,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `metal` and `energy` are never read
[INFO] [stdout]    --> src/frame_server/mod.rs:646:9
[INFO] [stdout]     |
[INFO] [stdout] 645 |     struct ResourceSurplus {
[INFO] [stdout]     |            --------------- fields in this struct
[INFO] [stdout] 646 |         metal: f64,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout] 647 |         energy: f64,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `noise_texture` is never read
[INFO] [stdout]   --> src/gpu_obj/blit_texture.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 6  | pub struct BlitTextureGpu {
[INFO] [stdout]    |            -------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 12 |     noise_texture: Texture,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `str_to_shader_stage` is never used
[INFO] [stdout]   --> src/gpu_obj/glsl_compiler.rs:11:4
[INFO] [stdout]    |
[INFO] [stdout] 11 | fn str_to_shader_stage(str: &str) -> ShaderStage {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `z` is never used
[INFO] [stdout]   --> src/gpu_obj/heightmap_helper.rs:33:8
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub fn z(x: f32, y: f32) -> f32 {
[INFO] [stdout]    |        ^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_texels` is never used
[INFO] [stdout]   --> src/gpu_obj/heightmap_helper.rs:47:8
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub fn create_texels(width: u32, height: u32, t: f32) -> Vec<f32> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `update_instance` is never used
[INFO] [stdout]    --> src/gpu_obj/model_gpu.rs:209:12
[INFO] [stdout]     |
[INFO] [stdout] 16  | impl ModelGpu {
[INFO] [stdout]     | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub fn update_instance(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `bind_state` is never read
[INFO] [stdout]   --> src/net_client.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct NetClientInfo {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 19 |     bind_state: BindState,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `NetClientInfo` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ID_CHARS` is never used
[INFO] [stdout]   --> src/utils.rs:28:7
[INFO] [stdout]    |
[INFO] [stdout] 28 | const ID_CHARS: [char; 62] = [
[INFO] [stdout]    |       ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ID_SIZE` is never used
[INFO] [stdout]   --> src/utils.rs:34:7
[INFO] [stdout]    |
[INFO] [stdout] 34 | const ID_SIZE: usize = 5;
[INFO] [stdout]    |       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rand_id_unsafe` is never used
[INFO] [stdout]    --> src/utils.rs:112:8
[INFO] [stdout]     |
[INFO] [stdout] 112 | pub fn rand_id_unsafe() -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `pop_set` is never used
[INFO] [stdout]    --> src/utils.rs:121:8
[INFO] [stdout]     |
[INFO] [stdout] 121 | pub fn pop_set<T: Clone + Eq + std::hash::Hash>(set: &mut HashSet<T>) -> T {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/client/mod.rs:863:13
[INFO] [stdout]     |
[INFO] [stdout] 863 |             std::mem::replace(to_update, Some(Vector3::new(vec[0], vec[1], vec[2])));
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 863 |             let _ = std::mem::replace(to_update, Some(Vector3::new(vec[0], vec[1], vec[2])));
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/client/mod.rs:865:13
[INFO] [stdout]     |
[INFO] [stdout] 865 |             std::mem::replace(to_update, None);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 865 |             let _ = std::mem::replace(to_update, None);
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/client/unit_editor.rs:237:9
[INFO] [stdout]     |
[INFO] [stdout] 237 |         serde_json::to_writer_pretty(buf_w, bot_def);
[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] 237 |         let _ = serde_json::to_writer_pretty(buf_w, bot_def);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: for loop over an `Option`. This is more readably written as an `if let` statement
[INFO] [stdout]    --> src/client/unit_editor.rs:270:37
[INFO] [stdout]     |
[INFO] [stdout] 270 |                     for node_mut in unit_editor.botdef.part_tree.find_node_mut(node.id) {
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(for_loops_over_fallibles)]` on by default
[INFO] [stdout] help: to check pattern in a loop use `while let`
[INFO] [stdout]     |
[INFO] [stdout] 270 |                     while let Some(node_mut) = unit_editor.botdef.part_tree.find_node_mut(node.id) {
[INFO] [stdout]     |                     ~~~~~~~~~~~~~~~        ~~~
[INFO] [stdout] help: consider using `if let` to clear intent
[INFO] [stdout]     |
[INFO] [stdout] 270 |                     if let Some(node_mut) = unit_editor.botdef.part_tree.find_node_mut(node.id) {
[INFO] [stdout]     |                     ~~~~~~~~~~~~        ~~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/client/heightmap_editor.rs:337:9
[INFO] [stdout]     |
[INFO] [stdout] 337 |         serde_json::to_writer_pretty(buf_w, &heightmap_gpu.phy.data);
[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] 337 |         let _ = serde_json::to_writer_pretty(buf_w, &heightmap_gpu.phy.data);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: for loop over an `Option`. This is more readably written as an `if let` statement
[INFO] [stdout]    --> src/client/misc.rs:504:41
[INFO] [stdout]     |
[INFO] [stdout] 504 | ...                   self.game_state.frame_zero.kbots.get(&id_builded)
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: to check pattern in a loop use `while let`
[INFO] [stdout]     |
[INFO] [stdout] 503 |                                     while let Some(target_kbot) = self.game_state.frame_zero.kbots.get(&id_builded)
[INFO] [stdout]     |                                     ~~~~~~~~~~~~~~~           ~~~
[INFO] [stdout] help: consider using `if let` to clear intent
[INFO] [stdout]     |
[INFO] [stdout] 503 |                                     if let Some(target_kbot) = self.game_state.frame_zero.kbots.get(&id_builded)
[INFO] [stdout]     |                                     ~~~~~~~~~~~~           ~~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: for loop over an `Option`. This is more readably written as an `if let` statement
[INFO] [stdout]    --> src/client/misc.rs:518:41
[INFO] [stdout]     |
[INFO] [stdout] 518 | ...                   self.game_state.frame_zero.kbots.get(&id_builded)
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: to check pattern in a loop use `while let`
[INFO] [stdout]     |
[INFO] [stdout] 517 |                                     while let Some(target_kbot) = self.game_state.frame_zero.kbots.get(&id_builded)
[INFO] [stdout]     |                                     ~~~~~~~~~~~~~~~           ~~~
[INFO] [stdout] help: consider using `if let` to clear intent
[INFO] [stdout]     |
[INFO] [stdout] 517 |                                     if let Some(target_kbot) = self.game_state.frame_zero.kbots.get(&id_builded)
[INFO] [stdout]     |                                     ~~~~~~~~~~~~           ~~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/client/render.rs:150:17
[INFO] [stdout]     |
[INFO] [stdout] 150 |                 std::mem::replace(generic_gpu_state, generic_gpu_state_new);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 150 |                 let _ = std::mem::replace(generic_gpu_state, generic_gpu_state_new);
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: for loop over an `Option`. This is more readably written as an `if let` statement
[INFO] [stdout]    --> src/frame_server/mod.rs:120:37
[INFO] [stdout]     |
[INFO] [stdout] 120 |                         for kbot in frame.kbots.get_mut(selected_raw_id) {
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: to check pattern in a loop use `while let`
[INFO] [stdout]     |
[INFO] [stdout] 120 |                         while let Some(kbot) = frame.kbots.get_mut(selected_raw_id) {
[INFO] [stdout]     |                         ~~~~~~~~~~~~~~~    ~~~
[INFO] [stdout] help: consider using `if let` to clear intent
[INFO] [stdout]     |
[INFO] [stdout] 120 |                         if let Some(kbot) = frame.kbots.get_mut(selected_raw_id) {
[INFO] [stdout]     |                         ~~~~~~~~~~~~    ~~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: for loop over an `Option`. This is more readably written as an `if let` statement
[INFO] [stdout]    --> src/frame_server/mod.rs:136:37
[INFO] [stdout]     |
[INFO] [stdout] 136 |                         for kbot in frame.kbots.get_mut(selected_raw_id) {
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: to check pattern in a loop use `while let`
[INFO] [stdout]     |
[INFO] [stdout] 136 |                         while let Some(kbot) = frame.kbots.get_mut(selected_raw_id) {
[INFO] [stdout]     |                         ~~~~~~~~~~~~~~~    ~~~
[INFO] [stdout] help: consider using `if let` to clear intent
[INFO] [stdout]     |
[INFO] [stdout] 136 |                         if let Some(kbot) = frame.kbots.get_mut(selected_raw_id) {
[INFO] [stdout]     |                         ~~~~~~~~~~~~    ~~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/frame_server/mod.rs:275:9
[INFO] [stdout]     |
[INFO] [stdout] 275 |         std::mem::replace(grid, vec![Vec::<Id<KBot>>::new(); grid_w * grid_h]);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 275 |         let _ = std::mem::replace(grid, vec![Vec::<Id<KBot>>::new(); grid_w * grid_h]);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/frame_server/mod.rs:319:13
[INFO] [stdout]     |
[INFO] [stdout] 319 |             std::mem::replace(small_grid, vec![Vec::<Id<KBot>>::new(); grid_w * grid_h]);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 319 |             let _ = std::mem::replace(small_grid, vec![Vec::<Id<KBot>>::new(); grid_w * grid_h]);
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/arrow_gpu.rs:194:9
[INFO] [stdout]     |
[INFO] [stdout] 194 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 194 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/blit_texture.rs:235:9
[INFO] [stdout]     |
[INFO] [stdout] 235 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 235 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/explosion.rs:353:9
[INFO] [stdout]     |
[INFO] [stdout] 353 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 353 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/health_bar.rs:136:9
[INFO] [stdout]     |
[INFO] [stdout] 136 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 136 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/line.rs:131:9
[INFO] [stdout]     |
[INFO] [stdout] 131 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 131 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/model_gpu.rs:195:9
[INFO] [stdout]     |
[INFO] [stdout] 195 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 195 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/model_gpu.rs:205:9
[INFO] [stdout]     |
[INFO] [stdout] 205 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 205 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/unit_icon.rs:126:9
[INFO] [stdout]     |
[INFO] [stdout] 126 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 126 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]   --> src/unit.rs:41:9
[INFO] [stdout]    |
[INFO] [stdout] 41 |         std::mem::replace(self, next);
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 41 |         let _ = std::mem::replace(self, next);
[INFO] [stdout]    |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame_server`
[INFO] [stdout]   --> src/main.rs:58:9
[INFO] [stdout]    |
[INFO] [stdout] 58 |     let frame_server =
[INFO] [stdout]    |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_frame_server`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `manager`
[INFO] [stdout]   --> src/main.rs:64:9
[INFO] [stdout]    |
[INFO] [stdout] 64 |     let manager = manager::Manager::new(
[INFO] [stdout]    |         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_manager`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `watcher` is never read
[INFO] [stdout]    --> src/client/mod.rs:134:5
[INFO] [stdout]     |
[INFO] [stdout] 84  | pub struct App {
[INFO] [stdout]     |            --- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 134 |     watcher: notify::RecommendedWatcher,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NEAR` is never used
[INFO] [stdout]  --> src/client/camera.rs:6:7
[INFO] [stdout]   |
[INFO] [stdout] 6 | const NEAR: f32 = 1.0;
[INFO] [stdout]   |       ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `path_get_mut` is never used
[INFO] [stdout]   --> src/client/unit_part_gpu.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl UnitPartGpu {
[INFO] [stdout]    | ---------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub fn path_get_mut(&mut self, path: PathBuf) -> Option<&mut ModelGpuState> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Move`, `Guard`, and `Attack` are never constructed
[INFO] [stdout]   --> src/client/uitool.rs:7:5
[INFO] [stdout]    |
[INFO] [stdout] 5  | pub enum UiTool {
[INFO] [stdout]    |          ------ variants in this enum
[INFO] [stdout] 6  |     None,
[INFO] [stdout] 7  |     Move,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 8  |     Repair,
[INFO] [stdout] 9  |     Guard,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 10 |     Attack,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `UiTool` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `energy` is never read
[INFO] [stdout]    --> src/frame_server/mod.rs:616:9
[INFO] [stdout]     |
[INFO] [stdout] 614 |     struct ResourceUsagePropMax {
[INFO] [stdout]     |            -------------------- field in this struct
[INFO] [stdout] 615 |         metal: f64,
[INFO] [stdout] 616 |         energy: f64,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `metal` and `energy` are never read
[INFO] [stdout]    --> src/frame_server/mod.rs:646:9
[INFO] [stdout]     |
[INFO] [stdout] 645 |     struct ResourceSurplus {
[INFO] [stdout]     |            --------------- fields in this struct
[INFO] [stdout] 646 |         metal: f64,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout] 647 |         energy: f64,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `noise_texture` is never read
[INFO] [stdout]   --> src/gpu_obj/blit_texture.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 6  | pub struct BlitTextureGpu {
[INFO] [stdout]    |            -------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 12 |     noise_texture: Texture,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `str_to_shader_stage` is never used
[INFO] [stdout]   --> src/gpu_obj/glsl_compiler.rs:11:4
[INFO] [stdout]    |
[INFO] [stdout] 11 | fn str_to_shader_stage(str: &str) -> ShaderStage {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `z` is never used
[INFO] [stdout]   --> src/gpu_obj/heightmap_helper.rs:33:8
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub fn z(x: f32, y: f32) -> f32 {
[INFO] [stdout]    |        ^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_texels` is never used
[INFO] [stdout]   --> src/gpu_obj/heightmap_helper.rs:47:8
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub fn create_texels(width: u32, height: u32, t: f32) -> Vec<f32> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `update_instance` is never used
[INFO] [stdout]    --> src/gpu_obj/model_gpu.rs:209:12
[INFO] [stdout]     |
[INFO] [stdout] 16  | impl ModelGpu {
[INFO] [stdout]     | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub fn update_instance(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `bind_state` is never read
[INFO] [stdout]   --> src/net_client.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct NetClientInfo {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 19 |     bind_state: BindState,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `NetClientInfo` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ID_CHARS` is never used
[INFO] [stdout]   --> src/utils.rs:28:7
[INFO] [stdout]    |
[INFO] [stdout] 28 | const ID_CHARS: [char; 62] = [
[INFO] [stdout]    |       ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ID_SIZE` is never used
[INFO] [stdout]   --> src/utils.rs:34:7
[INFO] [stdout]    |
[INFO] [stdout] 34 | const ID_SIZE: usize = 5;
[INFO] [stdout]    |       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rand_id_unsafe` is never used
[INFO] [stdout]    --> src/utils.rs:112:8
[INFO] [stdout]     |
[INFO] [stdout] 112 | pub fn rand_id_unsafe() -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `pop_set` is never used
[INFO] [stdout]    --> src/utils.rs:121:8
[INFO] [stdout]     |
[INFO] [stdout] 121 | pub fn pop_set<T: Clone + Eq + std::hash::Hash>(set: &mut HashSet<T>) -> T {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: 158 warnings emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/client/mod.rs:863:13
[INFO] [stdout]     |
[INFO] [stdout] 863 |             std::mem::replace(to_update, Some(Vector3::new(vec[0], vec[1], vec[2])));
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 863 |             let _ = std::mem::replace(to_update, Some(Vector3::new(vec[0], vec[1], vec[2])));
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/client/mod.rs:865:13
[INFO] [stdout]     |
[INFO] [stdout] 865 |             std::mem::replace(to_update, None);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 865 |             let _ = std::mem::replace(to_update, None);
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/client/unit_editor.rs:237:9
[INFO] [stdout]     |
[INFO] [stdout] 237 |         serde_json::to_writer_pretty(buf_w, bot_def);
[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] 237 |         let _ = serde_json::to_writer_pretty(buf_w, bot_def);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: for loop over an `Option`. This is more readably written as an `if let` statement
[INFO] [stdout]    --> src/client/unit_editor.rs:270:37
[INFO] [stdout]     |
[INFO] [stdout] 270 |                     for node_mut in unit_editor.botdef.part_tree.find_node_mut(node.id) {
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(for_loops_over_fallibles)]` on by default
[INFO] [stdout] help: to check pattern in a loop use `while let`
[INFO] [stdout]     |
[INFO] [stdout] 270 |                     while let Some(node_mut) = unit_editor.botdef.part_tree.find_node_mut(node.id) {
[INFO] [stdout]     |                     ~~~~~~~~~~~~~~~        ~~~
[INFO] [stdout] help: consider using `if let` to clear intent
[INFO] [stdout]     |
[INFO] [stdout] 270 |                     if let Some(node_mut) = unit_editor.botdef.part_tree.find_node_mut(node.id) {
[INFO] [stdout]     |                     ~~~~~~~~~~~~        ~~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/client/heightmap_editor.rs:337:9
[INFO] [stdout]     |
[INFO] [stdout] 337 |         serde_json::to_writer_pretty(buf_w, &heightmap_gpu.phy.data);
[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] 337 |         let _ = serde_json::to_writer_pretty(buf_w, &heightmap_gpu.phy.data);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: for loop over an `Option`. This is more readably written as an `if let` statement
[INFO] [stdout]    --> src/client/misc.rs:504:41
[INFO] [stdout]     |
[INFO] [stdout] 504 | ...                   self.game_state.frame_zero.kbots.get(&id_builded)
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: to check pattern in a loop use `while let`
[INFO] [stdout]     |
[INFO] [stdout] 503 |                                     while let Some(target_kbot) = self.game_state.frame_zero.kbots.get(&id_builded)
[INFO] [stdout]     |                                     ~~~~~~~~~~~~~~~           ~~~
[INFO] [stdout] help: consider using `if let` to clear intent
[INFO] [stdout]     |
[INFO] [stdout] 503 |                                     if let Some(target_kbot) = self.game_state.frame_zero.kbots.get(&id_builded)
[INFO] [stdout]     |                                     ~~~~~~~~~~~~           ~~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: for loop over an `Option`. This is more readably written as an `if let` statement
[INFO] [stdout]    --> src/client/misc.rs:518:41
[INFO] [stdout]     |
[INFO] [stdout] 518 | ...                   self.game_state.frame_zero.kbots.get(&id_builded)
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: to check pattern in a loop use `while let`
[INFO] [stdout]     |
[INFO] [stdout] 517 |                                     while let Some(target_kbot) = self.game_state.frame_zero.kbots.get(&id_builded)
[INFO] [stdout]     |                                     ~~~~~~~~~~~~~~~           ~~~
[INFO] [stdout] help: consider using `if let` to clear intent
[INFO] [stdout]     |
[INFO] [stdout] 517 |                                     if let Some(target_kbot) = self.game_state.frame_zero.kbots.get(&id_builded)
[INFO] [stdout]     |                                     ~~~~~~~~~~~~           ~~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/client/render.rs:150:17
[INFO] [stdout]     |
[INFO] [stdout] 150 |                 std::mem::replace(generic_gpu_state, generic_gpu_state_new);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 150 |                 let _ = std::mem::replace(generic_gpu_state, generic_gpu_state_new);
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: for loop over an `Option`. This is more readably written as an `if let` statement
[INFO] [stdout]    --> src/frame_server/mod.rs:120:37
[INFO] [stdout]     |
[INFO] [stdout] 120 |                         for kbot in frame.kbots.get_mut(selected_raw_id) {
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: to check pattern in a loop use `while let`
[INFO] [stdout]     |
[INFO] [stdout] 120 |                         while let Some(kbot) = frame.kbots.get_mut(selected_raw_id) {
[INFO] [stdout]     |                         ~~~~~~~~~~~~~~~    ~~~
[INFO] [stdout] help: consider using `if let` to clear intent
[INFO] [stdout]     |
[INFO] [stdout] 120 |                         if let Some(kbot) = frame.kbots.get_mut(selected_raw_id) {
[INFO] [stdout]     |                         ~~~~~~~~~~~~    ~~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: for loop over an `Option`. This is more readably written as an `if let` statement
[INFO] [stdout]    --> src/frame_server/mod.rs:136:37
[INFO] [stdout]     |
[INFO] [stdout] 136 |                         for kbot in frame.kbots.get_mut(selected_raw_id) {
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: to check pattern in a loop use `while let`
[INFO] [stdout]     |
[INFO] [stdout] 136 |                         while let Some(kbot) = frame.kbots.get_mut(selected_raw_id) {
[INFO] [stdout]     |                         ~~~~~~~~~~~~~~~    ~~~
[INFO] [stdout] help: consider using `if let` to clear intent
[INFO] [stdout]     |
[INFO] [stdout] 136 |                         if let Some(kbot) = frame.kbots.get_mut(selected_raw_id) {
[INFO] [stdout]     |                         ~~~~~~~~~~~~    ~~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/frame_server/mod.rs:275:9
[INFO] [stdout]     |
[INFO] [stdout] 275 |         std::mem::replace(grid, vec![Vec::<Id<KBot>>::new(); grid_w * grid_h]);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 275 |         let _ = std::mem::replace(grid, vec![Vec::<Id<KBot>>::new(); grid_w * grid_h]);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/frame_server/mod.rs:319:13
[INFO] [stdout]     |
[INFO] [stdout] 319 |             std::mem::replace(small_grid, vec![Vec::<Id<KBot>>::new(); grid_w * grid_h]);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 319 |             let _ = std::mem::replace(small_grid, vec![Vec::<Id<KBot>>::new(); grid_w * grid_h]);
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/arrow_gpu.rs:194:9
[INFO] [stdout]     |
[INFO] [stdout] 194 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 194 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/blit_texture.rs:235:9
[INFO] [stdout]     |
[INFO] [stdout] 235 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 235 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/explosion.rs:353:9
[INFO] [stdout]     |
[INFO] [stdout] 353 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 353 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/health_bar.rs:136:9
[INFO] [stdout]     |
[INFO] [stdout] 136 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 136 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/line.rs:131:9
[INFO] [stdout]     |
[INFO] [stdout] 131 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 131 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/model_gpu.rs:195:9
[INFO] [stdout]     |
[INFO] [stdout] 195 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 195 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/model_gpu.rs:205:9
[INFO] [stdout]     |
[INFO] [stdout] 205 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 205 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/unit_icon.rs:126:9
[INFO] [stdout]     |
[INFO] [stdout] 126 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 126 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]   --> src/unit.rs:41:9
[INFO] [stdout]    |
[INFO] [stdout] 41 |         std::mem::replace(self, next);
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 41 |         let _ = std::mem::replace(self, next);
[INFO] [stdout]    |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: 158 warnings emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished dev [unoptimized + debuginfo] target(s) in 18.99s
[INFO] running `Command { std: "docker" "inspect" "776bf5bb7becc1f1f8b8967f78f14aab2caba534008e5d76b2804ed5ab22a698", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "776bf5bb7becc1f1f8b8967f78f14aab2caba534008e5d76b2804ed5ab22a698", kill_on_drop: false }`
[INFO] [stdout] 776bf5bb7becc1f1f8b8967f78f14aab2caba534008e5d76b2804ed5ab22a698
[INFO] checking Ruddle/oxidator against try#7622c0f807a4e13c4db886a1681bf343795692df+rustflags=-Dnon_local_definitions for pr-120393
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FRuddle%2Foxidator" "/workspace/builds/worker-6-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc2/source'...
[INFO] [stderr] done.
[INFO] validating manifest of git repo https://github.com/Ruddle/oxidator on toolchain 7622c0f807a4e13c4db886a1681bf343795692df
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+7622c0f807a4e13c4db886a1681bf343795692df" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] started tweaking git repo https://github.com/Ruddle/oxidator
[INFO] finished tweaking git repo https://github.com/Ruddle/oxidator
[INFO] tweaked toml for git repo https://github.com/Ruddle/oxidator written to /workspace/builds/worker-6-tc2/source/Cargo.toml
[INFO] crate git repo https://github.com/Ruddle/oxidator already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+7622c0f807a4e13c4db886a1681bf343795692df" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:2788e3201cd34a07e3172128adcd8b3090168a8e3bcc40d7c032b9dda1df7d1c" "/opt/rustwide/cargo-home/bin/cargo" "+7622c0f807a4e13c4db886a1681bf343795692df" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 51c2e226b7be0ee27ccd0776492afae0d1d6d819d17af0dd3b81ce3e120f3249
[INFO] running `Command { std: "docker" "start" "-a" "51c2e226b7be0ee27ccd0776492afae0d1d6d819d17af0dd3b81ce3e120f3249", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "51c2e226b7be0ee27ccd0776492afae0d1d6d819d17af0dd3b81ce3e120f3249", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "51c2e226b7be0ee27ccd0776492afae0d1d6d819d17af0dd3b81ce3e120f3249", kill_on_drop: false }`
[INFO] [stdout] 51c2e226b7be0ee27ccd0776492afae0d1d6d819d17af0dd3b81ce3e120f3249
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid -Dnon_local_definitions" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:2788e3201cd34a07e3172128adcd8b3090168a8e3bcc40d7c032b9dda1df7d1c" "/opt/rustwide/cargo-home/bin/cargo" "+7622c0f807a4e13c4db886a1681bf343795692df" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] e074475d32bb71203d6ea84a251780bff5eaa73a34951c8dfa32d5d82cc8c753
[INFO] running `Command { std: "docker" "start" "-a" "e074475d32bb71203d6ea84a251780bff5eaa73a34951c8dfa32d5d82cc8c753", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.67
[INFO] [stderr]    Compiling autocfg v1.0.0
[INFO] [stderr]    Compiling maybe-uninit v2.0.0
[INFO] [stderr]    Compiling bitflags v1.2.1
[INFO] [stderr]    Compiling semver-parser v0.7.0
[INFO] [stderr]    Compiling byteorder v1.3.4
[INFO] [stderr]    Compiling cc v1.0.50
[INFO] [stderr]    Compiling proc-macro2 v1.0.8
[INFO] [stderr]    Compiling semver v0.9.0
[INFO] [stderr]    Compiling unicode-xid v0.2.0
[INFO] [stderr]    Compiling num-traits v0.2.11
[INFO] [stderr]    Compiling log v0.4.8
[INFO] [stderr]    Compiling proc-macro2 v0.4.30
[INFO] [stderr]    Compiling rustc_version v0.2.3
[INFO] [stderr]    Compiling syn v1.0.15
[INFO] [stderr]    Compiling unicode-xid v0.1.0
[INFO] [stderr]    Compiling quote v1.0.2
[INFO] [stderr]     Checking smallvec v0.6.13
[INFO] [stderr]    Compiling num-integer v0.1.42
[INFO] [stderr]     Checking slab v0.4.2
[INFO] [stderr]    Compiling pkg-config v0.3.17
[INFO] [stderr]    Compiling crossbeam-utils v0.7.2
[INFO] [stderr]    Compiling quote v0.6.13
[INFO] [stderr]    Compiling libloading v0.5.2
[INFO] [stderr]    Compiling xml-rs v0.8.0
[INFO] [stderr]    Compiling memoffset v0.5.3
[INFO] [stderr]     Checking raw-window-handle v0.3.3
[INFO] [stderr]     Checking iovec v0.1.4
[INFO] [stderr]     Checking net2 v0.2.33
[INFO] [stderr]     Checking adler32 v1.0.4
[INFO] [stderr]     Checking arrayvec v0.5.1
[INFO] [stderr]    Compiling serde v1.0.104
[INFO] [stderr]    Compiling nix v0.14.1
[INFO] [stderr]    Compiling wayland-scanner v0.23.6
[INFO] [stderr]     Checking mio v0.6.21
[INFO] [stderr]     Checking approx v0.3.2
[INFO] [stderr]    Compiling parking_lot_core v0.6.2
[INFO] [stderr]    Compiling crossbeam-epoch v0.8.2
[INFO] [stderr]     Checking lazycell v1.2.1
[INFO] [stderr]     Checking void v1.0.2
[INFO] [stderr]     Checking dlib v0.4.1
[INFO] [stderr]    Compiling parking_lot v0.9.0
[INFO] [stderr]    Compiling num-bigint v0.2.6
[INFO] [stderr]    Compiling num-iter v0.1.40
[INFO] [stderr]    Compiling getrandom v0.1.14
[INFO] [stderr]     Checking mio-extras v2.0.6
[INFO] [stderr]     Checking wayland-sys v0.23.6
[INFO] [stderr]     Checking gfx-hal v0.4.1
[INFO] [stderr]     Checking ordered-float v1.0.2
[INFO] [stderr]     Checking lock_api v0.3.3
[INFO] [stderr]     Checking stb_truetype v0.3.1
[INFO] [stderr]    Compiling num-complex v0.2.4
[INFO] [stderr]     Checking same-file v1.0.6
[INFO] [stderr]    Compiling rayon-core v1.7.0
[INFO] [stderr]    Compiling syn v0.15.44
[INFO] [stderr]     Checking rusttype v0.8.2
[INFO] [stderr]     Checking walkdir v2.3.1
[INFO] [stderr]     Checking crossbeam-deque v0.7.3
[INFO] [stderr]     Checking crossbeam-queue v0.2.1
[INFO] [stderr]    Compiling x11 v2.18.2
[INFO] [stderr]    Compiling backtrace-sys v0.1.32
[INFO] [stderr]     Checking num_cpus v1.12.0
[INFO] [stderr]    Compiling num-rational v0.2.3
[INFO] [stderr]    Compiling memchr v2.3.3
[INFO] [stderr]    Compiling wayland-client v0.23.6
[INFO] [stderr]    Compiling wayland-protocols v0.23.6
[INFO] [stderr]     Checking downcast-rs v1.1.1
[INFO] [stderr]     Checking ppv-lite86 v0.2.6
[INFO] [stderr]     Checking c2-chacha v0.2.3
[INFO] [stderr]     Checking rand_core v0.5.1
[INFO] [stderr]     Checking rusttype v0.7.9
[INFO] [stderr]     Checking deflate v0.7.20
[INFO] [stderr]    Compiling x11-dl v2.18.5
[INFO] [stderr]     Checking calloop v0.4.4
[INFO] [stderr]     Checking wayland-commons v0.23.6
[INFO] [stderr]     Checking line_drawing v0.7.0
[INFO] [stderr]    Compiling imgui-sys v0.2.0
[INFO] [stderr]     Checking relevant v0.4.2
[INFO] [stderr]     Checking rand v0.4.6
[INFO] [stderr]     Checking shared_library v0.1.9
[INFO] [stderr]    Compiling crc32fast v1.2.0
[INFO] [stderr]    Compiling typenum v1.11.2
[INFO] [stderr]    Compiling libm v0.1.4
[INFO] [stderr]     Checking xdg v2.2.0
[INFO] [stderr]    Compiling failure_derive v0.1.6
[INFO] [stderr]     Checking stable_deref_trait v1.1.1
[INFO] [stderr]     Checking either v1.5.3
[INFO] [stderr]     Checking atom v0.3.5
[INFO] [stderr]     Checking rayon v1.3.0
[INFO] [stderr]     Checking hibitset v0.6.3
[INFO] [stderr]     Checking owning_ref v0.3.3
[INFO] [stderr]     Checking andrew v0.2.1
[INFO] [stderr]     Checking parking_lot_core v0.2.14
[INFO] [stderr]     Checking ash v0.29.0
[INFO] [stderr]    Compiling synstructure v0.12.3
[INFO] [stderr]    Compiling synstructure v0.10.2
[INFO] [stderr]     Checking rand_chacha v0.2.1
[INFO] [stderr]    Compiling serde_derive v1.0.104
[INFO] [stderr]     Checking inflate v0.3.4
[INFO] [stderr]     Checking num-traits v0.1.43
[INFO] [stderr]     Checking memmap v0.7.0
[INFO] [stderr]     Checking lzw v0.10.0
[INFO] [stderr]     Checking colorful v0.2.1
[INFO] [stderr]     Checking rand_core v0.4.2
[INFO] [stderr]    Compiling ryu v1.0.2
[INFO] [stderr]     Checking rustc-demangle v0.1.16
[INFO] [stderr]     Checking color_quant v1.0.1
[INFO] [stderr]     Checking backtrace v0.3.44
[INFO] [stderr]     Checking gif v0.9.2
[INFO] [stderr]     Checking rand_core v0.3.1
[INFO] [stderr]     Checking rendy-memory v0.5.2
[INFO] [stderr]    Compiling zerocopy-derive v0.1.4
[INFO] [stderr]     Checking png v0.11.0
[INFO] [stderr]     Checking enum_primitive v0.1.1
[INFO] [stderr]     Checking aho-corasick v0.7.8
[INFO] [stderr]     Checking jpeg-decoder v0.1.18
[INFO] [stderr]     Checking rand v0.7.3
[INFO] [stderr]     Checking parking_lot v0.4.8
[INFO] [stderr]     Checking rendy-descriptor v0.5.1
[INFO] [stderr]     Checking gfx-backend-empty v0.4.0
[INFO] [stderr]     Checking num-rational v0.1.42
[INFO] [stderr]     Checking inotify-sys v0.1.3
[INFO] [stderr]     Checking fxhash v0.2.1
[INFO] [stderr]     Checking crossbeam-utils v0.6.6
[INFO] [stderr]     Checking thread_local v1.0.1
[INFO] [stderr]     Checking quick-error v1.2.3
[INFO] [stderr]     Checking rawpointer v0.2.1
[INFO] [stderr]     Checking copyless v0.1.4
[INFO] [stderr]     Checking instant v0.1.2
[INFO] [stderr]     Checking regex-syntax v0.6.14
[INFO] [stderr]     Checking vec_map v0.8.1
[INFO] [stderr]     Checking percent-encoding v2.1.0
[INFO] [stderr]     Checking crossbeam-channel v0.3.9
[INFO] [stderr]     Checking matrixmultiply v0.2.3
[INFO] [stderr]     Checking humantime v1.3.0
[INFO] [stderr]     Checking image v0.18.0
[INFO] [stderr]     Checking inotify v0.7.0
[INFO] [stderr]     Checking gfx-backend-vulkan v0.4.2
[INFO] [stderr]     Checking generic-array v0.13.2
[INFO] [stderr]     Checking failure v0.1.6
[INFO] [stderr]     Checking rand_distr v0.2.2
[INFO] [stderr]     Checking chashmap v2.2.2
[INFO] [stderr]     Checking zerocopy v0.2.8
[INFO] [stderr]     Checking rand v0.5.6
[INFO] [stderr]     Checking wgpu-native v0.4.3
[INFO] [stderr]     Checking regex v1.3.4
[INFO] [stderr]    Compiling typename_derive v0.1.4
[INFO] [stderr]     Checking miniz_oxide v0.3.6
[INFO] [stderr]     Checking inflate v0.4.5
[INFO] [stderr]     Checking filetime v0.2.8
[INFO] [stderr]     Checking atty v0.2.14
[INFO] [stderr]     Checking anymap v0.12.1
[INFO] [stderr]     Checking termcolor v1.1.0
[INFO] [stderr]     Checking vec_map v0.6.0
[INFO] [stderr]     Checking itoa v0.4.5
[INFO] [stderr]     Checking png v0.15.3
[INFO] [stderr]     Checking notify v5.0.0-pre.1
[INFO] [stderr]     Checking typename v0.1.2
[INFO] [stderr]     Checking env_logger v0.7.1
[INFO] [stderr]     Checking wgpu v0.4.0
[INFO] [stderr]     Checking flate2 v1.0.13
[INFO] [stderr]     Checking noise v0.6.0
[INFO] [stderr]     Checking base-62 v0.1.1
[INFO] [stderr]     Checking fnv v1.0.6
[INFO] [stderr]     Checking spin_sleep v0.3.7
[INFO] [stderr]     Checking imgui v0.2.1
[INFO] [stderr]     Checking smithay-client-toolkit v0.6.6
[INFO] [stderr]     Checking winit v0.20.0-alpha4
[INFO] [stderr]     Checking serde_json v1.0.48
[INFO] [stderr]     Checking bincode v1.2.1
[INFO] [stderr]     Checking num v0.2.1
[INFO] [stderr]     Checking alga v0.9.2
[INFO] [stderr]     Checking obj-rs v0.5.0
[INFO] [stderr]     Checking imgui-winit-support v0.2.1
[INFO] [stderr]     Checking nalgebra v0.19.0
[INFO] [stderr]     Checking oxidator v0.2.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `Vector4`
[INFO] [stdout]  --> src/client/mod.rs:3:56
[INFO] [stdout]   |
[INFO] [stdout] 3 | use na::{Isometry3, Matrix4, Point3, Vector2, Vector3, Vector4};
[INFO] [stdout]   |                                                        ^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::botdef`
[INFO] [stdout]  --> src/client/game_state.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::botdef;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HashSet`
[INFO] [stdout]  --> src/client/unit_part_gpu.rs:4:33
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::collections::{HashMap, HashSet};
[INFO] [stdout]   |                                 ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Path`
[INFO] [stdout]  --> src/client/unit_part_gpu.rs:5:17
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::path::{Path, PathBuf};
[INFO] [stdout]   |                 ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model::*`
[INFO] [stdout]  --> src/client/unit_editor.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::model::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `gpu_obj::model_gpu::ModelGpu`
[INFO] [stdout]  --> src/client/unit_editor.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use gpu_obj::model_gpu::ModelGpu;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Vector2`
[INFO] [stdout]  --> src/client/unit_editor.rs:7:27
[INFO] [stdout]   |
[INFO] [stdout] 7 | use na::{Matrix4, Point3, Vector2, Vector3, Vector4};
[INFO] [stdout]   |                           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `HashMap`, `HashSet`
[INFO] [stdout]  --> src/client/unit_editor.rs:8:24
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::collections::{HashMap, HashSet};
[INFO] [stdout]   |                        ^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Path`
[INFO] [stdout]  --> src/client/unit_editor.rs:9:17
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::path::{Path, PathBuf};
[INFO] [stdout]   |                 ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BufReader`
[INFO] [stdout]    --> src/client/unit_editor.rs:228:23
[INFO] [stdout]     |
[INFO] [stdout] 228 |         use std::io::{BufReader, BufWriter};
[INFO] [stdout]     |                       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BufWriter`
[INFO] [stdout]    --> src/client/unit_editor.rs:244:34
[INFO] [stdout]     |
[INFO] [stdout] 244 |         use std::io::{BufReader, BufWriter};
[INFO] [stdout]     |                                  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]    --> src/client/heightmap_editor.rs:328:13
[INFO] [stdout]     |
[INFO] [stdout] 328 |         use std::io::BufReader;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around pattern
[INFO] [stdout]   --> src/client/misc.rs:19:13
[INFO] [stdout]    |
[INFO] [stdout] 19 |         for (model_gpu_state) in self.unit_part_gpu.states.iter_mut() {
[INFO] [stdout]    |             ^               ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 19 -         for (model_gpu_state) in self.unit_part_gpu.states.iter_mut() {
[INFO] [stdout] 19 +         for model_gpu_state in self.unit_part_gpu.states.iter_mut() {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around function argument
[INFO] [stdout]    --> src/client/misc.rs:159:25
[INFO] [stdout]     |
[INFO] [stdout] 159 |                         (t * 2.0),
[INFO] [stdout]     |                         ^       ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 159 -                         (t * 2.0),
[INFO] [stdout] 159 +                         t * 2.0,
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::botdef`
[INFO] [stdout]  --> src/client/play.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::botdef;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `imgui::*`
[INFO] [stdout]  --> src/client/play.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use imgui::*;
[INFO] [stdout]   |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Isometry3`, `Vector2`, `Vector4`
[INFO] [stdout]  --> src/client/play.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | use na::{Isometry3, Matrix4, Point3, Vector2, Vector3, Vector4};
[INFO] [stdout]   |          ^^^^^^^^^                   ^^^^^^^           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Duration`, `Instant`
[INFO] [stdout]   --> src/client/play.rs:10:17
[INFO] [stdout]    |
[INFO] [stdout] 10 | use std::time::{Duration, Instant};
[INFO] [stdout]    |                 ^^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::frame::Player`
[INFO] [stdout]  --> src/client/render.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::frame::Player;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `IsometryMatrix3`, `Matrix4`, `Vector2`, `Vector4`
[INFO] [stdout]  --> src/client/render.rs:8:10
[INFO] [stdout]   |
[INFO] [stdout] 8 | use na::{IsometryMatrix3, Matrix4, Point3, Vector2, Vector3, Vector4};
[INFO] [stdout]   |          ^^^^^^^^^^^^^^^  ^^^^^^^          ^^^^^^^           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/client/render.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `unit_part_gpu::UnitPartGpu`
[INFO] [stdout]   --> src/client/render.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use unit_part_gpu::UnitPartGpu;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HashMap`
[INFO] [stdout]   --> src/client/mod.rs:34:24
[INFO] [stdout]    |
[INFO] [stdout] 34 | use std::collections::{HashMap, HashSet};
[INFO] [stdout]    |                        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PathBuf`
[INFO] [stdout]   --> src/client/mod.rs:35:23
[INFO] [stdout]    |
[INFO] [stdout] 35 | use std::path::{Path, PathBuf};
[INFO] [stdout]    |                       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Instant`
[INFO] [stdout]   --> src/client/mod.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | use std::time::Instant;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BufferMapAsyncResult`, `Extent3d`, `SwapChain`
[INFO] [stdout]   --> src/client/mod.rs:38:12
[INFO] [stdout]    |
[INFO] [stdout] 38 | use wgpu::{BufferMapAsyncResult, Extent3d, SwapChain, TextureFormat};
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around type
[INFO] [stdout]    --> src/client/mod.rs:154:10
[INFO] [stdout]     |
[INFO] [stdout] 154 |     ) -> (Self) {
[INFO] [stdout]     |          ^    ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 154 -     ) -> (Self) {
[INFO] [stdout] 154 +     ) -> Self {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: the item `unbounded` is imported redundantly
[INFO] [stdout]    --> src/client/mod.rs:436:17
[INFO] [stdout]     |
[INFO] [stdout] 1   | use crate::*;
[INFO] [stdout]     |     -------- the item `unbounded` is already imported here
[INFO] [stdout] ...
[INFO] [stdout] 436 |             use crossbeam_channel::unbounded;
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Result`
[INFO] [stdout]    --> src/client/mod.rs:437:50
[INFO] [stdout]     |
[INFO] [stdout] 437 |             use notify::{watcher, RecursiveMode, Result};
[INFO] [stdout]     |                                                  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]    --> src/client/mod.rs:608:9
[INFO] [stdout]     |
[INFO] [stdout] 608 |         (this)
[INFO] [stdout]     |         ^    ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 608 -         (this)
[INFO] [stdout] 608 +         this
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around pattern
[INFO] [stdout]    --> src/client/mod.rs:927:25
[INFO] [stdout]     |
[INFO] [stdout] 927 |                     for (model_gpu_state) in self.unit_part_gpu.states.iter_mut() {
[INFO] [stdout]     |                         ^               ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 927 -                     for (model_gpu_state) in self.unit_part_gpu.states.iter_mut() {
[INFO] [stdout] 927 +                     for model_gpu_state in self.unit_part_gpu.states.iter_mut() {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Point3`
[INFO] [stdout]   --> src/frame.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | use na::{Point3, Vector3};
[INFO] [stdout]    |          ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::unit`
[INFO] [stdout]   --> src/frame.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use crate::unit;
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Matrix4`
[INFO] [stdout]  --> src/frame_server/mod.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | use na::{Matrix4, Point3, Vector2, Vector3};
[INFO] [stdout]   |          ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused label
[INFO] [stdout]    --> src/frame_server/mod.rs:393:25
[INFO] [stdout]     |
[INFO] [stdout] 393 |                         'bot_test: for kbot_id in kbots_in_proximity.iter() {
[INFO] [stdout]     |                         ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_labels)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]    --> src/frame_server/mod.rs:452:10
[INFO] [stdout]     |
[INFO] [stdout] 452 |         };
[INFO] [stdout]     |          ^ help: remove this semicolon
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(redundant_semicolons)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::slice`
[INFO] [stdout]  --> src/glsl.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::slice;
[INFO] [stdout]   |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]   --> src/gpu_obj/arrow_gpu.rs:45:95
[INFO] [stdout]    |
[INFO] [stdout] 45 |         let pipeline = Self::create_pipeline(device, main_bind_group_layout, format).unwrap();;
[INFO] [stdout]    |                                                                                               ^ help: remove this semicolon
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model`
[INFO] [stdout]  --> src/gpu_obj/blit_texture.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::model;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model`
[INFO] [stdout]  --> src/gpu_obj/explosion.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::model;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BigEndian`, `ReadBytesExt`
[INFO] [stdout]    --> src/gpu_obj/explosion.rs:312:25
[INFO] [stdout]     |
[INFO] [stdout] 312 |         use byteorder::{BigEndian, ReadBytesExt};
[INFO] [stdout]     |                         ^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::slice`
[INFO] [stdout]   --> src/gpu_obj/glsl_compiler.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | use std::slice;
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model`
[INFO] [stdout]  --> src/gpu_obj/health_bar.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::model;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model`
[INFO] [stdout]  --> src/gpu_obj/line.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::model;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]   --> src/gpu_obj/line.rs:29:95
[INFO] [stdout]    |
[INFO] [stdout] 29 |         let pipeline = Self::create_pipeline(device, main_bind_group_layout, format).unwrap();;
[INFO] [stdout]    |                                                                                               ^ help: remove this semicolon
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]   --> src/gpu_obj/model_gpu.rs:46:95
[INFO] [stdout]    |
[INFO] [stdout] 46 |         let pipeline = Self::create_pipeline(device, main_bind_group_layout, format).unwrap();;
[INFO] [stdout]    |                                                                                               ^ help: remove this semicolon
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BindGroup`, `RenderPass`
[INFO] [stdout]  --> src/gpu_obj/trait_gpu.rs:2:12
[INFO] [stdout]   |
[INFO] [stdout] 2 | use wgpu::{BindGroup, BindGroupLayout, RenderPass, TextureFormat};
[INFO] [stdout]   |            ^^^^^^^^^                   ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model`
[INFO] [stdout]  --> src/gpu_obj/unit_icon.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::model;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]   --> src/gpu_obj/unit_icon.rs:29:95
[INFO] [stdout]    |
[INFO] [stdout] 29 |         let pipeline = Self::create_pipeline(device, main_bind_group_layout, format).unwrap();;
[INFO] [stdout]    |                                                                                               ^ help: remove this semicolon
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]   --> src/gpu_obj/water.rs:62:27
[INFO] [stdout]    |
[INFO] [stdout] 62 |                 .unwrap();;
[INFO] [stdout]    |                           ^ help: remove this semicolon
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::unit`
[INFO] [stdout]  --> src/mobile.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::unit;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `PathBuf`, `Path`
[INFO] [stdout]  --> src/mobile.rs:7:17
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::path::{Path, PathBuf};
[INFO] [stdout]   |                 ^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]   --> src/mobile.rs:37:20
[INFO] [stdout]    |
[INFO] [stdout] 37 |         let diff = (other - self);
[INFO] [stdout]    |                    ^            ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 37 -         let diff = (other - self);
[INFO] [stdout] 37 +         let diff = other - self;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::unit`
[INFO] [stdout]  --> src/moddef.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::unit;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::prelude::*`
[INFO] [stdout]  --> src/net_client.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::io::prelude::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]  --> src/net_client.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::io::BufReader;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::net::TcpListener`
[INFO] [stdout]  --> src/net_client.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::net::TcpListener;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::client::*`
[INFO] [stdout]  --> src/unit.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use super::client::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model::*`
[INFO] [stdout]  --> src/unit.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::model::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::utils::FileTree`
[INFO] [stdout]  --> src/unit.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::utils::FileTree;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `gpu_obj::model_gpu::ModelGpu`
[INFO] [stdout]  --> src/unit.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use gpu_obj::model_gpu::ModelGpu;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Vector2`, `Vector3`
[INFO] [stdout]  --> src/unit.rs:6:27
[INFO] [stdout]   |
[INFO] [stdout] 6 | use na::{Matrix4, Point3, Vector2, Vector3};
[INFO] [stdout]   |                           ^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `HashMap`, `HashSet`
[INFO] [stdout]  --> src/unit.rs:8:24
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::collections::{HashMap, HashSet};
[INFO] [stdout]   |                        ^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Path`
[INFO] [stdout]  --> src/unit.rs:9:17
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::path::{Path, PathBuf};
[INFO] [stdout]   |                 ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `IsometryMatrix3`, `Point3`, `Vector2`, `Vector4`
[INFO] [stdout]  --> src/utils.rs:2:10
[INFO] [stdout]   |
[INFO] [stdout] 2 | use na::{IsometryMatrix3, Matrix4, Point3, Vector2, Vector3, Vector4};
[INFO] [stdout]   |          ^^^^^^^^^^^^^^^           ^^^^^^  ^^^^^^^           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HashMap`
[INFO] [stdout]  --> src/utils.rs:6:24
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::collections::{HashMap, HashSet};
[INFO] [stdout]   |                        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DirEntry`
[INFO] [stdout]    --> src/utils.rs:134:21
[INFO] [stdout]     |
[INFO] [stdout] 134 | use std::fs::{self, DirEntry};
[INFO] [stdout]     |                     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io`
[INFO] [stdout]    --> src/utils.rs:135:5
[INFO] [stdout]     |
[INFO] [stdout] 135 | use std::io;
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Path`
[INFO] [stdout]    --> src/utils.rs:136:17
[INFO] [stdout]     |
[INFO] [stdout] 136 | use std::path::{Path, PathBuf};
[INFO] [stdout]     |                 ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BigEndian`, `ReadBytesExt`
[INFO] [stdout]    --> src/utils.rs:177:25
[INFO] [stdout]     |
[INFO] [stdout] 177 |         use byteorder::{BigEndian, ReadBytesExt};
[INFO] [stdout]     |                         ^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Vector4`
[INFO] [stdout]  --> src/client/mod.rs:3:56
[INFO] [stdout]   |
[INFO] [stdout] 3 | use na::{Isometry3, Matrix4, Point3, Vector2, Vector3, Vector4};
[INFO] [stdout]   |                                                        ^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::botdef`
[INFO] [stdout]  --> src/client/game_state.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::botdef;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HashSet`
[INFO] [stdout]  --> src/client/unit_part_gpu.rs:4:33
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::collections::{HashMap, HashSet};
[INFO] [stdout]   |                                 ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Path`
[INFO] [stdout]  --> src/client/unit_part_gpu.rs:5:17
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::path::{Path, PathBuf};
[INFO] [stdout]   |                 ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model::*`
[INFO] [stdout]  --> src/client/unit_editor.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::model::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `gpu_obj::model_gpu::ModelGpu`
[INFO] [stdout]  --> src/client/unit_editor.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use gpu_obj::model_gpu::ModelGpu;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Vector2`
[INFO] [stdout]  --> src/client/unit_editor.rs:7:27
[INFO] [stdout]   |
[INFO] [stdout] 7 | use na::{Matrix4, Point3, Vector2, Vector3, Vector4};
[INFO] [stdout]   |                           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `HashMap`, `HashSet`
[INFO] [stdout]  --> src/client/unit_editor.rs:8:24
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::collections::{HashMap, HashSet};
[INFO] [stdout]   |                        ^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Path`
[INFO] [stdout]  --> src/client/unit_editor.rs:9:17
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::path::{Path, PathBuf};
[INFO] [stdout]   |                 ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BufReader`
[INFO] [stdout]    --> src/client/unit_editor.rs:228:23
[INFO] [stdout]     |
[INFO] [stdout] 228 |         use std::io::{BufReader, BufWriter};
[INFO] [stdout]     |                       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BufWriter`
[INFO] [stdout]    --> src/client/unit_editor.rs:244:34
[INFO] [stdout]     |
[INFO] [stdout] 244 |         use std::io::{BufReader, BufWriter};
[INFO] [stdout]     |                                  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]    --> src/client/heightmap_editor.rs:328:13
[INFO] [stdout]     |
[INFO] [stdout] 328 |         use std::io::BufReader;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around pattern
[INFO] [stdout]   --> src/client/misc.rs:19:13
[INFO] [stdout]    |
[INFO] [stdout] 19 |         for (model_gpu_state) in self.unit_part_gpu.states.iter_mut() {
[INFO] [stdout]    |             ^               ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 19 -         for (model_gpu_state) in self.unit_part_gpu.states.iter_mut() {
[INFO] [stdout] 19 +         for model_gpu_state in self.unit_part_gpu.states.iter_mut() {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around function argument
[INFO] [stdout]    --> src/client/misc.rs:159:25
[INFO] [stdout]     |
[INFO] [stdout] 159 |                         (t * 2.0),
[INFO] [stdout]     |                         ^       ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 159 -                         (t * 2.0),
[INFO] [stdout] 159 +                         t * 2.0,
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::botdef`
[INFO] [stdout]  --> src/client/play.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::botdef;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `imgui::*`
[INFO] [stdout]  --> src/client/play.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use imgui::*;
[INFO] [stdout]   |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Isometry3`, `Vector2`, `Vector4`
[INFO] [stdout]  --> src/client/play.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | use na::{Isometry3, Matrix4, Point3, Vector2, Vector3, Vector4};
[INFO] [stdout]   |          ^^^^^^^^^                   ^^^^^^^           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Duration`, `Instant`
[INFO] [stdout]   --> src/client/play.rs:10:17
[INFO] [stdout]    |
[INFO] [stdout] 10 | use std::time::{Duration, Instant};
[INFO] [stdout]    |                 ^^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::frame::Player`
[INFO] [stdout]  --> src/client/render.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::frame::Player;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `IsometryMatrix3`, `Matrix4`, `Vector2`, `Vector4`
[INFO] [stdout]  --> src/client/render.rs:8:10
[INFO] [stdout]   |
[INFO] [stdout] 8 | use na::{IsometryMatrix3, Matrix4, Point3, Vector2, Vector3, Vector4};
[INFO] [stdout]   |          ^^^^^^^^^^^^^^^  ^^^^^^^          ^^^^^^^           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/client/render.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `unit_part_gpu::UnitPartGpu`
[INFO] [stdout]   --> src/client/render.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use unit_part_gpu::UnitPartGpu;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HashMap`
[INFO] [stdout]   --> src/client/mod.rs:34:24
[INFO] [stdout]    |
[INFO] [stdout] 34 | use std::collections::{HashMap, HashSet};
[INFO] [stdout]    |                        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PathBuf`
[INFO] [stdout]   --> src/client/mod.rs:35:23
[INFO] [stdout]    |
[INFO] [stdout] 35 | use std::path::{Path, PathBuf};
[INFO] [stdout]    |                       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Instant`
[INFO] [stdout]   --> src/client/mod.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | use std::time::Instant;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BufferMapAsyncResult`, `Extent3d`, `SwapChain`
[INFO] [stdout]   --> src/client/mod.rs:38:12
[INFO] [stdout]    |
[INFO] [stdout] 38 | use wgpu::{BufferMapAsyncResult, Extent3d, SwapChain, TextureFormat};
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around type
[INFO] [stdout]    --> src/client/mod.rs:154:10
[INFO] [stdout]     |
[INFO] [stdout] 154 |     ) -> (Self) {
[INFO] [stdout]     |          ^    ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 154 -     ) -> (Self) {
[INFO] [stdout] 154 +     ) -> Self {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: the item `unbounded` is imported redundantly
[INFO] [stdout]    --> src/client/mod.rs:436:17
[INFO] [stdout]     |
[INFO] [stdout] 1   | use crate::*;
[INFO] [stdout]     |     -------- the item `unbounded` is already imported here
[INFO] [stdout] ...
[INFO] [stdout] 436 |             use crossbeam_channel::unbounded;
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Result`
[INFO] [stdout]    --> src/client/mod.rs:437:50
[INFO] [stdout]     |
[INFO] [stdout] 437 |             use notify::{watcher, RecursiveMode, Result};
[INFO] [stdout]     |                                                  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]    --> src/client/mod.rs:608:9
[INFO] [stdout]     |
[INFO] [stdout] 608 |         (this)
[INFO] [stdout]     |         ^    ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 608 -         (this)
[INFO] [stdout] 608 +         this
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around pattern
[INFO] [stdout]    --> src/client/mod.rs:927:25
[INFO] [stdout]     |
[INFO] [stdout] 927 |                     for (model_gpu_state) in self.unit_part_gpu.states.iter_mut() {
[INFO] [stdout]     |                         ^               ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 927 -                     for (model_gpu_state) in self.unit_part_gpu.states.iter_mut() {
[INFO] [stdout] 927 +                     for model_gpu_state in self.unit_part_gpu.states.iter_mut() {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Point3`
[INFO] [stdout]   --> src/frame.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | use na::{Point3, Vector3};
[INFO] [stdout]    |          ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::unit`
[INFO] [stdout]   --> src/frame.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use crate::unit;
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Matrix4`
[INFO] [stdout]  --> src/frame_server/mod.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | use na::{Matrix4, Point3, Vector2, Vector3};
[INFO] [stdout]   |          ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused label
[INFO] [stdout]    --> src/frame_server/mod.rs:393:25
[INFO] [stdout]     |
[INFO] [stdout] 393 |                         'bot_test: for kbot_id in kbots_in_proximity.iter() {
[INFO] [stdout]     |                         ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_labels)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]    --> src/frame_server/mod.rs:452:10
[INFO] [stdout]     |
[INFO] [stdout] 452 |         };
[INFO] [stdout]     |          ^ help: remove this semicolon
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(redundant_semicolons)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::slice`
[INFO] [stdout]  --> src/glsl.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::slice;
[INFO] [stdout]   |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]   --> src/gpu_obj/arrow_gpu.rs:45:95
[INFO] [stdout]    |
[INFO] [stdout] 45 |         let pipeline = Self::create_pipeline(device, main_bind_group_layout, format).unwrap();;
[INFO] [stdout]    |                                                                                               ^ help: remove this semicolon
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model`
[INFO] [stdout]  --> src/gpu_obj/blit_texture.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::model;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model`
[INFO] [stdout]  --> src/gpu_obj/explosion.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::model;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BigEndian`, `ReadBytesExt`
[INFO] [stdout]    --> src/gpu_obj/explosion.rs:312:25
[INFO] [stdout]     |
[INFO] [stdout] 312 |         use byteorder::{BigEndian, ReadBytesExt};
[INFO] [stdout]     |                         ^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::slice`
[INFO] [stdout]   --> src/gpu_obj/glsl_compiler.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | use std::slice;
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model`
[INFO] [stdout]  --> src/gpu_obj/health_bar.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::model;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model`
[INFO] [stdout]  --> src/gpu_obj/line.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::model;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]   --> src/gpu_obj/line.rs:29:95
[INFO] [stdout]    |
[INFO] [stdout] 29 |         let pipeline = Self::create_pipeline(device, main_bind_group_layout, format).unwrap();;
[INFO] [stdout]    |                                                                                               ^ help: remove this semicolon
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]   --> src/gpu_obj/model_gpu.rs:46:95
[INFO] [stdout]    |
[INFO] [stdout] 46 |         let pipeline = Self::create_pipeline(device, main_bind_group_layout, format).unwrap();;
[INFO] [stdout]    |                                                                                               ^ help: remove this semicolon
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BindGroup`, `RenderPass`
[INFO] [stdout]  --> src/gpu_obj/trait_gpu.rs:2:12
[INFO] [stdout]   |
[INFO] [stdout] 2 | use wgpu::{BindGroup, BindGroupLayout, RenderPass, TextureFormat};
[INFO] [stdout]   |            ^^^^^^^^^                   ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model`
[INFO] [stdout]  --> src/gpu_obj/unit_icon.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::model;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]   --> src/gpu_obj/unit_icon.rs:29:95
[INFO] [stdout]    |
[INFO] [stdout] 29 |         let pipeline = Self::create_pipeline(device, main_bind_group_layout, format).unwrap();;
[INFO] [stdout]    |                                                                                               ^ help: remove this semicolon
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]   --> src/gpu_obj/water.rs:62:27
[INFO] [stdout]    |
[INFO] [stdout] 62 |                 .unwrap();;
[INFO] [stdout]    |                           ^ help: remove this semicolon
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::unit`
[INFO] [stdout]  --> src/mobile.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::unit;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `PathBuf`, `Path`
[INFO] [stdout]  --> src/mobile.rs:7:17
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::path::{Path, PathBuf};
[INFO] [stdout]   |                 ^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]   --> src/mobile.rs:37:20
[INFO] [stdout]    |
[INFO] [stdout] 37 |         let diff = (other - self);
[INFO] [stdout]    |                    ^            ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 37 -         let diff = (other - self);
[INFO] [stdout] 37 +         let diff = other - self;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::unit`
[INFO] [stdout]  --> src/moddef.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::unit;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::prelude::*`
[INFO] [stdout]  --> src/net_client.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::io::prelude::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]  --> src/net_client.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::io::BufReader;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::net::TcpListener`
[INFO] [stdout]  --> src/net_client.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::net::TcpListener;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::client::*`
[INFO] [stdout]  --> src/unit.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use super::client::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model::*`
[INFO] [stdout]  --> src/unit.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::model::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::utils::FileTree`
[INFO] [stdout]  --> src/unit.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::utils::FileTree;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `gpu_obj::model_gpu::ModelGpu`
[INFO] [stdout]  --> src/unit.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use gpu_obj::model_gpu::ModelGpu;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Vector2`, `Vector3`
[INFO] [stdout]  --> src/unit.rs:6:27
[INFO] [stdout]   |
[INFO] [stdout] 6 | use na::{Matrix4, Point3, Vector2, Vector3};
[INFO] [stdout]   |                           ^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `HashMap`, `HashSet`
[INFO] [stdout]  --> src/unit.rs:8:24
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::collections::{HashMap, HashSet};
[INFO] [stdout]   |                        ^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Path`
[INFO] [stdout]  --> src/unit.rs:9:17
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::path::{Path, PathBuf};
[INFO] [stdout]   |                 ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `IsometryMatrix3`, `Point3`, `Vector2`, `Vector4`
[INFO] [stdout]  --> src/utils.rs:2:10
[INFO] [stdout]   |
[INFO] [stdout] 2 | use na::{IsometryMatrix3, Matrix4, Point3, Vector2, Vector3, Vector4};
[INFO] [stdout]   |          ^^^^^^^^^^^^^^^           ^^^^^^  ^^^^^^^           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HashMap`
[INFO] [stdout]  --> src/utils.rs:6:24
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::collections::{HashMap, HashSet};
[INFO] [stdout]   |                        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DirEntry`
[INFO] [stdout]    --> src/utils.rs:134:21
[INFO] [stdout]     |
[INFO] [stdout] 134 | use std::fs::{self, DirEntry};
[INFO] [stdout]     |                     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io`
[INFO] [stdout]    --> src/utils.rs:135:5
[INFO] [stdout]     |
[INFO] [stdout] 135 | use std::io;
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Path`
[INFO] [stdout]    --> src/utils.rs:136:17
[INFO] [stdout]     |
[INFO] [stdout] 136 | use std::path::{Path, PathBuf};
[INFO] [stdout]     |                 ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BigEndian`, `ReadBytesExt`
[INFO] [stdout]    --> src/utils.rs:177:25
[INFO] [stdout]     |
[INFO] [stdout] 177 |         use byteorder::{BigEndian, ReadBytesExt};
[INFO] [stdout]     |                         ^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::prelude`
[INFO] [stdout]    --> src/client/unit_editor.rs:227:13
[INFO] [stdout]     |
[INFO] [stdout] 227 |         use std::io::prelude::*;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::prelude`
[INFO] [stdout]    --> src/client/unit_editor.rs:243:13
[INFO] [stdout]     |
[INFO] [stdout] 243 |         use std::io::prelude::*;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::prelude`
[INFO] [stdout]    --> src/client/heightmap_editor.rs:327:13
[INFO] [stdout]     |
[INFO] [stdout] 327 |         use std::io::prelude::*;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::prelude`
[INFO] [stdout]    --> src/client/unit_editor.rs:227:13
[INFO] [stdout]     |
[INFO] [stdout] 227 |         use std::io::prelude::*;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::prelude`
[INFO] [stdout]    --> src/client/unit_editor.rs:243:13
[INFO] [stdout]     |
[INFO] [stdout] 243 |         use std::io::prelude::*;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::prelude`
[INFO] [stdout]    --> src/client/heightmap_editor.rs:327:13
[INFO] [stdout]     |
[INFO] [stdout] 327 |         use std::io::prelude::*;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `id`
[INFO] [stdout]    --> src/client/unit_editor.rs:104:21
[INFO] [stdout]     |
[INFO] [stdout] 104 |                     id,
[INFO] [stdout]     |                     ^^ help: try ignoring the field: `id: _`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `radius`
[INFO] [stdout]    --> src/client/unit_editor.rs:106:21
[INFO] [stdout]     |
[INFO] [stdout] 106 |                     radius,
[INFO] [stdout]     |                     ^^^^^^ help: try ignoring the field: `radius: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `metal_cost`
[INFO] [stdout]    --> src/client/unit_editor.rs:115:21
[INFO] [stdout]     |
[INFO] [stdout] 115 |                     metal_cost,
[INFO] [stdout]     |                     ^^^^^^^^^^ help: try ignoring the field: `metal_cost: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `part_tree`
[INFO] [stdout]    --> src/client/unit_editor.rs:116:21
[INFO] [stdout]     |
[INFO] [stdout] 116 |                     part_tree,
[INFO] [stdout]     |                     ^^^^^^^^^ help: try ignoring the field: `part_tree: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/client/unit_editor.rs:236:13
[INFO] [stdout]     |
[INFO] [stdout] 236 |         let mut buf_w = BufWriter::new(file);
[INFO] [stdout]     |             ----^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/client/unit_editor.rs:251:13
[INFO] [stdout]     |
[INFO] [stdout] 251 |         let mut buf_r = BufReader::new(file);
[INFO] [stdout]     |             ----^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `deleter`
[INFO] [stdout]    --> src/client/unit_editor.rs:290:25
[INFO] [stdout]     |
[INFO] [stdout] 290 |                     let deleter = unit_editor.botdef.part_tree.remove_node(part_tree.id);
[INFO] [stdout]     |                         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_deleter`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/client/unit_editor.rs:492:46
[INFO] [stdout]     |
[INFO] [stdout] 492 |                         ModelGpuState::Error(e) => {
[INFO] [stdout]     |                                              ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/client/unit_editor.rs:583:51
[INFO] [stdout]     |
[INFO] [stdout] 583 |                         Some(ModelGpuState::Error(e)) => {
[INFO] [stdout]     |                                                   ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/client/heightmap_editor.rs:336:13
[INFO] [stdout]     |
[INFO] [stdout] 336 |         let mut buf_w = BufWriter::new(file);
[INFO] [stdout]     |             ----^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `id`
[INFO] [stdout]    --> src/client/unit_editor.rs:104:21
[INFO] [stdout]     |
[INFO] [stdout] 104 |                     id,
[INFO] [stdout]     |                     ^^ help: try ignoring the field: `id: _`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `radius`
[INFO] [stdout]    --> src/client/unit_editor.rs:106:21
[INFO] [stdout]     |
[INFO] [stdout] 106 |                     radius,
[INFO] [stdout]     |                     ^^^^^^ help: try ignoring the field: `radius: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `metal_cost`
[INFO] [stdout]    --> src/client/unit_editor.rs:115:21
[INFO] [stdout]     |
[INFO] [stdout] 115 |                     metal_cost,
[INFO] [stdout]     |                     ^^^^^^^^^^ help: try ignoring the field: `metal_cost: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `part_tree`
[INFO] [stdout]    --> src/client/unit_editor.rs:116:21
[INFO] [stdout]     |
[INFO] [stdout] 116 |                     part_tree,
[INFO] [stdout]     |                     ^^^^^^^^^ help: try ignoring the field: `part_tree: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/client/unit_editor.rs:236:13
[INFO] [stdout]     |
[INFO] [stdout] 236 |         let mut buf_w = BufWriter::new(file);
[INFO] [stdout]     |             ----^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/client/unit_editor.rs:251:13
[INFO] [stdout]     |
[INFO] [stdout] 251 |         let mut buf_r = BufReader::new(file);
[INFO] [stdout]     |             ----^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `deleter`
[INFO] [stdout]    --> src/client/unit_editor.rs:290:25
[INFO] [stdout]     |
[INFO] [stdout] 290 |                     let deleter = unit_editor.botdef.part_tree.remove_node(part_tree.id);
[INFO] [stdout]     |                         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_deleter`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `encoder`
[INFO] [stdout]    --> src/client/misc.rs:127:63
[INFO] [stdout]     |
[INFO] [stdout] 127 |     pub fn upload_to_gpu(&mut self, view_proj: &Matrix4<f32>, encoder: &mut wgpu::CommandEncoder) {
[INFO] [stdout]     |                                                               ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_encoder`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/client/unit_editor.rs:492:46
[INFO] [stdout]     |
[INFO] [stdout] 492 |                         ModelGpuState::Error(e) => {
[INFO] [stdout]     |                                              ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/client/unit_editor.rs:583:51
[INFO] [stdout]     |
[INFO] [stdout] 583 |                         Some(ModelGpuState::Error(e)) => {
[INFO] [stdout]     |                                                   ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/client/play.rs:70:21
[INFO] [stdout]    |
[INFO] [stdout] 70 |                 let mut moddef = crate::moddef::ModDef {
[INFO] [stdout]    |                     ----^^^^^^
[INFO] [stdout]    |                     |
[INFO] [stdout]    |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `delta_sim_sec`
[INFO] [stdout]    --> src/client/play.rs:114:9
[INFO] [stdout]     |
[INFO] [stdout] 114 |         delta_sim_sec: f32,
[INFO] [stdout]     |         ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_delta_sim_sec`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `encoder`
[INFO] [stdout]    --> src/client/play.rs:115:9
[INFO] [stdout]     |
[INFO] [stdout] 115 |         encoder: &mut wgpu::CommandEncoder,
[INFO] [stdout]     |         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_encoder`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]   --> src/client/render.rs:87:17
[INFO] [stdout]    |
[INFO] [stdout] 87 |                 _ => {
[INFO] [stdout]    |                 ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unreachable_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]   --> src/client/render.rs:45:21
[INFO] [stdout]    |
[INFO] [stdout] 45 |                     from,
[INFO] [stdout]    |                     ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]   --> src/client/render.rs:54:21
[INFO] [stdout]    |
[INFO] [stdout] 54 |                     from,
[INFO] [stdout]    |                     ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]   --> src/client/render.rs:61:21
[INFO] [stdout]    |
[INFO] [stdout] 61 |                     from,
[INFO] [stdout]    |                     ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]   --> src/client/render.rs:78:21
[INFO] [stdout]    |
[INFO] [stdout] 78 |                     from,
[INFO] [stdout]    |                     ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]   --> src/client/render.rs:82:21
[INFO] [stdout]    |
[INFO] [stdout] 82 |                     from,
[INFO] [stdout]    |                     ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `can_be_built`
[INFO] [stdout]    --> src/client/render.rs:405:29
[INFO] [stdout]     |
[INFO] [stdout] 405 |                         let can_be_built: Vec<_> = self
[INFO] [stdout]     |                             ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_can_be_built`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `d`
[INFO] [stdout]    --> src/client/render.rs:274:42
[INFO] [stdout]     |
[INFO] [stdout] 274 | ...                   .filter(|(n, d)| *n != "frame_time")
[INFO] [stdout]     |                                    ^ help: if this is intentional, prefix it with an underscore: `_d`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `d`
[INFO] [stdout]    --> src/client/render.rs:298:42
[INFO] [stdout]     |
[INFO] [stdout] 298 | ...                   .filter(|(n, d)| *n != "total")
[INFO] [stdout]     |                                    ^ help: if this is intentional, prefix it with an underscore: `_d`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/client/heightmap_editor.rs:336:13
[INFO] [stdout]     |
[INFO] [stdout] 336 |         let mut buf_w = BufWriter::new(file);
[INFO] [stdout]     |             ----^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `encoder`
[INFO] [stdout]    --> src/client/misc.rs:127:63
[INFO] [stdout]     |
[INFO] [stdout] 127 |     pub fn upload_to_gpu(&mut self, view_proj: &Matrix4<f32>, encoder: &mut wgpu::CommandEncoder) {
[INFO] [stdout]     |                                                               ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_encoder`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/client/render.rs:142:21
[INFO] [stdout]     |
[INFO] [stdout] 142 |                 let mut generic_gpu = ModelGpu::new(
[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/client/render.rs:149:21
[INFO] [stdout]     |
[INFO] [stdout] 149 |                 let mut generic_gpu_state_new = unit_part_gpu::ModelGpuState::Ready(generic_gpu);
[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/client/play.rs:70:21
[INFO] [stdout]    |
[INFO] [stdout] 70 |                 let mut moddef = crate::moddef::ModDef {
[INFO] [stdout]    |                     ----^^^^^^
[INFO] [stdout]    |                     |
[INFO] [stdout]    |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `delta_sim_sec`
[INFO] [stdout]    --> src/client/play.rs:114:9
[INFO] [stdout]     |
[INFO] [stdout] 114 |         delta_sim_sec: f32,
[INFO] [stdout]     |         ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_delta_sim_sec`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `encoder`
[INFO] [stdout]    --> src/client/play.rs:115:9
[INFO] [stdout]     |
[INFO] [stdout] 115 |         encoder: &mut wgpu::CommandEncoder,
[INFO] [stdout]     |         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_encoder`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]   --> src/client/render.rs:87:17
[INFO] [stdout]    |
[INFO] [stdout] 87 |                 _ => {
[INFO] [stdout]    |                 ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unreachable_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]   --> src/client/render.rs:45:21
[INFO] [stdout]    |
[INFO] [stdout] 45 |                     from,
[INFO] [stdout]    |                     ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]   --> src/client/render.rs:54:21
[INFO] [stdout]    |
[INFO] [stdout] 54 |                     from,
[INFO] [stdout]    |                     ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]   --> src/client/render.rs:61:21
[INFO] [stdout]    |
[INFO] [stdout] 61 |                     from,
[INFO] [stdout]    |                     ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]   --> src/client/render.rs:78:21
[INFO] [stdout]    |
[INFO] [stdout] 78 |                     from,
[INFO] [stdout]    |                     ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]   --> src/client/render.rs:82:21
[INFO] [stdout]    |
[INFO] [stdout] 82 |                     from,
[INFO] [stdout]    |                     ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `can_be_built`
[INFO] [stdout]    --> src/client/render.rs:405:29
[INFO] [stdout]     |
[INFO] [stdout] 405 |                         let can_be_built: Vec<_> = self
[INFO] [stdout]     |                             ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_can_be_built`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `d`
[INFO] [stdout]    --> src/client/render.rs:274:42
[INFO] [stdout]     |
[INFO] [stdout] 274 | ...                   .filter(|(n, d)| *n != "frame_time")
[INFO] [stdout]     |                                    ^ help: if this is intentional, prefix it with an underscore: `_d`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `d`
[INFO] [stdout]    --> src/client/render.rs:298:42
[INFO] [stdout]     |
[INFO] [stdout] 298 | ...                   .filter(|(n, d)| *n != "total")
[INFO] [stdout]     |                                    ^ help: if this is intentional, prefix it with an underscore: `_d`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/client/render.rs:142:21
[INFO] [stdout]     |
[INFO] [stdout] 142 |                 let mut generic_gpu = ModelGpu::new(
[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/client/render.rs:149:21
[INFO] [stdout]     |
[INFO] [stdout] 149 |                 let mut generic_gpu_state_new = unit_part_gpu::ModelGpuState::Ready(generic_gpu);
[INFO] [stdout]     |                     ----^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `id`
[INFO] [stdout]   --> src/frame_server/mod.rs:98:21
[INFO] [stdout]    |
[INFO] [stdout] 98 |                     id,
[INFO] [stdout]    |                     ^^ help: try ignoring the field: `id: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `id`
[INFO] [stdout]    --> src/frame_server/mod.rs:131:21
[INFO] [stdout]     |
[INFO] [stdout] 131 |                     id,
[INFO] [stdout]     |                     ^^ help: try ignoring the field: `id: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `to`
[INFO] [stdout]    --> src/frame_server/mod.rs:598:9
[INFO] [stdout]     |
[INFO] [stdout] 598 |         to,
[INFO] [stdout]     |         ^^ help: try ignoring the field: `to: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]    --> src/frame_server/mod.rs:600:9
[INFO] [stdout]     |
[INFO] [stdout] 600 |         from,
[INFO] [stdout]     |         ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `resources_surplus`
[INFO] [stdout]    --> src/frame_server/mod.rs:650:13
[INFO] [stdout]     |
[INFO] [stdout] 650 |     let mut resources_surplus = FnvHashMap::<Id<Player>, ResourceSurplus>::default();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_resources_surplus`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]    --> src/frame_server/mod.rs:654:9
[INFO] [stdout]     |
[INFO] [stdout] 654 |         from,
[INFO] [stdout]     |         ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `arrows`
[INFO] [stdout]    --> src/frame_server/mod.rs:261:5
[INFO] [stdout]     |
[INFO] [stdout] 261 |     arrows: &mut Vec<Arrow>,
[INFO] [stdout]     |     ^^^^^^ help: if this is intentional, prefix it with an underscore: `_arrows`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/frame_server/mod.rs:650:9
[INFO] [stdout]     |
[INFO] [stdout] 650 |     let mut resources_surplus = FnvHashMap::<Id<Player>, ResourceSurplus>::default();
[INFO] [stdout]     |         ----^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `id`
[INFO] [stdout]   --> src/frame_server/mod.rs:98:21
[INFO] [stdout]    |
[INFO] [stdout] 98 |                     id,
[INFO] [stdout]    |                     ^^ help: try ignoring the field: `id: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `id`
[INFO] [stdout]    --> src/frame_server/mod.rs:131:21
[INFO] [stdout]     |
[INFO] [stdout] 131 |                     id,
[INFO] [stdout]     |                     ^^ help: try ignoring the field: `id: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start`
[INFO] [stdout]    --> src/gpu_obj/heightmap_gpu.rs:188:13
[INFO] [stdout]     |
[INFO] [stdout] 188 |         let start = std::time::Instant::now();
[INFO] [stdout]     |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_start`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `to`
[INFO] [stdout]    --> src/frame_server/mod.rs:598:9
[INFO] [stdout]     |
[INFO] [stdout] 598 |         to,
[INFO] [stdout]     |         ^^ help: try ignoring the field: `to: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]    --> src/frame_server/mod.rs:600:9
[INFO] [stdout]     |
[INFO] [stdout] 600 |         from,
[INFO] [stdout]     |         ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `resources_surplus`
[INFO] [stdout]    --> src/frame_server/mod.rs:650:13
[INFO] [stdout]     |
[INFO] [stdout] 650 |     let mut resources_surplus = FnvHashMap::<Id<Player>, ResourceSurplus>::default();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_resources_surplus`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `from`
[INFO] [stdout]    --> src/frame_server/mod.rs:654:9
[INFO] [stdout]     |
[INFO] [stdout] 654 |         from,
[INFO] [stdout]     |         ^^^^ help: try ignoring the field: `from: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `arrows`
[INFO] [stdout]    --> src/frame_server/mod.rs:261:5
[INFO] [stdout]     |
[INFO] [stdout] 261 |     arrows: &mut Vec<Arrow>,
[INFO] [stdout]     |     ^^^^^^ help: if this is intentional, prefix it with an underscore: `_arrows`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `update_left` is never read
[INFO] [stdout]    --> src/gpu_obj/heightmap_gpu.rs:774:13
[INFO] [stdout]     |
[INFO] [stdout] 774 |             update_left -= update_to_do;
[INFO] [stdout]     |             ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/frame_server/mod.rs:650:9
[INFO] [stdout]     |
[INFO] [stdout] 650 |     let mut resources_surplus = FnvHashMap::<Id<Player>, ResourceSurplus>::default();
[INFO] [stdout]     |         ----^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `x`
[INFO] [stdout]   --> src/gpu_obj/heightmap_helper.rs:33:10
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub fn z(x: f32, y: f32) -> f32 {
[INFO] [stdout]    |          ^ help: if this is intentional, prefix it with an underscore: `_x`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `y`
[INFO] [stdout]   --> src/gpu_obj/heightmap_helper.rs:33:18
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub fn z(x: f32, y: f32) -> f32 {
[INFO] [stdout]    |                  ^ help: if this is intentional, prefix it with an underscore: `_y`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start`
[INFO] [stdout]    --> src/gpu_obj/heightmap_gpu.rs:188:13
[INFO] [stdout]     |
[INFO] [stdout] 188 |         let start = std::time::Instant::now();
[INFO] [stdout]     |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_start`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `update_left` is never read
[INFO] [stdout]    --> src/gpu_obj/heightmap_gpu.rs:774:13
[INFO] [stdout]     |
[INFO] [stdout] 774 |             update_left -= update_to_do;
[INFO] [stdout]     |             ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `device`
[INFO] [stdout]    --> src/gpu_obj/post_fx.rs:144:50
[INFO] [stdout]     |
[INFO] [stdout] 144 |     pub fn render(&self, rpass: &mut RenderPass, device: &Device, main_bind_group: &BindGroup) {
[INFO] [stdout]     |                                                  ^^^^^^ help: if this is intentional, prefix it with an underscore: `_device`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `device`
[INFO] [stdout]    --> src/gpu_obj/post_fxaa.rs:151:50
[INFO] [stdout]     |
[INFO] [stdout] 151 |     pub fn render(&self, rpass: &mut RenderPass, device: &Device, main_bind_group: &BindGroup) {
[INFO] [stdout]     |                                                  ^^^^^^ help: if this is intentional, prefix it with an underscore: `_device`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `device`
[INFO] [stdout]    --> src/gpu_obj/texture_view_bicopy.rs:141:50
[INFO] [stdout]     |
[INFO] [stdout] 141 |     pub fn render(&self, rpass: &mut RenderPass, device: &Device, main_bind_group: &BindGroup) {
[INFO] [stdout]     |                                                  ^^^^^^ help: if this is intentional, prefix it with an underscore: `_device`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `vertex_size`
[INFO] [stdout]    --> src/gpu_obj/water.rs:146:13
[INFO] [stdout]     |
[INFO] [stdout] 146 |         let vertex_size = std::mem::size_of::<model::Vertex>();
[INFO] [stdout]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_vertex_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `x`
[INFO] [stdout]   --> src/gpu_obj/heightmap_helper.rs:33:10
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub fn z(x: f32, y: f32) -> f32 {
[INFO] [stdout]    |          ^ help: if this is intentional, prefix it with an underscore: `_x`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `y`
[INFO] [stdout]   --> src/gpu_obj/heightmap_helper.rs:33:18
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub fn z(x: f32, y: f32) -> f32 {
[INFO] [stdout]    |                  ^ help: if this is intentional, prefix it with an underscore: `_y`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `j`
[INFO] [stdout]   --> src/heightmap_phy.rs:35:13
[INFO] [stdout]    |
[INFO] [stdout] 35 |         for j in 0..height {
[INFO] [stdout]    |             ^ help: if this is intentional, prefix it with an underscore: `_j`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `i`
[INFO] [stdout]   --> src/heightmap_phy.rs:36:17
[INFO] [stdout]    |
[INFO] [stdout] 36 |             for i in 0..width {
[INFO] [stdout]    |                 ^ help: if this is intentional, prefix it with an underscore: `_i`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `x`
[INFO] [stdout]   --> src/manager.rs:89:79
[INFO] [stdout]    |
[INFO] [stdout] 89 | ...                   frame::FrameEventFromPlayer::ReplaceFrame(x) => false,
[INFO] [stdout]    |                                                                 ^ help: if this is intentional, prefix it with an underscore: `_x`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `max`
[INFO] [stdout]   --> src/mobile.rs:35:13
[INFO] [stdout]    |
[INFO] [stdout] 35 |         let max = other + cone_angle;
[INFO] [stdout]    |             ^^^ help: if this is intentional, prefix it with an underscore: `_max`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `min`
[INFO] [stdout]   --> src/mobile.rs:36:13
[INFO] [stdout]    |
[INFO] [stdout] 36 |         let min = other - cone_angle;
[INFO] [stdout]    |             ^^^ help: if this is intentional, prefix it with an underscore: `_min`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `device`
[INFO] [stdout]    --> src/gpu_obj/post_fx.rs:144:50
[INFO] [stdout]     |
[INFO] [stdout] 144 |     pub fn render(&self, rpass: &mut RenderPass, device: &Device, main_bind_group: &BindGroup) {
[INFO] [stdout]     |                                                  ^^^^^^ help: if this is intentional, prefix it with an underscore: `_device`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `device`
[INFO] [stdout]    --> src/gpu_obj/post_fxaa.rs:151:50
[INFO] [stdout]     |
[INFO] [stdout] 151 |     pub fn render(&self, rpass: &mut RenderPass, device: &Device, main_bind_group: &BindGroup) {
[INFO] [stdout]     |                                                  ^^^^^^ help: if this is intentional, prefix it with an underscore: `_device`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `device`
[INFO] [stdout]    --> src/gpu_obj/texture_view_bicopy.rs:141:50
[INFO] [stdout]     |
[INFO] [stdout] 141 |     pub fn render(&self, rpass: &mut RenderPass, device: &Device, main_bind_group: &BindGroup) {
[INFO] [stdout]     |                                                  ^^^^^^ help: if this is intentional, prefix it with an underscore: `_device`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `vertex_size`
[INFO] [stdout]    --> src/gpu_obj/water.rs:146:13
[INFO] [stdout]     |
[INFO] [stdout] 146 |         let vertex_size = std::mem::size_of::<model::Vertex>();
[INFO] [stdout]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_vertex_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `j`
[INFO] [stdout]   --> src/heightmap_phy.rs:35:13
[INFO] [stdout]    |
[INFO] [stdout] 35 |         for j in 0..height {
[INFO] [stdout]    |             ^ help: if this is intentional, prefix it with an underscore: `_j`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `i`
[INFO] [stdout]   --> src/heightmap_phy.rs:36:17
[INFO] [stdout]    |
[INFO] [stdout] 36 |             for i in 0..width {
[INFO] [stdout]    |                 ^ help: if this is intentional, prefix it with an underscore: `_i`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `x`
[INFO] [stdout]   --> src/manager.rs:89:79
[INFO] [stdout]    |
[INFO] [stdout] 89 | ...                   frame::FrameEventFromPlayer::ReplaceFrame(x) => false,
[INFO] [stdout]    |                                                                 ^ help: if this is intentional, prefix it with an underscore: `_x`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `max`
[INFO] [stdout]   --> src/mobile.rs:35:13
[INFO] [stdout]    |
[INFO] [stdout] 35 |         let max = other + cone_angle;
[INFO] [stdout]    |             ^^^ help: if this is intentional, prefix it with an underscore: `_max`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `min`
[INFO] [stdout]   --> src/mobile.rs:36:13
[INFO] [stdout]    |
[INFO] [stdout] 36 |         let min = other - cone_angle;
[INFO] [stdout]    |             ^^^ help: if this is intentional, prefix it with an underscore: `_min`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame_server`
[INFO] [stdout]   --> src/main.rs:58:9
[INFO] [stdout]    |
[INFO] [stdout] 58 |     let frame_server =
[INFO] [stdout]    |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_frame_server`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `manager`
[INFO] [stdout]   --> src/main.rs:64:9
[INFO] [stdout]    |
[INFO] [stdout] 64 |     let manager = manager::Manager::new(
[INFO] [stdout]    |         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_manager`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `watcher` is never read
[INFO] [stdout]    --> src/client/mod.rs:134:5
[INFO] [stdout]     |
[INFO] [stdout] 84  | pub struct App {
[INFO] [stdout]     |            --- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 134 |     watcher: notify::RecommendedWatcher,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NEAR` is never used
[INFO] [stdout]  --> src/client/camera.rs:6:7
[INFO] [stdout]   |
[INFO] [stdout] 6 | const NEAR: f32 = 1.0;
[INFO] [stdout]   |       ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `path_get_mut` is never used
[INFO] [stdout]   --> src/client/unit_part_gpu.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl UnitPartGpu {
[INFO] [stdout]    | ---------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub fn path_get_mut(&mut self, path: PathBuf) -> Option<&mut ModelGpuState> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Move`, `Guard`, and `Attack` are never constructed
[INFO] [stdout]   --> src/client/uitool.rs:7:5
[INFO] [stdout]    |
[INFO] [stdout] 5  | pub enum UiTool {
[INFO] [stdout]    |          ------ variants in this enum
[INFO] [stdout] 6  |     None,
[INFO] [stdout] 7  |     Move,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 8  |     Repair,
[INFO] [stdout] 9  |     Guard,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 10 |     Attack,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `UiTool` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `energy` is never read
[INFO] [stdout]    --> src/frame_server/mod.rs:616:9
[INFO] [stdout]     |
[INFO] [stdout] 614 |     struct ResourceUsagePropMax {
[INFO] [stdout]     |            -------------------- field in this struct
[INFO] [stdout] 615 |         metal: f64,
[INFO] [stdout] 616 |         energy: f64,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `metal` and `energy` are never read
[INFO] [stdout]    --> src/frame_server/mod.rs:646:9
[INFO] [stdout]     |
[INFO] [stdout] 645 |     struct ResourceSurplus {
[INFO] [stdout]     |            --------------- fields in this struct
[INFO] [stdout] 646 |         metal: f64,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout] 647 |         energy: f64,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `noise_texture` is never read
[INFO] [stdout]   --> src/gpu_obj/blit_texture.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 6  | pub struct BlitTextureGpu {
[INFO] [stdout]    |            -------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 12 |     noise_texture: Texture,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `str_to_shader_stage` is never used
[INFO] [stdout]   --> src/gpu_obj/glsl_compiler.rs:11:4
[INFO] [stdout]    |
[INFO] [stdout] 11 | fn str_to_shader_stage(str: &str) -> ShaderStage {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `z` is never used
[INFO] [stdout]   --> src/gpu_obj/heightmap_helper.rs:33:8
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub fn z(x: f32, y: f32) -> f32 {
[INFO] [stdout]    |        ^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_texels` is never used
[INFO] [stdout]   --> src/gpu_obj/heightmap_helper.rs:47:8
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub fn create_texels(width: u32, height: u32, t: f32) -> Vec<f32> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `update_instance` is never used
[INFO] [stdout]    --> src/gpu_obj/model_gpu.rs:209:12
[INFO] [stdout]     |
[INFO] [stdout] 16  | impl ModelGpu {
[INFO] [stdout]     | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub fn update_instance(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `bind_state` is never read
[INFO] [stdout]   --> src/net_client.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct NetClientInfo {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 19 |     bind_state: BindState,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `NetClientInfo` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ID_CHARS` is never used
[INFO] [stdout]   --> src/utils.rs:28:7
[INFO] [stdout]    |
[INFO] [stdout] 28 | const ID_CHARS: [char; 62] = [
[INFO] [stdout]    |       ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ID_SIZE` is never used
[INFO] [stdout]   --> src/utils.rs:34:7
[INFO] [stdout]    |
[INFO] [stdout] 34 | const ID_SIZE: usize = 5;
[INFO] [stdout]    |       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rand_id_unsafe` is never used
[INFO] [stdout]    --> src/utils.rs:112:8
[INFO] [stdout]     |
[INFO] [stdout] 112 | pub fn rand_id_unsafe() -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `pop_set` is never used
[INFO] [stdout]    --> src/utils.rs:121:8
[INFO] [stdout]     |
[INFO] [stdout] 121 | pub fn pop_set<T: Clone + Eq + std::hash::Hash>(set: &mut HashSet<T>) -> T {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]  --> src/botdef.rs:7:34
[INFO] [stdout]   |
[INFO] [stdout] 7 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]   |                                  ^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_BotDef`
[INFO] [stdout]   = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]   = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]   = note: requested on the command line with `-D non-local-definitions`
[INFO] [stdout]   = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]  --> src/botdef.rs:7:45
[INFO] [stdout]   |
[INFO] [stdout] 7 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]   |                                             ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_BotDef`
[INFO] [stdout]   = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]   = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]   = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/client/mod.rs:863:13
[INFO] [stdout]     |
[INFO] [stdout] 863 |             std::mem::replace(to_update, Some(Vector3::new(vec[0], vec[1], vec[2])));
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 863 |             let _ = std::mem::replace(to_update, Some(Vector3::new(vec[0], vec[1], vec[2])));
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/client/mod.rs:865:13
[INFO] [stdout]     |
[INFO] [stdout] 865 |             std::mem::replace(to_update, None);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 865 |             let _ = std::mem::replace(to_update, None);
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/client/unit_editor.rs:237:9
[INFO] [stdout]     |
[INFO] [stdout] 237 |         serde_json::to_writer_pretty(buf_w, bot_def);
[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] 237 |         let _ = serde_json::to_writer_pretty(buf_w, bot_def);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: for loop over an `Option`. This is more readably written as an `if let` statement
[INFO] [stdout]    --> src/client/unit_editor.rs:270:37
[INFO] [stdout]     |
[INFO] [stdout] 270 |                     for node_mut in unit_editor.botdef.part_tree.find_node_mut(node.id) {
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(for_loops_over_fallibles)]` on by default
[INFO] [stdout] help: to check pattern in a loop use `while let`
[INFO] [stdout]     |
[INFO] [stdout] 270 |                     while let Some(node_mut) = unit_editor.botdef.part_tree.find_node_mut(node.id) {
[INFO] [stdout]     |                     ~~~~~~~~~~~~~~~        ~~~
[INFO] [stdout] help: consider using `if let` to clear intent
[INFO] [stdout]     |
[INFO] [stdout] 270 |                     if let Some(node_mut) = unit_editor.botdef.part_tree.find_node_mut(node.id) {
[INFO] [stdout]     |                     ~~~~~~~~~~~~        ~~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/client/heightmap_editor.rs:337:9
[INFO] [stdout]     |
[INFO] [stdout] 337 |         serde_json::to_writer_pretty(buf_w, &heightmap_gpu.phy.data);
[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] 337 |         let _ = serde_json::to_writer_pretty(buf_w, &heightmap_gpu.phy.data);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: for loop over an `Option`. This is more readably written as an `if let` statement
[INFO] [stdout]    --> src/client/misc.rs:504:41
[INFO] [stdout]     |
[INFO] [stdout] 504 | ...                   self.game_state.frame_zero.kbots.get(&id_builded)
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: to check pattern in a loop use `while let`
[INFO] [stdout]     |
[INFO] [stdout] 503 |                                     while let Some(target_kbot) = self.game_state.frame_zero.kbots.get(&id_builded)
[INFO] [stdout]     |                                     ~~~~~~~~~~~~~~~           ~~~
[INFO] [stdout] help: consider using `if let` to clear intent
[INFO] [stdout]     |
[INFO] [stdout] 503 |                                     if let Some(target_kbot) = self.game_state.frame_zero.kbots.get(&id_builded)
[INFO] [stdout]     |                                     ~~~~~~~~~~~~           ~~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: for loop over an `Option`. This is more readably written as an `if let` statement
[INFO] [stdout]    --> src/client/misc.rs:518:41
[INFO] [stdout]     |
[INFO] [stdout] 518 | ...                   self.game_state.frame_zero.kbots.get(&id_builded)
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: to check pattern in a loop use `while let`
[INFO] [stdout]     |
[INFO] [stdout] 517 |                                     while let Some(target_kbot) = self.game_state.frame_zero.kbots.get(&id_builded)
[INFO] [stdout]     |                                     ~~~~~~~~~~~~~~~           ~~~
[INFO] [stdout] help: consider using `if let` to clear intent
[INFO] [stdout]     |
[INFO] [stdout] 517 |                                     if let Some(target_kbot) = self.game_state.frame_zero.kbots.get(&id_builded)
[INFO] [stdout]     |                                     ~~~~~~~~~~~~           ~~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/client/render.rs:150:17
[INFO] [stdout]     |
[INFO] [stdout] 150 |                 std::mem::replace(generic_gpu_state, generic_gpu_state_new);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 150 |                 let _ = std::mem::replace(generic_gpu_state, generic_gpu_state_new);
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/frame.rs:19:34
[INFO] [stdout]    |
[INFO] [stdout] 19 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                                  ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_Player`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/frame.rs:19:45
[INFO] [stdout]    |
[INFO] [stdout] 19 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                                             ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_Player`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/frame.rs:41:24
[INFO] [stdout]    |
[INFO] [stdout] 41 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                        ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_FrameEventFromPlayer`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/frame.rs:41:35
[INFO] [stdout]    |
[INFO] [stdout] 41 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                                   ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_FrameEventFromPlayer`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/frame.rs:62:24
[INFO] [stdout]    |
[INFO] [stdout] 62 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                        ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_ProfilerMap`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/frame.rs:62:35
[INFO] [stdout]    |
[INFO] [stdout] 62 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                                   ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_ProfilerMap`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/frame.rs:95:24
[INFO] [stdout]    |
[INFO] [stdout] 95 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                        ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_DataToComputeNextFrame`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/frame.rs:95:35
[INFO] [stdout]    |
[INFO] [stdout] 95 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                                   ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_DataToComputeNextFrame`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/frame.rs:101:24
[INFO] [stdout]     |
[INFO] [stdout] 101 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]     |                        ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_FrameUpdate`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/frame.rs:101:35
[INFO] [stdout]     |
[INFO] [stdout] 101 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]     |                                   ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_FrameUpdate`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/frame.rs:106:24
[INFO] [stdout]     |
[INFO] [stdout] 106 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]     |                        ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_Frame`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/frame.rs:106:35
[INFO] [stdout]     |
[INFO] [stdout] 106 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]     |                                   ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_Frame`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: for loop over an `Option`. This is more readably written as an `if let` statement
[INFO] [stdout]    --> src/frame_server/mod.rs:120:37
[INFO] [stdout]     |
[INFO] [stdout] 120 |                         for kbot in frame.kbots.get_mut(selected_raw_id) {
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: to check pattern in a loop use `while let`
[INFO] [stdout]     |
[INFO] [stdout] 120 |                         while let Some(kbot) = frame.kbots.get_mut(selected_raw_id) {
[INFO] [stdout]     |                         ~~~~~~~~~~~~~~~    ~~~
[INFO] [stdout] help: consider using `if let` to clear intent
[INFO] [stdout]     |
[INFO] [stdout] 120 |                         if let Some(kbot) = frame.kbots.get_mut(selected_raw_id) {
[INFO] [stdout]     |                         ~~~~~~~~~~~~    ~~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: for loop over an `Option`. This is more readably written as an `if let` statement
[INFO] [stdout]    --> src/frame_server/mod.rs:136:37
[INFO] [stdout]     |
[INFO] [stdout] 136 |                         for kbot in frame.kbots.get_mut(selected_raw_id) {
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: to check pattern in a loop use `while let`
[INFO] [stdout]     |
[INFO] [stdout] 136 |                         while let Some(kbot) = frame.kbots.get_mut(selected_raw_id) {
[INFO] [stdout]     |                         ~~~~~~~~~~~~~~~    ~~~
[INFO] [stdout] help: consider using `if let` to clear intent
[INFO] [stdout]     |
[INFO] [stdout] 136 |                         if let Some(kbot) = frame.kbots.get_mut(selected_raw_id) {
[INFO] [stdout]     |                         ~~~~~~~~~~~~    ~~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/frame_server/mod.rs:275:9
[INFO] [stdout]     |
[INFO] [stdout] 275 |         std::mem::replace(grid, vec![Vec::<Id<KBot>>::new(); grid_w * grid_h]);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 275 |         let _ = std::mem::replace(grid, vec![Vec::<Id<KBot>>::new(); grid_w * grid_h]);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/frame_server/mod.rs:319:13
[INFO] [stdout]     |
[INFO] [stdout] 319 |             std::mem::replace(small_grid, vec![Vec::<Id<KBot>>::new(); grid_w * grid_h]);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 319 |             let _ = std::mem::replace(small_grid, vec![Vec::<Id<KBot>>::new(); grid_w * grid_h]);
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/arrow_gpu.rs:194:9
[INFO] [stdout]     |
[INFO] [stdout] 194 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 194 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/blit_texture.rs:235:9
[INFO] [stdout]     |
[INFO] [stdout] 235 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 235 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/explosion.rs:353:9
[INFO] [stdout]     |
[INFO] [stdout] 353 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 353 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/health_bar.rs:136:9
[INFO] [stdout]     |
[INFO] [stdout] 136 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 136 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/line.rs:131:9
[INFO] [stdout]     |
[INFO] [stdout] 131 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 131 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/model_gpu.rs:195:9
[INFO] [stdout]     |
[INFO] [stdout] 195 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 195 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/model_gpu.rs:205:9
[INFO] [stdout]     |
[INFO] [stdout] 205 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 205 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/unit_icon.rs:126:9
[INFO] [stdout]     |
[INFO] [stdout] 126 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 126 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]  --> src/heightmap_phy.rs:4:24
[INFO] [stdout]   |
[INFO] [stdout] 4 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]   |                        ^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_Data`
[INFO] [stdout]   = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]   = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]   = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]  --> src/heightmap_phy.rs:4:35
[INFO] [stdout]   |
[INFO] [stdout] 4 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]   |                                   ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_Data`
[INFO] [stdout]   = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]   = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]   = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]  --> src/heightmap_phy.rs:8:24
[INFO] [stdout]   |
[INFO] [stdout] 8 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]   |                        ^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_HeightmapPhy`
[INFO] [stdout]   = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]   = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]   = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]  --> src/heightmap_phy.rs:8:35
[INFO] [stdout]   |
[INFO] [stdout] 8 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]   |                                   ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_HeightmapPhy`
[INFO] [stdout]   = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]   = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]   = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/heightmap_phy.rs:15:24
[INFO] [stdout]    |
[INFO] [stdout] 15 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                        ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_MetalSpot`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/heightmap_phy.rs:15:35
[INFO] [stdout]    |
[INFO] [stdout] 15 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                                   ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_MetalSpot`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/mobile.rs:11:34
[INFO] [stdout]    |
[INFO] [stdout] 11 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                                  ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_ExplosionEvent`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/mobile.rs:11:45
[INFO] [stdout]    |
[INFO] [stdout] 11 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                                             ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_ExplosionEvent`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/mobile.rs:18:30
[INFO] [stdout]    |
[INFO] [stdout] 18 | #[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                              ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_Angle`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/mobile.rs:18:41
[INFO] [stdout]    |
[INFO] [stdout] 18 | #[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                                         ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_Angle`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/mobile.rs:107:34
[INFO] [stdout]     |
[INFO] [stdout] 107 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]     |                                  ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_Command`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/mobile.rs:107:45
[INFO] [stdout]     |
[INFO] [stdout] 107 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]     |                                             ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_Command`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/mobile.rs:114:34
[INFO] [stdout]     |
[INFO] [stdout] 114 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]     |                                  ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_KBot`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/mobile.rs:114:45
[INFO] [stdout]     |
[INFO] [stdout] 114 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]     |                                             ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_KBot`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/mobile.rs:193:34
[INFO] [stdout]     |
[INFO] [stdout] 193 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]     |                                  ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_KinematicProjectile`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/mobile.rs:193:45
[INFO] [stdout]     |
[INFO] [stdout] 193 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]     |                                             ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_KinematicProjectile`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/mobile.rs:242:24
[INFO] [stdout]     |
[INFO] [stdout] 242 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]     |                        ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_Arrow`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/mobile.rs:242:35
[INFO] [stdout]     |
[INFO] [stdout] 242 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]     |                                   ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_Arrow`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]  --> src/moddef.rs:9:34
[INFO] [stdout]   |
[INFO] [stdout] 9 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]   |                                  ^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_ModDef`
[INFO] [stdout]   = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]   = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]   = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]  --> src/moddef.rs:9:45
[INFO] [stdout]   |
[INFO] [stdout] 9 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]   |                                             ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_ModDef`
[INFO] [stdout]   = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]   = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]   = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame_server`
[INFO] [stdout]   --> src/main.rs:58:9
[INFO] [stdout]    |
[INFO] [stdout] 58 |     let frame_server =
[INFO] [stdout]    |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_frame_server`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `manager`
[INFO] [stdout]   --> src/main.rs:64:9
[INFO] [stdout]    |
[INFO] [stdout] 64 |     let manager = manager::Manager::new(
[INFO] [stdout]    |         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_manager`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/unit.rs:11:35
[INFO] [stdout]    |
[INFO] [stdout] 11 | #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
[INFO] [stdout]    |                                   ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_PlacedMesh`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/unit.rs:11:46
[INFO] [stdout]    |
[INFO] [stdout] 11 | #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
[INFO] [stdout]    |                                              ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_PlacedMesh`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/unit.rs:18:35
[INFO] [stdout]    |
[INFO] [stdout] 18 | #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
[INFO] [stdout]    |                                   ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_PlacedCollider`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/unit.rs:18:46
[INFO] [stdout]    |
[INFO] [stdout] 18 | #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
[INFO] [stdout]    |                                              ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_PlacedCollider`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/unit.rs:23:35
[INFO] [stdout]    |
[INFO] [stdout] 23 | #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
[INFO] [stdout]    |                                   ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_Joint`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/unit.rs:23:46
[INFO] [stdout]    |
[INFO] [stdout] 23 | #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
[INFO] [stdout]    |                                              ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_Joint`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]   --> src/unit.rs:41:9
[INFO] [stdout]    |
[INFO] [stdout] 41 |         std::mem::replace(self, next);
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 41 |         let _ = std::mem::replace(self, next);
[INFO] [stdout]    |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/unit.rs:45:55
[INFO] [stdout]    |
[INFO] [stdout] 45 | #[derive(Debug, Clone, typename::TypeName, PartialEq, Serialize, Deserialize)]
[INFO] [stdout]    |                                                       ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_PartTree`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/unit.rs:45:66
[INFO] [stdout]    |
[INFO] [stdout] 45 | #[derive(Debug, Clone, typename::TypeName, PartialEq, Serialize, Deserialize)]
[INFO] [stdout]    |                                                                  ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_PartTree`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/utils.rs:42:10
[INFO] [stdout]    |
[INFO] [stdout] 42 | #[derive(Serialize, Deserialize)]
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_Id`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/utils.rs:42:21
[INFO] [stdout]    |
[INFO] [stdout] 42 | #[derive(Serialize, Deserialize)]
[INFO] [stdout]    |                     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_Id`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `watcher` is never read
[INFO] [stdout]    --> src/client/mod.rs:134:5
[INFO] [stdout]     |
[INFO] [stdout] 84  | pub struct App {
[INFO] [stdout]     |            --- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 134 |     watcher: notify::RecommendedWatcher,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NEAR` is never used
[INFO] [stdout]  --> src/client/camera.rs:6:7
[INFO] [stdout]   |
[INFO] [stdout] 6 | const NEAR: f32 = 1.0;
[INFO] [stdout]   |       ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `path_get_mut` is never used
[INFO] [stdout]   --> src/client/unit_part_gpu.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl UnitPartGpu {
[INFO] [stdout]    | ---------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub fn path_get_mut(&mut self, path: PathBuf) -> Option<&mut ModelGpuState> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Move`, `Guard`, and `Attack` are never constructed
[INFO] [stdout]   --> src/client/uitool.rs:7:5
[INFO] [stdout]    |
[INFO] [stdout] 5  | pub enum UiTool {
[INFO] [stdout]    |          ------ variants in this enum
[INFO] [stdout] 6  |     None,
[INFO] [stdout] 7  |     Move,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 8  |     Repair,
[INFO] [stdout] 9  |     Guard,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 10 |     Attack,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `UiTool` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `energy` is never read
[INFO] [stdout]    --> src/frame_server/mod.rs:616:9
[INFO] [stdout]     |
[INFO] [stdout] 614 |     struct ResourceUsagePropMax {
[INFO] [stdout]     |            -------------------- field in this struct
[INFO] [stdout] 615 |         metal: f64,
[INFO] [stdout] 616 |         energy: f64,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `metal` and `energy` are never read
[INFO] [stdout]    --> src/frame_server/mod.rs:646:9
[INFO] [stdout]     |
[INFO] [stdout] 645 |     struct ResourceSurplus {
[INFO] [stdout]     |            --------------- fields in this struct
[INFO] [stdout] 646 |         metal: f64,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout] 647 |         energy: f64,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `noise_texture` is never read
[INFO] [stdout]   --> src/gpu_obj/blit_texture.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 6  | pub struct BlitTextureGpu {
[INFO] [stdout]    |            -------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 12 |     noise_texture: Texture,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `str_to_shader_stage` is never used
[INFO] [stdout]   --> src/gpu_obj/glsl_compiler.rs:11:4
[INFO] [stdout]    |
[INFO] [stdout] 11 | fn str_to_shader_stage(str: &str) -> ShaderStage {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `z` is never used
[INFO] [stdout]   --> src/gpu_obj/heightmap_helper.rs:33:8
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub fn z(x: f32, y: f32) -> f32 {
[INFO] [stdout]    |        ^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_texels` is never used
[INFO] [stdout]   --> src/gpu_obj/heightmap_helper.rs:47:8
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub fn create_texels(width: u32, height: u32, t: f32) -> Vec<f32> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `update_instance` is never used
[INFO] [stdout]    --> src/gpu_obj/model_gpu.rs:209:12
[INFO] [stdout]     |
[INFO] [stdout] 16  | impl ModelGpu {
[INFO] [stdout]     | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub fn update_instance(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `bind_state` is never read
[INFO] [stdout]   --> src/net_client.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct NetClientInfo {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 19 |     bind_state: BindState,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `NetClientInfo` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ID_CHARS` is never used
[INFO] [stdout]   --> src/utils.rs:28:7
[INFO] [stdout]    |
[INFO] [stdout] 28 | const ID_CHARS: [char; 62] = [
[INFO] [stdout]    |       ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ID_SIZE` is never used
[INFO] [stdout]   --> src/utils.rs:34:7
[INFO] [stdout]    |
[INFO] [stdout] 34 | const ID_SIZE: usize = 5;
[INFO] [stdout]    |       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rand_id_unsafe` is never used
[INFO] [stdout]    --> src/utils.rs:112:8
[INFO] [stdout]     |
[INFO] [stdout] 112 | pub fn rand_id_unsafe() -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `pop_set` is never used
[INFO] [stdout]    --> src/utils.rs:121:8
[INFO] [stdout]     |
[INFO] [stdout] 121 | pub fn pop_set<T: Clone + Eq + std::hash::Hash>(set: &mut HashSet<T>) -> T {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]  --> src/botdef.rs:7:34
[INFO] [stdout]   |
[INFO] [stdout] 7 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]   |                                  ^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_BotDef`
[INFO] [stdout]   = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]   = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]   = note: requested on the command line with `-D non-local-definitions`
[INFO] [stdout]   = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]  --> src/botdef.rs:7:45
[INFO] [stdout]   |
[INFO] [stdout] 7 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]   |                                             ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_BotDef`
[INFO] [stdout]   = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]   = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]   = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/client/mod.rs:863:13
[INFO] [stdout]     |
[INFO] [stdout] 863 |             std::mem::replace(to_update, Some(Vector3::new(vec[0], vec[1], vec[2])));
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 863 |             let _ = std::mem::replace(to_update, Some(Vector3::new(vec[0], vec[1], vec[2])));
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/client/mod.rs:865:13
[INFO] [stdout]     |
[INFO] [stdout] 865 |             std::mem::replace(to_update, None);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 865 |             let _ = std::mem::replace(to_update, None);
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/client/unit_editor.rs:237:9
[INFO] [stdout]     |
[INFO] [stdout] 237 |         serde_json::to_writer_pretty(buf_w, bot_def);
[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] 237 |         let _ = serde_json::to_writer_pretty(buf_w, bot_def);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: for loop over an `Option`. This is more readably written as an `if let` statement
[INFO] [stdout]    --> src/client/unit_editor.rs:270:37
[INFO] [stdout]     |
[INFO] [stdout] 270 |                     for node_mut in unit_editor.botdef.part_tree.find_node_mut(node.id) {
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(for_loops_over_fallibles)]` on by default
[INFO] [stdout] help: to check pattern in a loop use `while let`
[INFO] [stdout]     |
[INFO] [stdout] 270 |                     while let Some(node_mut) = unit_editor.botdef.part_tree.find_node_mut(node.id) {
[INFO] [stdout]     |                     ~~~~~~~~~~~~~~~        ~~~
[INFO] [stdout] help: consider using `if let` to clear intent
[INFO] [stdout]     |
[INFO] [stdout] 270 |                     if let Some(node_mut) = unit_editor.botdef.part_tree.find_node_mut(node.id) {
[INFO] [stdout]     |                     ~~~~~~~~~~~~        ~~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]    --> src/client/heightmap_editor.rs:337:9
[INFO] [stdout]     |
[INFO] [stdout] 337 |         serde_json::to_writer_pretty(buf_w, &heightmap_gpu.phy.data);
[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] 337 |         let _ = serde_json::to_writer_pretty(buf_w, &heightmap_gpu.phy.data);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: for loop over an `Option`. This is more readably written as an `if let` statement
[INFO] [stdout]    --> src/client/misc.rs:504:41
[INFO] [stdout]     |
[INFO] [stdout] 504 | ...                   self.game_state.frame_zero.kbots.get(&id_builded)
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: to check pattern in a loop use `while let`
[INFO] [stdout]     |
[INFO] [stdout] 503 |                                     while let Some(target_kbot) = self.game_state.frame_zero.kbots.get(&id_builded)
[INFO] [stdout]     |                                     ~~~~~~~~~~~~~~~           ~~~
[INFO] [stdout] help: consider using `if let` to clear intent
[INFO] [stdout]     |
[INFO] [stdout] 503 |                                     if let Some(target_kbot) = self.game_state.frame_zero.kbots.get(&id_builded)
[INFO] [stdout]     |                                     ~~~~~~~~~~~~           ~~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: for loop over an `Option`. This is more readably written as an `if let` statement
[INFO] [stdout]    --> src/client/misc.rs:518:41
[INFO] [stdout]     |
[INFO] [stdout] 518 | ...                   self.game_state.frame_zero.kbots.get(&id_builded)
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: to check pattern in a loop use `while let`
[INFO] [stdout]     |
[INFO] [stdout] 517 |                                     while let Some(target_kbot) = self.game_state.frame_zero.kbots.get(&id_builded)
[INFO] [stdout]     |                                     ~~~~~~~~~~~~~~~           ~~~
[INFO] [stdout] help: consider using `if let` to clear intent
[INFO] [stdout]     |
[INFO] [stdout] 517 |                                     if let Some(target_kbot) = self.game_state.frame_zero.kbots.get(&id_builded)
[INFO] [stdout]     |                                     ~~~~~~~~~~~~           ~~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/client/render.rs:150:17
[INFO] [stdout]     |
[INFO] [stdout] 150 |                 std::mem::replace(generic_gpu_state, generic_gpu_state_new);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 150 |                 let _ = std::mem::replace(generic_gpu_state, generic_gpu_state_new);
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/frame.rs:19:34
[INFO] [stdout]    |
[INFO] [stdout] 19 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                                  ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_Player`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/frame.rs:19:45
[INFO] [stdout]    |
[INFO] [stdout] 19 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                                             ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_Player`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/frame.rs:41:24
[INFO] [stdout]    |
[INFO] [stdout] 41 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                        ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_FrameEventFromPlayer`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/frame.rs:41:35
[INFO] [stdout]    |
[INFO] [stdout] 41 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                                   ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_FrameEventFromPlayer`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/frame.rs:62:24
[INFO] [stdout]    |
[INFO] [stdout] 62 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                        ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_ProfilerMap`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/frame.rs:62:35
[INFO] [stdout]    |
[INFO] [stdout] 62 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                                   ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_ProfilerMap`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/frame.rs:95:24
[INFO] [stdout]    |
[INFO] [stdout] 95 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                        ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_DataToComputeNextFrame`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/frame.rs:95:35
[INFO] [stdout]    |
[INFO] [stdout] 95 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                                   ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_DataToComputeNextFrame`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/frame.rs:101:24
[INFO] [stdout]     |
[INFO] [stdout] 101 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]     |                        ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_FrameUpdate`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/frame.rs:101:35
[INFO] [stdout]     |
[INFO] [stdout] 101 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]     |                                   ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_FrameUpdate`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/frame.rs:106:24
[INFO] [stdout]     |
[INFO] [stdout] 106 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]     |                        ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_Frame`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/frame.rs:106:35
[INFO] [stdout]     |
[INFO] [stdout] 106 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]     |                                   ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_Frame`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: for loop over an `Option`. This is more readably written as an `if let` statement
[INFO] [stdout]    --> src/frame_server/mod.rs:120:37
[INFO] [stdout]     |
[INFO] [stdout] 120 |                         for kbot in frame.kbots.get_mut(selected_raw_id) {
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: to check pattern in a loop use `while let`
[INFO] [stdout]     |
[INFO] [stdout] 120 |                         while let Some(kbot) = frame.kbots.get_mut(selected_raw_id) {
[INFO] [stdout]     |                         ~~~~~~~~~~~~~~~    ~~~
[INFO] [stdout] help: consider using `if let` to clear intent
[INFO] [stdout]     |
[INFO] [stdout] 120 |                         if let Some(kbot) = frame.kbots.get_mut(selected_raw_id) {
[INFO] [stdout]     |                         ~~~~~~~~~~~~    ~~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: for loop over an `Option`. This is more readably written as an `if let` statement
[INFO] [stdout]    --> src/frame_server/mod.rs:136:37
[INFO] [stdout]     |
[INFO] [stdout] 136 |                         for kbot in frame.kbots.get_mut(selected_raw_id) {
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: to check pattern in a loop use `while let`
[INFO] [stdout]     |
[INFO] [stdout] 136 |                         while let Some(kbot) = frame.kbots.get_mut(selected_raw_id) {
[INFO] [stdout]     |                         ~~~~~~~~~~~~~~~    ~~~
[INFO] [stdout] help: consider using `if let` to clear intent
[INFO] [stdout]     |
[INFO] [stdout] 136 |                         if let Some(kbot) = frame.kbots.get_mut(selected_raw_id) {
[INFO] [stdout]     |                         ~~~~~~~~~~~~    ~~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/frame_server/mod.rs:275:9
[INFO] [stdout]     |
[INFO] [stdout] 275 |         std::mem::replace(grid, vec![Vec::<Id<KBot>>::new(); grid_w * grid_h]);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 275 |         let _ = std::mem::replace(grid, vec![Vec::<Id<KBot>>::new(); grid_w * grid_h]);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/frame_server/mod.rs:319:13
[INFO] [stdout]     |
[INFO] [stdout] 319 |             std::mem::replace(small_grid, vec![Vec::<Id<KBot>>::new(); grid_w * grid_h]);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 319 |             let _ = std::mem::replace(small_grid, vec![Vec::<Id<KBot>>::new(); grid_w * grid_h]);
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/arrow_gpu.rs:194:9
[INFO] [stdout]     |
[INFO] [stdout] 194 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 194 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/blit_texture.rs:235:9
[INFO] [stdout]     |
[INFO] [stdout] 235 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 235 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/explosion.rs:353:9
[INFO] [stdout]     |
[INFO] [stdout] 353 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 353 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/health_bar.rs:136:9
[INFO] [stdout]     |
[INFO] [stdout] 136 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 136 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: aborting due to 44 previous errors; 158 warnings emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/line.rs:131:9
[INFO] [stdout]     |
[INFO] [stdout] 131 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 131 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/model_gpu.rs:195:9
[INFO] [stdout]     |
[INFO] [stdout] 195 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 195 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/model_gpu.rs:205:9
[INFO] [stdout]     |
[INFO] [stdout] 205 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 205 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]    --> src/gpu_obj/unit_icon.rs:126:9
[INFO] [stdout]     |
[INFO] [stdout] 126 |         std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 126 |         let _ = std::mem::replace(&mut self.instance_buf, temp_buf);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]  --> src/heightmap_phy.rs:4:24
[INFO] [stdout]   |
[INFO] [stdout] 4 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]   |                        ^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_Data`
[INFO] [stdout]   = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]   = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]   = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]  --> src/heightmap_phy.rs:4:35
[INFO] [stdout]   |
[INFO] [stdout] 4 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]   |                                   ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_Data`
[INFO] [stdout]   = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]   = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]   = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]  --> src/heightmap_phy.rs:8:24
[INFO] [stdout]   |
[INFO] [stdout] 8 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]   |                        ^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_HeightmapPhy`
[INFO] [stdout]   = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]   = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]   = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]  --> src/heightmap_phy.rs:8:35
[INFO] [stdout]   |
[INFO] [stdout] 8 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]   |                                   ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_HeightmapPhy`
[INFO] [stdout]   = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]   = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]   = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/heightmap_phy.rs:15:24
[INFO] [stdout]    |
[INFO] [stdout] 15 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                        ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_MetalSpot`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/heightmap_phy.rs:15:35
[INFO] [stdout]    |
[INFO] [stdout] 15 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                                   ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_MetalSpot`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/mobile.rs:11:34
[INFO] [stdout]    |
[INFO] [stdout] 11 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                                  ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_ExplosionEvent`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/mobile.rs:11:45
[INFO] [stdout]    |
[INFO] [stdout] 11 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                                             ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_ExplosionEvent`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/mobile.rs:18:30
[INFO] [stdout]    |
[INFO] [stdout] 18 | #[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                              ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_Angle`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/mobile.rs:18:41
[INFO] [stdout]    |
[INFO] [stdout] 18 | #[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]    |                                         ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_Angle`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/mobile.rs:107:34
[INFO] [stdout]     |
[INFO] [stdout] 107 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]     |                                  ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_Command`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/mobile.rs:107:45
[INFO] [stdout]     |
[INFO] [stdout] 107 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]     |                                             ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_Command`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/mobile.rs:114:34
[INFO] [stdout]     |
[INFO] [stdout] 114 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]     |                                  ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_KBot`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/mobile.rs:114:45
[INFO] [stdout]     |
[INFO] [stdout] 114 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]     |                                             ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_KBot`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/mobile.rs:193:34
[INFO] [stdout]     |
[INFO] [stdout] 193 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]     |                                  ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_KinematicProjectile`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/mobile.rs:193:45
[INFO] [stdout]     |
[INFO] [stdout] 193 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]     |                                             ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_KinematicProjectile`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/mobile.rs:242:24
[INFO] [stdout]     |
[INFO] [stdout] 242 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]     |                        ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_Arrow`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]    --> src/mobile.rs:242:35
[INFO] [stdout]     |
[INFO] [stdout] 242 | #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]     |                                   ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_Arrow`
[INFO] [stdout]     = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]     = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]     = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]  --> src/moddef.rs:9:34
[INFO] [stdout]   |
[INFO] [stdout] 9 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]   |                                  ^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_ModDef`
[INFO] [stdout]   = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]   = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]   = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]  --> src/moddef.rs:9:45
[INFO] [stdout]   |
[INFO] [stdout] 9 | #[derive(Clone, TypeName, Debug, Serialize, Deserialize, PartialEq)]
[INFO] [stdout]   |                                             ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_ModDef`
[INFO] [stdout]   = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]   = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]   = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/unit.rs:11:35
[INFO] [stdout]    |
[INFO] [stdout] 11 | #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
[INFO] [stdout]    |                                   ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_PlacedMesh`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/unit.rs:11:46
[INFO] [stdout]    |
[INFO] [stdout] 11 | #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
[INFO] [stdout]    |                                              ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_PlacedMesh`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/unit.rs:18:35
[INFO] [stdout]    |
[INFO] [stdout] 18 | #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
[INFO] [stdout]    |                                   ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_PlacedCollider`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/unit.rs:18:46
[INFO] [stdout]    |
[INFO] [stdout] 18 | #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
[INFO] [stdout]    |                                              ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_PlacedCollider`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/unit.rs:23:35
[INFO] [stdout]    |
[INFO] [stdout] 23 | #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
[INFO] [stdout]    |                                   ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_Joint`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/unit.rs:23:46
[INFO] [stdout]    |
[INFO] [stdout] 23 | #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
[INFO] [stdout]    |                                              ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_Joint`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used
[INFO] [stdout]   --> src/unit.rs:41:9
[INFO] [stdout]    |
[INFO] [stdout] 41 |         std::mem::replace(self, next);
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: if you don't need the old value, you can just assign the new value directly
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 41 |         let _ = std::mem::replace(self, next);
[INFO] [stdout]    |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/unit.rs:45:55
[INFO] [stdout]    |
[INFO] [stdout] 45 | #[derive(Debug, Clone, typename::TypeName, PartialEq, Serialize, Deserialize)]
[INFO] [stdout]    |                                                       ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_PartTree`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/unit.rs:45:66
[INFO] [stdout]    |
[INFO] [stdout] 45 | #[derive(Debug, Clone, typename::TypeName, PartialEq, Serialize, Deserialize)]
[INFO] [stdout]    |                                                                  ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_PartTree`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/utils.rs:42:10
[INFO] [stdout]    |
[INFO] [stdout] 42 | #[derive(Serialize, Deserialize)]
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_SERIALIZE_FOR_Id`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: non-local `impl` definition, they should be avoided as they go against expectation
[INFO] [stdout]   --> src/utils.rs:42:21
[INFO] [stdout]    |
[INFO] [stdout] 42 | #[derive(Serialize, Deserialize)]
[INFO] [stdout]    |                     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: move this `impl` block outside the of the current constant `_IMPL_DESERIALIZE_FOR_Id`
[INFO] [stdout]    = note: an `impl` definition is non-local if it is nested inside an item and neither the type nor the trait are at the same nesting level as the `impl` block
[INFO] [stdout]    = note: this lint may become deny-by-default in the edition 2024 and higher, see the tracking issue <https://github.com/rust-lang/rust/issues/120363>
[INFO] [stdout]    = note: this error originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `oxidator` (bin "oxidator" test) due to 45 previous errors; 158 warnings emitted
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stdout] error: aborting due to 44 previous errors; 158 warnings emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `oxidator` (bin "oxidator") due to 45 previous errors; 158 warnings emitted
[INFO] running `Command { std: "docker" "inspect" "e074475d32bb71203d6ea84a251780bff5eaa73a34951c8dfa32d5d82cc8c753", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "e074475d32bb71203d6ea84a251780bff5eaa73a34951c8dfa32d5d82cc8c753", kill_on_drop: false }`
[INFO] [stdout] e074475d32bb71203d6ea84a251780bff5eaa73a34951c8dfa32d5d82cc8c753
