[INFO] cloning repository https://github.com/conwayste/netwayste [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/conwayste/netwayste" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fconwayste%2Fnetwayste", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fconwayste%2Fnetwayste'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 986b6eb3f09744651524a628ec74dbb47d7063f1 [INFO] linting conwayste/netwayste against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fconwayste%2Fnetwayste" "/workspace/builds/worker-5-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/conwayste/netwayste [INFO] finished tweaking git repo https://github.com/conwayste/netwayste [INFO] tweaked toml for git repo https://github.com/conwayste/netwayste written to /workspace/builds/worker-5-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/conwayste/netwayste on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "generate-lockfile" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Locking 188 packages to latest compatible versions [INFO] [stderr] Adding base64 v0.10.1 (available: v0.22.1) [INFO] [stderr] Adding bincode v0.9.2 (available: v3.0.0) [INFO] [stderr] Adding clap v2.34.0 (available: v4.6.0) [INFO] [stderr] Adding color-backtrace v0.1.3 (available: v0.7.2) [INFO] [stderr] Adding env_logger v0.6.2 (available: v0.11.9) [INFO] [stderr] Adding futures v0.1.31 (available: v0.3.32) [INFO] [stderr] Adding proptest v0.7.2 (available: v1.10.0) [INFO] [stderr] Adding rand v0.6.5 (available: v0.10.0) [INFO] [stderr] Adding semver v0.9.0 (available: v1.0.27) [INFO] [stderr] Adding time v0.1.45 (available: v0.3.47) [INFO] [stderr] Adding wasi v0.10.0+wasi-snapshot-preview1 (available: v0.10.2+wasi-snapshot-preview1) [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded color-backtrace v0.1.3 [INFO] [stderr] Downloaded bincode v0.9.2 [INFO] [stderr] Downloaded proptest v0.7.2 [INFO] [stderr] Downloaded rusty-fork v0.2.2 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 57e3d783471fe50f45263c1c4cc6f30cdfc24144db2a9becd5f5cdbfc93f6220 [INFO] running `Command { std: "docker" "start" "-a" "57e3d783471fe50f45263c1c4cc6f30cdfc24144db2a9becd5f5cdbfc93f6220", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "57e3d783471fe50f45263c1c4cc6f30cdfc24144db2a9becd5f5cdbfc93f6220", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "57e3d783471fe50f45263c1c4cc6f30cdfc24144db2a9becd5f5cdbfc93f6220", kill_on_drop: false }` [INFO] [stdout] 57e3d783471fe50f45263c1c4cc6f30cdfc24144db2a9becd5f5cdbfc93f6220 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 35e98f4cb85c74923c9506e2d76bcdc1de69dce07e5d4a8802b1daa3f3825f61 [INFO] running `Command { std: "docker" "start" "-a" "35e98f4cb85c74923c9506e2d76bcdc1de69dce07e5d4a8802b1daa3f3825f61", kill_on_drop: false }` [INFO] [stderr] Compiling crossbeam-utils v0.7.2 [INFO] [stderr] Compiling memoffset v0.5.6 [INFO] [stderr] Compiling autocfg v0.1.8 [INFO] [stderr] Compiling crossbeam-epoch v0.8.2 [INFO] [stderr] Checking iovec v0.1.4 [INFO] [stderr] Checking num_cpus v1.17.0 [INFO] [stderr] Checking net2 v0.2.39 [INFO] [stderr] Compiling object v0.37.3 [INFO] [stderr] Compiling syn v2.0.117 [INFO] [stderr] Checking aho-corasick v1.1.4 [INFO] [stderr] Checking regex-syntax v0.8.10 [INFO] [stderr] Checking gimli v0.32.3 [INFO] [stderr] Checking parking_lot_core v0.6.3 [INFO] [stderr] Checking once_cell v1.21.4 [INFO] [stderr] Checking miniz_oxide v0.8.9 [INFO] [stderr] Checking wait-timeout v0.2.1 [INFO] [stderr] Compiling rand_pcg v0.1.2 [INFO] [stderr] Checking bytes v0.4.12 [INFO] [stderr] Checking parking_lot v0.9.0 [INFO] [stderr] Compiling rand_chacha v0.1.1 [INFO] [stderr] Checking tempfile v3.27.0 [INFO] [stderr] Checking mio v0.6.23 [INFO] [stderr] Compiling rand v0.6.5 [INFO] [stderr] Checking dirs v1.0.5 [INFO] [stderr] Checking atty v0.2.14 [INFO] [stderr] Checking rustc-demangle v0.1.27 [INFO] [stderr] Checking tokio-io v0.1.13 [INFO] [stderr] Checking term v0.5.2 [INFO] [stderr] Checking textwrap v0.11.0 [INFO] [stderr] Checking futures-cpupool v0.1.8 [INFO] [stderr] Checking rusty-fork v0.2.2 [INFO] [stderr] Checking humantime v1.3.0 [INFO] [stderr] Checking rand v0.4.6 [INFO] [stderr] Checking rand_isaac v0.1.1 [INFO] [stderr] Checking rand_xorshift v0.1.1 [INFO] [stderr] Checking rand_os v0.1.3 [INFO] [stderr] Checking tokio-codec v0.1.2 [INFO] [stderr] Checking rand_hc v0.1.0 [INFO] [stderr] Checking semver-parser v0.7.0 [INFO] [stderr] Checking regex-syntax v0.4.2 [INFO] [stderr] Checking clap v2.34.0 [INFO] [stderr] Checking chrono v0.4.44 [INFO] [stderr] Checking time v0.1.45 [INFO] [stderr] Checking base64 v0.10.1 [INFO] [stderr] Checking tokio-executor v0.1.10 [INFO] [stderr] Checking crossbeam-queue v0.2.3 [INFO] [stderr] Checking mio-uds v0.6.8 [INFO] [stderr] Checking semver v0.9.0 [INFO] [stderr] Checking tokio-reactor v0.1.12 [INFO] [stderr] Checking tokio-current-thread v0.1.7 [INFO] [stderr] Checking tokio-timer v0.2.13 [INFO] [stderr] Checking crossbeam-deque v0.7.4 [INFO] [stderr] Checking tokio-threadpool v0.1.18 [INFO] [stderr] Checking tokio-tcp v0.1.4 [INFO] [stderr] Checking tokio-udp v0.1.6 [INFO] [stderr] Checking tokio-uds v0.2.7 [INFO] [stderr] Checking tokio-fs v0.1.7 [INFO] [stderr] Checking tokio v0.1.22 [INFO] [stderr] Checking proptest v0.7.2 [INFO] [stderr] Checking tokio-core v0.1.18 [INFO] [stderr] Checking tokio-dns-unofficial v0.4.0 [INFO] [stderr] Checking addr2line v0.25.1 [INFO] [stderr] Checking regex-automata v0.4.14 [INFO] [stderr] Checking regex v1.12.3 [INFO] [stderr] Checking env_logger v0.6.2 [INFO] [stderr] Checking backtrace v0.3.76 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Checking color-backtrace v0.1.3 [INFO] [stderr] Checking serde v1.0.228 [INFO] [stderr] Checking bincode v0.9.2 [INFO] [stderr] Checking netwayste v0.2.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/net.rs:33:21 [INFO] [stdout] | [INFO] [stdout] 33 | pub const VERSION: &'static str = env!("CARGO_PKG_VERSION"); [INFO] [stdout] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetimes [INFO] [stdout] = note: `#[warn(clippy::redundant_static_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/net.rs:984:40 [INFO] [stdout] | [INFO] [stdout] 984 | RequestAction::Connect{name: name, client_version: version} [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/client.rs:84:13 [INFO] [stdout] | [INFO] [stdout] 84 | channel_to_conwayste: channel_to_conwayste, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `channel_to_conwayste` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/client.rs:387:17 [INFO] [stdout] | [INFO] [stdout] 387 | action: action, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `action` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/net.rs:33:21 [INFO] [stdout] | [INFO] [stdout] 33 | pub const VERSION: &'static str = env!("CARGO_PKG_VERSION"); [INFO] [stdout] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetimes [INFO] [stdout] = note: `#[warn(clippy::redundant_static_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/net.rs:984:40 [INFO] [stdout] | [INFO] [stdout] 984 | RequestAction::Connect{name: name, client_version: version} [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/client.rs:84:13 [INFO] [stdout] | [INFO] [stdout] 84 | channel_to_conwayste: channel_to_conwayste, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `channel_to_conwayste` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/client.rs:387:17 [INFO] [stdout] | [INFO] [stdout] 387 | action: action, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `action` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/client.rs:291:60 [INFO] [stdout] | [INFO] [stdout] 291 | pub fn handle_response_ok(&mut self) -> Result<(), Box> { [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: `#[warn(bare_trait_objects)]` (part of `#[warn(rust_2021_compatibility)]`) on by default [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 291 | pub fn handle_response_ok(&mut self) -> Result<(), Box> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/client.rs:291:60 [INFO] [stdout] | [INFO] [stdout] 291 | pub fn handle_response_ok(&mut self) -> Result<(), Box> { [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: `#[warn(bare_trait_objects)]` (part of `#[warn(rust_2021_compatibility)]`) on by default [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 291 | pub fn handle_response_ok(&mut self) -> Result<(), Box> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: if let can be simplified with `.unwrap_or_default()` [INFO] [stdout] --> src/net.rs:169:9 [INFO] [stdout] | [INFO] [stdout] 169 | / if let Some(v) = self.chat_seq { [INFO] [stdout] 170 | | v [INFO] [stdout] 171 | | } else { 0 } [INFO] [stdout] | |____________________^ help: replace it with: `self.chat_seq.unwrap_or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::manual_unwrap_or_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/net.rs:378:39 [INFO] [stdout] | [INFO] [stdout] 378 | let sock = UdpSocket::bind(&addr, &handle).expect("failed to bind socket"); [INFO] [stdout] | ^^^^^^^ help: change this to: `handle` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait `NetworkQueue` has a `len` method but no (possibly inherited) `is_empty` method [INFO] [stdout] --> src/net.rs:435:1 [INFO] [stdout] | [INFO] [stdout] 435 | / pub trait NetworkQueue { [INFO] [stdout] 436 | | fn new() -> Self; [INFO] [stdout] 437 | | [INFO] [stdout] 438 | | fn head_of_queue(&self) -> Option<&T> { [INFO] [stdout] ... | [INFO] [stdout] 514 | | fn as_queue_type_mut(&mut self) -> &mut ItemQueue; [INFO] [stdout] 515 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stdout] = note: `#[warn(clippy::len_without_is_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `opt_newest_packet` after checking its variant with `is_some` [INFO] [stdout] --> src/net.rs:450:37 [INFO] [stdout] | [INFO] [stdout] 449 | if opt_newest_packet.is_some() { [INFO] [stdout] | ------------------------------ help: try: `if let Some() = opt_newest_packet` [INFO] [stdout] 450 | let newest_packet: &T = opt_newest_packet.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `opt_oldest_packet` after checking its variant with `is_some` [INFO] [stdout] --> src/net.rs:459:37 [INFO] [stdout] | [INFO] [stdout] 458 | if opt_oldest_packet.is_some() { [INFO] [stdout] | ------------------------------ help: try: `if let Some() = opt_oldest_packet` [INFO] [stdout] 459 | let oldest_packet: &T = opt_oldest_packet.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/net.rs:482:36 [INFO] [stdout] | [INFO] [stdout] 482 | static HALFWAYPOINT: u64 = u64::max_value()/2; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] = note: `#[warn(clippy::legacy_numeric_constants)]` on by default [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 482 - static HALFWAYPOINT: u64 = u64::max_value()/2; [INFO] [stdout] 482 + static HALFWAYPOINT: u64 = u64::MAX/2; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `NetAttempt` [INFO] [stdout] --> src/net.rs:524:5 [INFO] [stdout] | [INFO] [stdout] 524 | / pub fn new() -> Self { [INFO] [stdout] 525 | | Self { [INFO] [stdout] 526 | | time: Instant::now(), [INFO] [stdout] 527 | | retries: 0, [INFO] [stdout] 528 | | } [INFO] [stdout] 529 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 522 + impl Default for NetAttempt { [INFO] [stdout] 523 + fn default() -> Self { [INFO] [stdout] 524 + Self::new() [INFO] [stdout] 525 + } [INFO] [stdout] 526 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/net.rs:613:17 [INFO] [stdout] | [INFO] [stdout] 613 | return None; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 613 - return None; [INFO] [stdout] 613 + None [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/net.rs:618:17 [INFO] [stdout] | [INFO] [stdout] 618 | return Some(pkt); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 618 - return Some(pkt); [INFO] [stdout] 618 + Some(pkt) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/net.rs:664:34 [INFO] [stdout] | [INFO] [stdout] 664 | if newest_seq_num == u64::max_value() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 664 - if newest_seq_num == u64::max_value() { [INFO] [stdout] 664 + if newest_seq_num == u64::MAX { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/net.rs:747:50 [INFO] [stdout] | [INFO] [stdout] 747 | let f_result = front_slice.binary_search(&item); [INFO] [stdout] | ^^^^^ help: change this to: `item` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/net.rs:748:49 [INFO] [stdout] | [INFO] [stdout] 748 | let b_result = back_slice.binary_search(&item); [INFO] [stdout] | ^^^^^ help: change this to: `item` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/net.rs:806:9 [INFO] [stdout] | [INFO] [stdout] 806 | return exists; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 806 - return exists; [INFO] [stdout] 806 + exists [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/net.rs:795:13 [INFO] [stdout] | [INFO] [stdout] 795 | / if insertion_index != MATCH_FOUND_SENTINEL { [INFO] [stdout] 796 | | if cfg!(test) { [INFO] [stdout] 797 | | self.as_queue_type_mut().insert(insertion_index, item.clone()); [INFO] [stdout] 798 | | self.attempts.push_back(NetAttempt::new()); [INFO] [stdout] 799 | | } [INFO] [stdout] 800 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 795 ~ if insertion_index != MATCH_FOUND_SENTINEL [INFO] [stdout] 796 ~ && cfg!(test) { [INFO] [stdout] 797 | self.as_queue_type_mut().insert(insertion_index, item.clone()); [INFO] [stdout] 798 | self.attempts.push_back(NetAttempt::new()); [INFO] [stdout] 799 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `NetworkManager` [INFO] [stdout] --> src/net.rs:837:5 [INFO] [stdout] | [INFO] [stdout] 837 | / pub fn new() -> Self { [INFO] [stdout] 838 | | NetworkManager { [INFO] [stdout] 839 | | statistics: NetworkStatistics::new(), [INFO] [stdout] 840 | | tx_packets: NetQueue::::new(), [INFO] [stdout] ... | [INFO] [stdout] 844 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 835 + impl Default for NetworkManager { [INFO] [stdout] 836 + fn default() -> Self { [INFO] [stdout] 837 + Self::new() [INFO] [stdout] 838 + } [INFO] [stdout] 839 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant name ends with the enum's name [INFO] [stdout] --> src/client.rs:47:5 [INFO] [stdout] | [INFO] [stdout] 47 | TickEvent, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] = note: `#[warn(clippy::enum_variant_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant name ends with the enum's name [INFO] [stdout] --> src/client.rs:49:5 [INFO] [stdout] | [INFO] [stdout] 49 | NetworkEvent, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant name ends with the enum's name [INFO] [stdout] --> src/client.rs:50:5 [INFO] [stdout] | [INFO] [stdout] 50 | ConwaysteEvent(NetwaysteEvent) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/client.rs:190:13 [INFO] [stdout] | [INFO] [stdout] 190 | / match self.channel_to_conwayste.send(nw_response) { [INFO] [stdout] 191 | | Err(e) => error!("Could not send a netwayste response via channel_to_conwayste: {:?}", e), [INFO] [stdout] 192 | | Ok(_) => () [INFO] [stdout] 193 | | } [INFO] [stdout] | |_____________^ help: try: `if let Err(e) = self.channel_to_conwayste.send(nw_response) { error!("Could not send a netwayste response via channel_to_conwayste: {:?}", e) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/client.rs:216:32 [INFO] [stdout] | [INFO] [stdout] 216 | if let Some(_) = self.network.tx_packets.remove(&packet) [INFO] [stdout] | -------^^^^^^^------------------------------------------ help: try: `if self.network.tx_packets.remove(&packet).is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `SocketAddr` which implements the `Copy` trait [INFO] [stdout] --> src/client.rs:237:42 [INFO] [stdout] | [INFO] [stdout] 237 | netwayste_send!(udp_tx, (self.server_address.unwrap().clone(), packet), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.server_address.unwrap()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `SocketAddr` which implements the `Copy` trait [INFO] [stdout] --> src/client.rs:258:64 [INFO] [stdout] | [INFO] [stdout] 258 | ...ets(udp_tx, self.server_address.unwrap().clone(), Some(self.response_sequence), &indices); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.server_address.unwrap()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `SocketAddr` which implements the `Copy` trait [INFO] [stdout] --> src/client.rs:283:42 [INFO] [stdout] | [INFO] [stdout] 283 | netwayste_send!(udp_tx, (self.server_address.unwrap().clone(), keep_alive), ("Could not send KeepAlive packets")); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.server_address.unwrap()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/client.rs:293:13 [INFO] [stdout] | [INFO] [stdout] 293 | return Ok(()); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 293 - return Ok(()); [INFO] [stdout] 293 + Ok(()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this pattern creates a reference to a reference [INFO] [stdout] --> src/client.rs:341:35 [INFO] [stdout] | [INFO] [stdout] 341 | chat_messages.retain(|ref chat_message| { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 341 - chat_messages.retain(|ref chat_message| { [INFO] [stdout] 341 + chat_messages.retain(|chat_message| { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/client.rs:372:16 [INFO] [stdout] | [INFO] [stdout] 372 | if self.cookie != None { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: use `Option::is_some()` instead: `self.cookie.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] = note: `#[warn(clippy::partialeq_to_none)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `SocketAddr` which implements the `Copy` trait [INFO] [stdout] --> src/client.rs:394:38 [INFO] [stdout] | [INFO] [stdout] 394 | netwayste_send!(udp_tx, (self.server_address.unwrap().clone(), packet), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.server_address.unwrap()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: if let can be simplified with `.unwrap_or_default()` [INFO] [stdout] --> src/net.rs:169:9 [INFO] [stdout] | [INFO] [stdout] 169 | / if let Some(v) = self.chat_seq { [INFO] [stdout] 170 | | v [INFO] [stdout] 171 | | } else { 0 } [INFO] [stdout] | |____________________^ help: replace it with: `self.chat_seq.unwrap_or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::manual_unwrap_or_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/client.rs:420:12 [INFO] [stdout] | [INFO] [stdout] 420 | if addr_vec.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `addr_vec.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/client.rs:472:22 [INFO] [stdout] | [INFO] [stdout] 472 | .filter(|&(_, ref opt_packet)| { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] = note: `#[warn(clippy::needless_borrowed_reference)]` on by default [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 472 - .filter(|&(_, ref opt_packet)| { [INFO] [stdout] 472 + .filter(|(_, opt_packet)| { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/client.rs:473:17 [INFO] [stdout] | [INFO] [stdout] 473 | *opt_packet != None [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: use `Option::is_some()` instead: `opt_packet.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/client.rs:524:25 [INFO] [stdout] | [INFO] [stdout] 524 | / match action { [INFO] [stdout] 525 | | RequestAction::Connect{ref name, ..} => { [INFO] [stdout] ... | [INFO] [stdout] 530 | | _ => {} [INFO] [stdout] 531 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 524 ~ if let RequestAction::Connect{ref name, ..} = action { [INFO] [stdout] 525 + // TODO: do not store the name on client_state since that's the wrong [INFO] [stdout] 526 + // place for it. [INFO] [stdout] 527 + client_state.name = Some(name.to_owned()); [INFO] [stdout] 528 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/net.rs:378:39 [INFO] [stdout] | [INFO] [stdout] 378 | let sock = UdpSocket::bind(&addr, &handle).expect("failed to bind socket"); [INFO] [stdout] | ^^^^^^^ help: change this to: `handle` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait `NetworkQueue` has a `len` method but no (possibly inherited) `is_empty` method [INFO] [stdout] --> src/net.rs:435:1 [INFO] [stdout] | [INFO] [stdout] 435 | / pub trait NetworkQueue { [INFO] [stdout] 436 | | fn new() -> Self; [INFO] [stdout] 437 | | [INFO] [stdout] 438 | | fn head_of_queue(&self) -> Option<&T> { [INFO] [stdout] ... | [INFO] [stdout] 514 | | fn as_queue_type_mut(&mut self) -> &mut ItemQueue; [INFO] [stdout] 515 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stdout] = note: `#[warn(clippy::len_without_is_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `opt_newest_packet` after checking its variant with `is_some` [INFO] [stdout] --> src/net.rs:450:37 [INFO] [stdout] | [INFO] [stdout] 449 | if opt_newest_packet.is_some() { [INFO] [stdout] | ------------------------------ help: try: `if let Some() = opt_newest_packet` [INFO] [stdout] 450 | let newest_packet: &T = opt_newest_packet.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `opt_oldest_packet` after checking its variant with `is_some` [INFO] [stdout] --> src/net.rs:459:37 [INFO] [stdout] | [INFO] [stdout] 458 | if opt_oldest_packet.is_some() { [INFO] [stdout] | ------------------------------ help: try: `if let Some() = opt_oldest_packet` [INFO] [stdout] 459 | let oldest_packet: &T = opt_oldest_packet.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/net.rs:482:36 [INFO] [stdout] | [INFO] [stdout] 482 | static HALFWAYPOINT: u64 = u64::max_value()/2; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] = note: `#[warn(clippy::legacy_numeric_constants)]` on by default [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 482 - static HALFWAYPOINT: u64 = u64::max_value()/2; [INFO] [stdout] 482 + static HALFWAYPOINT: u64 = u64::MAX/2; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `NetAttempt` [INFO] [stdout] --> src/net.rs:524:5 [INFO] [stdout] | [INFO] [stdout] 524 | / pub fn new() -> Self { [INFO] [stdout] 525 | | Self { [INFO] [stdout] 526 | | time: Instant::now(), [INFO] [stdout] 527 | | retries: 0, [INFO] [stdout] 528 | | } [INFO] [stdout] 529 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 522 + impl Default for NetAttempt { [INFO] [stdout] 523 + fn default() -> Self { [INFO] [stdout] 524 + Self::new() [INFO] [stdout] 525 + } [INFO] [stdout] 526 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/net.rs:613:17 [INFO] [stdout] | [INFO] [stdout] 613 | return None; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 613 - return None; [INFO] [stdout] 613 + None [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/net.rs:618:17 [INFO] [stdout] | [INFO] [stdout] 618 | return Some(pkt); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 618 - return Some(pkt); [INFO] [stdout] 618 + Some(pkt) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/net.rs:664:34 [INFO] [stdout] | [INFO] [stdout] 664 | if newest_seq_num == u64::max_value() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 664 - if newest_seq_num == u64::max_value() { [INFO] [stdout] 664 + if newest_seq_num == u64::MAX { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/net.rs:747:50 [INFO] [stdout] | [INFO] [stdout] 747 | let f_result = front_slice.binary_search(&item); [INFO] [stdout] | ^^^^^ help: change this to: `item` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/net.rs:748:49 [INFO] [stdout] | [INFO] [stdout] 748 | let b_result = back_slice.binary_search(&item); [INFO] [stdout] | ^^^^^ help: change this to: `item` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/net.rs:806:9 [INFO] [stdout] | [INFO] [stdout] 806 | return exists; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 806 - return exists; [INFO] [stdout] 806 + exists [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/net.rs:795:13 [INFO] [stdout] | [INFO] [stdout] 795 | / if insertion_index != MATCH_FOUND_SENTINEL { [INFO] [stdout] 796 | | if cfg!(test) { [INFO] [stdout] 797 | | self.as_queue_type_mut().insert(insertion_index, item.clone()); [INFO] [stdout] 798 | | self.attempts.push_back(NetAttempt::new()); [INFO] [stdout] 799 | | } [INFO] [stdout] 800 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 795 ~ if insertion_index != MATCH_FOUND_SENTINEL [INFO] [stdout] 796 ~ && cfg!(test) { [INFO] [stdout] 797 | self.as_queue_type_mut().insert(insertion_index, item.clone()); [INFO] [stdout] 798 | self.attempts.push_back(NetAttempt::new()); [INFO] [stdout] 799 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `NetworkManager` [INFO] [stdout] --> src/net.rs:837:5 [INFO] [stdout] | [INFO] [stdout] 837 | / pub fn new() -> Self { [INFO] [stdout] 838 | | NetworkManager { [INFO] [stdout] 839 | | statistics: NetworkStatistics::new(), [INFO] [stdout] 840 | | tx_packets: NetQueue::::new(), [INFO] [stdout] ... | [INFO] [stdout] 844 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 835 + impl Default for NetworkManager { [INFO] [stdout] 836 + fn default() -> Self { [INFO] [stdout] 837 + Self::new() [INFO] [stdout] 838 + } [INFO] [stdout] 839 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant name ends with the enum's name [INFO] [stdout] --> src/client.rs:47:5 [INFO] [stdout] | [INFO] [stdout] 47 | TickEvent, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] = note: `#[warn(clippy::enum_variant_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant name ends with the enum's name [INFO] [stdout] --> src/client.rs:49:5 [INFO] [stdout] | [INFO] [stdout] 49 | NetworkEvent, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant name ends with the enum's name [INFO] [stdout] --> src/client.rs:50:5 [INFO] [stdout] | [INFO] [stdout] 50 | ConwaysteEvent(NetwaysteEvent) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/client.rs:190:13 [INFO] [stdout] | [INFO] [stdout] 190 | / match self.channel_to_conwayste.send(nw_response) { [INFO] [stdout] 191 | | Err(e) => error!("Could not send a netwayste response via channel_to_conwayste: {:?}", e), [INFO] [stdout] 192 | | Ok(_) => () [INFO] [stdout] 193 | | } [INFO] [stdout] | |_____________^ help: try: `if let Err(e) = self.channel_to_conwayste.send(nw_response) { error!("Could not send a netwayste response via channel_to_conwayste: {:?}", e) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/client.rs:216:32 [INFO] [stdout] | [INFO] [stdout] 216 | if let Some(_) = self.network.tx_packets.remove(&packet) [INFO] [stdout] | -------^^^^^^^------------------------------------------ help: try: `if self.network.tx_packets.remove(&packet).is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `SocketAddr` which implements the `Copy` trait [INFO] [stdout] --> src/client.rs:237:42 [INFO] [stdout] | [INFO] [stdout] 237 | netwayste_send!(udp_tx, (self.server_address.unwrap().clone(), packet), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.server_address.unwrap()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `SocketAddr` which implements the `Copy` trait [INFO] [stdout] --> src/client.rs:258:64 [INFO] [stdout] | [INFO] [stdout] 258 | ...ets(udp_tx, self.server_address.unwrap().clone(), Some(self.response_sequence), &indices); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.server_address.unwrap()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `SocketAddr` which implements the `Copy` trait [INFO] [stdout] --> src/client.rs:283:42 [INFO] [stdout] | [INFO] [stdout] 283 | netwayste_send!(udp_tx, (self.server_address.unwrap().clone(), keep_alive), ("Could not send KeepAlive packets")); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.server_address.unwrap()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/client.rs:293:13 [INFO] [stdout] | [INFO] [stdout] 293 | return Ok(()); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 293 - return Ok(()); [INFO] [stdout] 293 + Ok(()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this pattern creates a reference to a reference [INFO] [stdout] --> src/client.rs:341:35 [INFO] [stdout] | [INFO] [stdout] 341 | chat_messages.retain(|ref chat_message| { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 341 - chat_messages.retain(|ref chat_message| { [INFO] [stdout] 341 + chat_messages.retain(|chat_message| { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/client.rs:372:16 [INFO] [stdout] | [INFO] [stdout] 372 | if self.cookie != None { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: use `Option::is_some()` instead: `self.cookie.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] = note: `#[warn(clippy::partialeq_to_none)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `SocketAddr` which implements the `Copy` trait [INFO] [stdout] --> src/client.rs:394:38 [INFO] [stdout] | [INFO] [stdout] 394 | netwayste_send!(udp_tx, (self.server_address.unwrap().clone(), packet), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.server_address.unwrap()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/client.rs:420:12 [INFO] [stdout] | [INFO] [stdout] 420 | if addr_vec.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `addr_vec.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/client.rs:472:22 [INFO] [stdout] | [INFO] [stdout] 472 | .filter(|&(_, ref opt_packet)| { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] = note: `#[warn(clippy::needless_borrowed_reference)]` on by default [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 472 - .filter(|&(_, ref opt_packet)| { [INFO] [stdout] 472 + .filter(|(_, opt_packet)| { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/client.rs:473:17 [INFO] [stdout] | [INFO] [stdout] 473 | *opt_packet != None [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: use `Option::is_some()` instead: `opt_packet.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Packet`, `RequestAction`, and `ResponseCode` [INFO] [stdout] --> examples/cli-client.rs:40:27 [INFO] [stdout] | [INFO] [stdout] 40 | net::{NetwaysteEvent, RequestAction, Packet, ResponseCode}, [INFO] [stdout] | ^^^^^^^^^^^^^ ^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/client.rs:524:25 [INFO] [stdout] | [INFO] [stdout] 524 | / match action { [INFO] [stdout] 525 | | RequestAction::Connect{ref name, ..} => { [INFO] [stdout] ... | [INFO] [stdout] 530 | | _ => {} [INFO] [stdout] 531 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 524 ~ if let RequestAction::Connect{ref name, ..} = action { [INFO] [stdout] 525 + // TODO: do not store the name on client_state since that's the wrong [INFO] [stdout] 526 + // place for it. [INFO] [stdout] 527 + client_state.name = Some(name.to_owned()); [INFO] [stdout] 528 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/tests.rs:466:23 [INFO] [stdout] | [INFO] [stdout] 466 | let u64_max = ::max_value(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 466 - let u64_max = ::max_value(); [INFO] [stdout] 466 + let u64_max = u64::MAX; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> src/tests.rs:471:27 [INFO] [stdout] | [INFO] [stdout] 471 | sequence: index as u64, [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `index` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/tests.rs:511:23 [INFO] [stdout] | [INFO] [stdout] 511 | let u64_max = ::max_value(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 511 - let u64_max = ::max_value(); [INFO] [stdout] 511 + let u64_max = u64::MAX; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> src/tests.rs:516:27 [INFO] [stdout] | [INFO] [stdout] 516 | sequence: index as u64, [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `index` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/tests.rs:556:23 [INFO] [stdout] | [INFO] [stdout] 556 | let u64_max = ::max_value(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 556 - let u64_max = ::max_value(); [INFO] [stdout] 556 + let u64_max = u64::MAX; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> src/tests.rs:580:27 [INFO] [stdout] | [INFO] [stdout] 580 | sequence: *index as u64, [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `*index` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/tests.rs:603:23 [INFO] [stdout] | [INFO] [stdout] 603 | let u64_max = ::max_value(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 603 - let u64_max = ::max_value(); [INFO] [stdout] 603 + let u64_max = u64::MAX; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> src/tests.rs:613:27 [INFO] [stdout] | [INFO] [stdout] 613 | sequence: *index as u64, [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `*index` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/tests.rs:633:23 [INFO] [stdout] | [INFO] [stdout] 633 | let u64_max = ::max_value(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 633 - let u64_max = ::max_value(); [INFO] [stdout] 633 + let u64_max = u64::MAX; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> src/tests.rs:646:27 [INFO] [stdout] | [INFO] [stdout] 646 | sequence: *index as u64, [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `*index` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/tests.rs:667:23 [INFO] [stdout] | [INFO] [stdout] 667 | let u64_max = ::max_value(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 667 - let u64_max = ::max_value(); [INFO] [stdout] 667 + let u64_max = u64::MAX; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> src/tests.rs:681:27 [INFO] [stdout] | [INFO] [stdout] 681 | sequence: *index as u64, [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `*index` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/tests.rs:702:23 [INFO] [stdout] | [INFO] [stdout] 702 | let u64_max = ::max_value(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 702 - let u64_max = ::max_value(); [INFO] [stdout] 702 + let u64_max = u64::MAX; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> src/tests.rs:716:27 [INFO] [stdout] | [INFO] [stdout] 716 | sequence: *index as u64, [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `*index` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/tests.rs:737:23 [INFO] [stdout] | [INFO] [stdout] 737 | let u64_max = ::max_value(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 737 - let u64_max = ::max_value(); [INFO] [stdout] 737 + let u64_max = u64::MAX; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> src/tests.rs:752:27 [INFO] [stdout] | [INFO] [stdout] 752 | sequence: *index as u64, [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `*index` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/tests.rs:773:23 [INFO] [stdout] | [INFO] [stdout] 773 | let u64_max = ::max_value(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 773 - let u64_max = ::max_value(); [INFO] [stdout] 773 + let u64_max = u64::MAX; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> src/tests.rs:788:27 [INFO] [stdout] | [INFO] [stdout] 788 | sequence: *index as u64, [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `*index` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/tests.rs:811:23 [INFO] [stdout] | [INFO] [stdout] 811 | let u64_max = ::max_value(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 811 - let u64_max = ::max_value(); [INFO] [stdout] 811 + let u64_max = u64::MAX; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> src/tests.rs:826:27 [INFO] [stdout] | [INFO] [stdout] 826 | sequence: *index as u64, [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `*index` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the variable `seq_num` is used as a loop counter [INFO] [stdout] --> src/tests.rs:2505:9 [INFO] [stdout] | [INFO] [stdout] 2505 | for msg in chat_queue { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using: `for (seq_num, msg) in (starting_chat_seq_num + 1..).zip(chat_queue.iter())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stdout] = note: `#[warn(clippy::explicit_counter_loop)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/net.rs:33:21 [INFO] [stdout] | [INFO] [stdout] 33 | pub const VERSION: &'static str = env!("CARGO_PKG_VERSION"); [INFO] [stdout] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetimes [INFO] [stdout] = note: `#[warn(clippy::redundant_static_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> examples/cli-client.rs:59:26 [INFO] [stdout] | [INFO] [stdout] 59 | let command = if words.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!words.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> examples/cli-client.rs:87:34 [INFO] [stdout] | [INFO] [stdout] 87 | if !string.is_empty() && string != "" { [INFO] [stdout] | ^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!string.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] = note: `#[warn(clippy::comparison_to_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> examples/cli-client.rs:127:16 [INFO] [stdout] | [INFO] [stdout] 127 | if args.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `args.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> examples/cli-client.rs:134:16 [INFO] [stdout] | [INFO] [stdout] 134 | if args.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `args.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> examples/cli-client.rs:155:16 [INFO] [stdout] | [INFO] [stdout] 155 | if args.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `args.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/net.rs:984:40 [INFO] [stdout] | [INFO] [stdout] 984 | RequestAction::Connect{name: name, client_version: version} [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/server.rs:225:13 [INFO] [stdout] | [INFO] [stdout] 225 | seq_num: seq_num, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace it with: `seq_num` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/server.rs:237:13 [INFO] [stdout] | [INFO] [stdout] 237 | name: name, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/server.rs:238:13 [INFO] [stdout] | [INFO] [stdout] 238 | player_ids: player_ids, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `player_ids` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `>= y + 1` or `x - 1 >=` [INFO] [stdout] --> src/server.rs:785:45 [INFO] [stdout] | [INFO] [stdout] 785 | if response_ack > 0 && (resp_pkt.sequence_number() <= response_ack-1) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change it to: `resp_pkt.sequence_number() < response_ack` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#int_plus_one [INFO] [stdout] = note: `#[warn(clippy::int_plus_one)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/server.rs:946:13 [INFO] [stdout] | [INFO] [stdout] 946 | sequence: sequence, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `sequence` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/server.rs:947:13 [INFO] [stdout] | [INFO] [stdout] 947 | request_ack: request_ack, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `request_ack` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/server.rs:1085:13 [INFO] [stdout] | [INFO] [stdout] 1085 | addr: addr, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: replace it with: `addr` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/server.rs:1086:13 [INFO] [stdout] | [INFO] [stdout] 1086 | name: name, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: replace it with: `name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/net.rs:33:21 [INFO] [stdout] | [INFO] [stdout] 33 | pub const VERSION: &'static str = env!("CARGO_PKG_VERSION"); [INFO] [stdout] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetimes [INFO] [stdout] = note: `#[warn(clippy::redundant_static_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/net.rs:984:40 [INFO] [stdout] | [INFO] [stdout] 984 | RequestAction::Connect{name: name, client_version: version} [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/server.rs:225:13 [INFO] [stdout] | [INFO] [stdout] 225 | seq_num: seq_num, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace it with: `seq_num` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/server.rs:237:13 [INFO] [stdout] | [INFO] [stdout] 237 | name: name, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/server.rs:238:13 [INFO] [stdout] | [INFO] [stdout] 238 | player_ids: player_ids, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `player_ids` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `>= y + 1` or `x - 1 >=` [INFO] [stdout] --> src/server.rs:785:45 [INFO] [stdout] | [INFO] [stdout] 785 | if response_ack > 0 && (resp_pkt.sequence_number() <= response_ack-1) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change it to: `resp_pkt.sequence_number() < response_ack` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#int_plus_one [INFO] [stdout] = note: `#[warn(clippy::int_plus_one)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/server.rs:946:13 [INFO] [stdout] | [INFO] [stdout] 946 | sequence: sequence, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `sequence` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/server.rs:947:13 [INFO] [stdout] | [INFO] [stdout] 947 | request_ack: request_ack, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `request_ack` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/server.rs:1085:13 [INFO] [stdout] | [INFO] [stdout] 1085 | addr: addr, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: replace it with: `addr` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/server.rs:1086:13 [INFO] [stdout] | [INFO] [stdout] 1086 | name: name, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: replace it with: `name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the `resp_code @ _` pattern can be written as just `resp_code` [INFO] [stdout] --> src/server.rs:1355:13 [INFO] [stdout] | [INFO] [stdout] 1355 | resp_code @ _ => panic!("Unexpected response code: {:?}", resp_code) [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `resp_code` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `#[should_panic]` attribute cannot be used on macro calls [INFO] [stdout] --> src/server.rs:1471:13 [INFO] [stdout] | [INFO] [stdout] 1471 | #[should_panic] [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stdout] = help: `#[should_panic]` can only be applied to functions [INFO] [stdout] = note: `#[warn(unused_attributes)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/server.rs:2226:17 [INFO] [stdout] | [INFO] [stdout] 2226 | cookie: cookie, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: replace it with: `cookie` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/server.rs:2248:17 [INFO] [stdout] | [INFO] [stdout] 2248 | cookie: cookie, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: replace it with: `cookie` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unexpected `cfg` condition name: `should_panic` [INFO] [stdout] --> src/server.rs:2552:19 [INFO] [stdout] | [INFO] [stdout] 2552 | #[cfg(not(should_panic))] [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: expected names are: `docsrs`, `feature`, and `test` and 31 more [INFO] [stdout] = help: consider using a Cargo feature instead [INFO] [stdout] = help: or consider adding in `Cargo.toml` the `check-cfg` lint config for the lint: [INFO] [stdout] [lints.rust] [INFO] [stdout] unexpected_cfgs = { level = "warn", check-cfg = ['cfg(should_panic)'] } [INFO] [stdout] = help: or consider adding `println!("cargo::rustc-check-cfg=cfg(should_panic)");` to the top of the `build.rs` [INFO] [stdout] = note: see for more information about checking conditional configuration [INFO] [stdout] = note: `#[warn(unexpected_cfgs)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/server.rs:619:127 [INFO] [stdout] | [INFO] [stdout] 619 | ...ayerID, action: RequestAction) -> Result, Box> { [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: `#[warn(bare_trait_objects)]` (part of `#[warn(rust_2021_compatibility)]`) on by default [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 619 | pub fn process_player_request_action(&mut self, player_id: PlayerID, action: RequestAction) -> Result, Box> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/server.rs:811:101 [INFO] [stdout] | [INFO] [stdout] 811 | pub fn decode_packet(&mut self, addr: SocketAddr, packet: Packet) -> Result, Box> { [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 811 | pub fn decode_packet(&mut self, addr: SocketAddr, packet: Packet) -> Result, Box> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/server.rs:976:97 [INFO] [stdout] | [INFO] [stdout] 976 | pub fn construct_client_updates(&mut self) -> Result>, Box> { [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 976 | pub fn construct_client_updates(&mut self) -> Result>, Box> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/server.rs:619:127 [INFO] [stdout] | [INFO] [stdout] 619 | ...ayerID, action: RequestAction) -> Result, Box> { [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: `#[warn(bare_trait_objects)]` (part of `#[warn(rust_2021_compatibility)]`) on by default [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 619 | pub fn process_player_request_action(&mut self, player_id: PlayerID, action: RequestAction) -> Result, Box> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/server.rs:811:101 [INFO] [stdout] | [INFO] [stdout] 811 | pub fn decode_packet(&mut self, addr: SocketAddr, packet: Packet) -> Result, Box> { [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 811 | pub fn decode_packet(&mut self, addr: SocketAddr, packet: Packet) -> Result, Box> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/server.rs:976:97 [INFO] [stdout] | [INFO] [stdout] 976 | pub fn construct_client_updates(&mut self) -> Result>, Box> { [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 976 | pub fn construct_client_updates(&mut self) -> Result>, Box> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MATCH_FOUND_SENTINEL` is never used [INFO] [stdout] --> src/net.rs:47:7 [INFO] [stdout] | [INFO] [stdout] 47 | const MATCH_FOUND_SENTINEL: usize = 110; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/net.rs:71:20 [INFO] [stdout] | [INFO] [stdout] 71 | AddrParseError(net::AddrParseError), [INFO] [stdout] | -------------- ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `NetError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 71 - AddrParseError(net::AddrParseError), [INFO] [stdout] 71 + AddrParseError(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/net.rs:72:13 [INFO] [stdout] | [INFO] [stdout] 72 | IoError(io::Error), [INFO] [stdout] | ------- ^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `NetError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 72 - IoError(io::Error), [INFO] [stdout] 72 + IoError(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple methods are never used [INFO] [stdout] --> src/net.rs:438:8 [INFO] [stdout] | [INFO] [stdout] 435 | pub trait NetworkQueue { [INFO] [stdout] | ------------ methods in this trait [INFO] [stdout] ... [INFO] [stdout] 438 | fn head_of_queue(&self) -> Option<&T> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 442 | fn tail_of_queue(&self) -> Option<&T> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 446 | fn newest_seq_num(&self) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 455 | fn oldest_seq_num(&self) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 464 | fn push_back(&mut self, item: T) { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 468 | fn push_front(&mut self, item: T) { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 476 | fn insert(&mut self, index: usize, item: T) { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 481 | fn is_seq_sufficiently_far_away(&self, a: u64, b: u64) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 492 | fn will_seq_cause_a_wrap(&self, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 509 | fn remove(&mut self, pkt: &T) -> Option; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 510 | [INFO] [stdout] 511 | fn discard_older_items(&mut self); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 512 | fn buffer_item(&mut self, item: T) -> bool; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `find_rx_insertion_index`, `find_rx_insertion_index_in_subset`, and `insert_into_rx_queue` are never used [INFO] [stdout] --> src/net.rs:745:8 [INFO] [stdout] | [INFO] [stdout] 739 | impl NetQueue where T: Sequenced+Debug+Clone { [INFO] [stdout] | -------------------------------------------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 745 | fn find_rx_insertion_index(&self, item: &T) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 779 | fn find_rx_insertion_index_in_subset(&self, start: usize, end: usize, item: &T) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 792 | fn insert_into_rx_queue(&mut self, index: Option, item: T) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: if let can be simplified with `.unwrap_or_default()` [INFO] [stdout] --> src/net.rs:169:9 [INFO] [stdout] | [INFO] [stdout] 169 | / if let Some(v) = self.chat_seq { [INFO] [stdout] 170 | | v [INFO] [stdout] 171 | | } else { 0 } [INFO] [stdout] | |____________________^ help: replace it with: `self.chat_seq.unwrap_or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::manual_unwrap_or_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/net.rs:378:39 [INFO] [stdout] | [INFO] [stdout] 378 | let sock = UdpSocket::bind(&addr, &handle).expect("failed to bind socket"); [INFO] [stdout] | ^^^^^^^ help: change this to: `handle` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `opt_newest_packet` after checking its variant with `is_some` [INFO] [stdout] --> src/net.rs:450:37 [INFO] [stdout] | [INFO] [stdout] 449 | if opt_newest_packet.is_some() { [INFO] [stdout] | ------------------------------ help: try: `if let Some() = opt_newest_packet` [INFO] [stdout] 450 | let newest_packet: &T = opt_newest_packet.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `opt_oldest_packet` after checking its variant with `is_some` [INFO] [stdout] --> src/net.rs:459:37 [INFO] [stdout] | [INFO] [stdout] 458 | if opt_oldest_packet.is_some() { [INFO] [stdout] | ------------------------------ help: try: `if let Some() = opt_oldest_packet` [INFO] [stdout] 459 | let oldest_packet: &T = opt_oldest_packet.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/net.rs:482:36 [INFO] [stdout] | [INFO] [stdout] 482 | static HALFWAYPOINT: u64 = u64::max_value()/2; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] = note: `#[warn(clippy::legacy_numeric_constants)]` on by default [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 482 - static HALFWAYPOINT: u64 = u64::max_value()/2; [INFO] [stdout] 482 + static HALFWAYPOINT: u64 = u64::MAX/2; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/net.rs:613:17 [INFO] [stdout] | [INFO] [stdout] 613 | return None; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 613 - return None; [INFO] [stdout] 613 + None [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/net.rs:618:17 [INFO] [stdout] | [INFO] [stdout] 618 | return Some(pkt); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 618 - return Some(pkt); [INFO] [stdout] 618 + Some(pkt) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/net.rs:664:34 [INFO] [stdout] | [INFO] [stdout] 664 | if newest_seq_num == u64::max_value() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 664 - if newest_seq_num == u64::max_value() { [INFO] [stdout] 664 + if newest_seq_num == u64::MAX { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/net.rs:747:50 [INFO] [stdout] | [INFO] [stdout] 747 | let f_result = front_slice.binary_search(&item); [INFO] [stdout] | ^^^^^ help: change this to: `item` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/net.rs:748:49 [INFO] [stdout] | [INFO] [stdout] 748 | let b_result = back_slice.binary_search(&item); [INFO] [stdout] | ^^^^^ help: change this to: `item` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/net.rs:806:9 [INFO] [stdout] | [INFO] [stdout] 806 | return exists; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 806 - return exists; [INFO] [stdout] 806 + exists [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/net.rs:795:13 [INFO] [stdout] | [INFO] [stdout] 795 | / if insertion_index != MATCH_FOUND_SENTINEL { [INFO] [stdout] 796 | | if cfg!(test) { [INFO] [stdout] 797 | | self.as_queue_type_mut().insert(insertion_index, item.clone()); [INFO] [stdout] 798 | | self.attempts.push_back(NetAttempt::new()); [INFO] [stdout] 799 | | } [INFO] [stdout] 800 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 795 ~ if insertion_index != MATCH_FOUND_SENTINEL [INFO] [stdout] 796 ~ && cfg!(test) { [INFO] [stdout] 797 | self.as_queue_type_mut().insert(insertion_index, item.clone()); [INFO] [stdout] 798 | self.attempts.push_back(NetAttempt::new()); [INFO] [stdout] 799 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/server.rs:59:55 [INFO] [stdout] | [INFO] [stdout] 59 | pub const SERVER_ID: PlayerID = PlayerID(u64::max_value()); // 0xFFFF....FFFF [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 59 - pub const SERVER_ID: PlayerID = PlayerID(u64::max_value()); // 0xFFFF....FFFF [INFO] [stdout] 59 + pub const SERVER_ID: PlayerID = PlayerID(u64::MAX); // 0xFFFF....FFFF [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:133:9 [INFO] [stdout] | [INFO] [stdout] 133 | return None; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 133 - return None; [INFO] [stdout] 133 + None [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this block may be rewritten with the `?` operator [INFO] [stdout] --> src/server.rs:126:9 [INFO] [stdout] | [INFO] [stdout] 126 | / if self.game_info.is_none() { [INFO] [stdout] 127 | | return None; [INFO] [stdout] 128 | | } [INFO] [stdout] | |_________^ help: replace it with: `self.game_info.as_ref()?;` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stdout] = note: `#[warn(clippy::question_mark)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:146:9 [INFO] [stdout] | [INFO] [stdout] 146 | return false; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 146 - return false; [INFO] [stdout] 146 + false [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded late initialization [INFO] [stdout] --> src/server.rs:200:5 [INFO] [stdout] | [INFO] [stdout] 200 | let hash: u64; [INFO] [stdout] | ^^^^^^^^^^^^^^ created here [INFO] [stdout] ... [INFO] [stdout] 208 | hash = (timestamp << 32) | rand_salt; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ initialised here [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_late_init [INFO] [stdout] = note: `#[warn(clippy::needless_late_init)]` on by default [INFO] [stdout] help: move the declaration `hash` here [INFO] [stdout] | [INFO] [stdout] 200 ~ [INFO] [stdout] 201 | [INFO] [stdout] ... [INFO] [stdout] 207 | [INFO] [stdout] 208 ~ let hash: u64 = (timestamp << 32) | rand_salt; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `u64` [INFO] [stdout] --> src/server.rs:202:30 [INFO] [stdout] | [INFO] [stdout] 202 | let mut timestamp: u64 = time::Instant::now().elapsed().as_secs().into(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `time::Instant::now().elapsed().as_secs()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/server.rs:203:5 [INFO] [stdout] | [INFO] [stdout] 203 | timestamp = timestamp & 0xFFFFFFFF; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `timestamp &= 0xFFFFFFFF` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] = note: `#[warn(clippy::assign_op_pattern)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/server.rs:206:5 [INFO] [stdout] | [INFO] [stdout] 206 | rand_salt = rand_salt & 0xFFFFFFFF; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `rand_salt &= 0xFFFFFFFF` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:274:9 [INFO] [stdout] | [INFO] [stdout] 274 | return self.messages.front(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 274 - return self.messages.front(); [INFO] [stdout] 274 + self.messages.front() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:279:9 [INFO] [stdout] | [INFO] [stdout] 279 | return self.messages.back(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 279 - return self.messages.back(); [INFO] [stdout] 279 + self.messages.back() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:309:9 [INFO] [stdout] | [INFO] [stdout] 309 | return amount_to_consume; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 309 - return amount_to_consume; [INFO] [stdout] 309 + amount_to_consume [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/server.rs:304:18 [INFO] [stdout] | [INFO] [stdout] 304 | (::max_value() - oldest_msg.seq_num) + chat_msg_seq_num + 1 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 304 - (::max_value() - oldest_msg.seq_num) + chat_msg_seq_num + 1 [INFO] [stdout] 304 + (u64::MAX - oldest_msg.seq_num) + chat_msg_seq_num + 1 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `ServerState` [INFO] [stdout] --> src/server.rs:1121:5 [INFO] [stdout] | [INFO] [stdout] 1121 | / pub fn new() -> Self { [INFO] [stdout] 1122 | | ServerState { [INFO] [stdout] 1123 | | tick: 0, [INFO] [stdout] 1124 | | players: HashMap::::new(), [INFO] [stdout] ... | [INFO] [stdout] 1130 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 320 + impl Default for ServerState { [INFO] [stdout] 321 + fn default() -> Self { [INFO] [stdout] 322 + Self::new() [INFO] [stdout] 323 + } [INFO] [stdout] 324 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/server.rs:344:12 [INFO] [stdout] | [INFO] [stdout] 344 | if player.game_info == None { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `player.game_info.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] = note: `#[warn(clippy::partialeq_to_none)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this block may be rewritten with the `?` operator [INFO] [stdout] --> src/server.rs:354:9 [INFO] [stdout] | [INFO] [stdout] 354 | / if opt_room_id.is_none() { [INFO] [stdout] 355 | | return None; [INFO] [stdout] 356 | | } [INFO] [stdout] | |_________^ help: replace it with: `opt_room_id?;` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this block may be rewritten with the `?` operator [INFO] [stdout] --> src/server.rs:363:9 [INFO] [stdout] | [INFO] [stdout] 363 | / if opt_room_id.is_none() { [INFO] [stdout] 364 | | return None; [INFO] [stdout] 365 | | } [INFO] [stdout] | |_________^ help: replace it with: `opt_room_id?;` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:383:9 [INFO] [stdout] | [INFO] [stdout] 383 | return ResponseCode::PlayerList(players); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 383 - return ResponseCode::PlayerList(players); [INFO] [stdout] 383 + ResponseCode::PlayerList(players) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:412:9 [INFO] [stdout] | [INFO] [stdout] 412 | return ResponseCode::OK; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 412 - return ResponseCode::OK; [INFO] [stdout] 412 + ResponseCode::OK [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/server.rs:444:12 [INFO] [stdout] | [INFO] [stdout] 444 | if !self.room_map.get(&room_name).is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.room_map.get(&room_name).is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:447:13 [INFO] [stdout] | [INFO] [stdout] 447 | return ResponseCode::OK; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 447 - return ResponseCode::OK; [INFO] [stdout] 447 + ResponseCode::OK [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:449:13 [INFO] [stdout] | [INFO] [stdout] 449 | return ResponseCode::BadRequest(Some(format!("room name already in use"))); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 449 - return ResponseCode::BadRequest(Some(format!("room name already in use"))); [INFO] [stdout] 449 + ResponseCode::BadRequest(Some(format!("room name already in use"))) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary use of `get(&room_name).is_some()` [INFO] [stdout] --> src/server.rs:444:27 [INFO] [stdout] | [INFO] [stdout] 444 | if !self.room_map.get(&room_name).is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `contains_key(&room_name)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_get_then_check [INFO] [stdout] = note: `#[warn(clippy::unnecessary_get_then_check)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/server.rs:449:50 [INFO] [stdout] | [INFO] [stdout] 449 | return ResponseCode::BadRequest(Some(format!("room name already in use"))); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"room name already in use".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:472:9 [INFO] [stdout] | [INFO] [stdout] 472 | return ResponseCode::BadRequest(Some(format!("no room named {:?}", room_name))); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 472 - return ResponseCode::BadRequest(Some(format!("no room named {:?}", room_name))); [INFO] [stdout] 472 + ResponseCode::BadRequest(Some(format!("no room named {:?}", room_name))) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `RoomID` which implements the `Copy` trait [INFO] [stdout] --> src/server.rs:466:30 [INFO] [stdout] | [INFO] [stdout] 466 | room_id: gs.room_id.clone(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `gs.room_id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:494:9 [INFO] [stdout] | [INFO] [stdout] 494 | return ResponseCode::LeaveRoom; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 494 - return ResponseCode::LeaveRoom; [INFO] [stdout] 494 + ResponseCode::LeaveRoom [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:527:17 [INFO] [stdout] | [INFO] [stdout] 527 | return self.handle_disconnect(player_id); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 527 - return self.handle_disconnect(player_id); [INFO] [stdout] 527 + self.handle_disconnect(player_id) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:532:17 [INFO] [stdout] | [INFO] [stdout] 532 | return ResponseCode::OK; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 532 - return ResponseCode::OK; [INFO] [stdout] 532 + ResponseCode::OK [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:535:17 [INFO] [stdout] | [INFO] [stdout] 535 | return self.list_players(player_id); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 535 - return self.list_players(player_id); [INFO] [stdout] 535 + self.list_players(player_id) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:538:17 [INFO] [stdout] | [INFO] [stdout] 538 | return self.handle_chat_message(player_id, msg); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 538 - return self.handle_chat_message(player_id, msg); [INFO] [stdout] 538 + self.handle_chat_message(player_id, msg) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:541:17 [INFO] [stdout] | [INFO] [stdout] 541 | return self.list_rooms(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 541 - return self.list_rooms(); [INFO] [stdout] 541 + self.list_rooms() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:544:17 [INFO] [stdout] | [INFO] [stdout] 544 | return self.create_new_room(Some(player_id), name); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 544 - return self.create_new_room(Some(player_id), name); [INFO] [stdout] 544 + self.create_new_room(Some(player_id), name) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:547:17 [INFO] [stdout] | [INFO] [stdout] 547 | return self.join_room(player_id, room_name); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 547 - return self.join_room(player_id, room_name); [INFO] [stdout] 547 + self.join_room(player_id, room_name) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:550:17 [INFO] [stdout] | [INFO] [stdout] 550 | return self.leave_room(player_id); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 550 - return self.leave_room(player_id); [INFO] [stdout] 550 + self.leave_room(player_id) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:553:17 [INFO] [stdout] | [INFO] [stdout] 553 | return ResponseCode::BadRequest( Some("already connected".to_owned()) ); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 553 - return ResponseCode::BadRequest( Some("already connected".to_owned()) ); [INFO] [stdout] 553 + ResponseCode::BadRequest( Some("already connected".to_owned()) ) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:556:17 [INFO] [stdout] | [INFO] [stdout] 556 | return ResponseCode::BadRequest( Some("Invalid request".to_owned()) ); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 556 - return ResponseCode::BadRequest( Some("Invalid request".to_owned()) ); [INFO] [stdout] 556 + ResponseCode::BadRequest( Some("Invalid request".to_owned()) ) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MATCH_FOUND_SENTINEL` is never used [INFO] [stdout] --> src/net.rs:47:7 [INFO] [stdout] | [INFO] [stdout] 47 | const MATCH_FOUND_SENTINEL: usize = 110; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/net.rs:71:20 [INFO] [stdout] | [INFO] [stdout] 71 | AddrParseError(net::AddrParseError), [INFO] [stdout] | -------------- ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `NetError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 71 - AddrParseError(net::AddrParseError), [INFO] [stdout] 71 + AddrParseError(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/net.rs:72:13 [INFO] [stdout] | [INFO] [stdout] 72 | IoError(io::Error), [INFO] [stdout] | ------- ^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `NetError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 72 - IoError(io::Error), [INFO] [stdout] 72 + IoError(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:572:9 [INFO] [stdout] | [INFO] [stdout] 572 | return true; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 572 - return true; [INFO] [stdout] 572 + true [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple methods are never used [INFO] [stdout] --> src/net.rs:438:8 [INFO] [stdout] | [INFO] [stdout] 435 | pub trait NetworkQueue { [INFO] [stdout] | ------------ methods in this trait [INFO] [stdout] ... [INFO] [stdout] 438 | fn head_of_queue(&self) -> Option<&T> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 442 | fn tail_of_queue(&self) -> Option<&T> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 446 | fn newest_seq_num(&self) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 455 | fn oldest_seq_num(&self) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 464 | fn push_back(&mut self, item: T) { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 468 | fn push_front(&mut self, item: T) { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 476 | fn insert(&mut self, index: usize, item: T) { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 481 | fn is_seq_sufficiently_far_away(&self, a: u64, b: u64) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 492 | fn will_seq_cause_a_wrap(&self, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 509 | fn remove(&mut self, pkt: &T) -> Option; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 510 | [INFO] [stdout] 511 | fn discard_older_items(&mut self); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 512 | fn buffer_item(&mut self, item: T) -> bool; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `find_rx_insertion_index`, `find_rx_insertion_index_in_subset`, and `insert_into_rx_queue` are never used [INFO] [stdout] --> src/net.rs:745:8 [INFO] [stdout] | [INFO] [stdout] 739 | impl NetQueue where T: Sequenced+Debug+Clone { [INFO] [stdout] | -------------------------------------------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 745 | fn find_rx_insertion_index(&self, item: &T) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 779 | fn find_rx_insertion_index_in_subset(&self, start: usize, end: usize, item: &T) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 792 | fn insert_into_rx_queue(&mut self, index: Option, item: T) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this pattern creates a reference to a reference [INFO] [stdout] --> src/server.rs:567:13 [INFO] [stdout] | [INFO] [stdout] 567 | for ref player in self.players.values() { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 567 - for ref player in self.players.values() { [INFO] [stdout] 567 + for player in self.players.values() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/server.rs:589:9 [INFO] [stdout] | [INFO] [stdout] 589 | / match self.player_map.get(cookie) { [INFO] [stdout] 590 | | Some(player_id) => Some(*player_id), [INFO] [stdout] 591 | | None => None [INFO] [stdout] 592 | | } [INFO] [stdout] | |_________^ help: try: `self.player_map.get(cookie).map(|player_id| *player_id)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_map [INFO] [stdout] = note: `#[warn(clippy::manual_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/server.rs:601:9 [INFO] [stdout] | [INFO] [stdout] 600 | let already_exists = network.rx_packets.buffer_item(packet); [INFO] [stdout] | ------------------------------------------------------------ unnecessary `let` binding [INFO] [stdout] 601 | already_exists [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 600 ~ [INFO] [stdout] 601 ~ network.rx_packets.buffer_item(packet) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server.rs:699:12 [INFO] [stdout] | [INFO] [stdout] 699 | if self.players.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.players.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server.rs:711:12 [INFO] [stdout] | [INFO] [stdout] 711 | if players_to_update.len() != 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!players_to_update.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server.rs:719:12 [INFO] [stdout] | [INFO] [stdout] 719 | if self.players.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.players.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server.rs:727:12 [INFO] [stdout] | [INFO] [stdout] 727 | if players_to_update.len() != 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!players_to_update.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server.rs:754:12 [INFO] [stdout] | [INFO] [stdout] 754 | if self.rooms.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.rooms.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server.rs:759:16 [INFO] [stdout] | [INFO] [stdout] 759 | if room.player_ids.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `room.player_ids.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server.rs:774:12 [INFO] [stdout] | [INFO] [stdout] 774 | if players_to_update.len() != 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!players_to_update.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> src/server.rs:810:9 [INFO] [stdout] | [INFO] [stdout] 810 | /// Always returns either Ok(Some(Packet::Response{...})), Ok(None), or error. [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = help: if this is supposed to be its own paragraph, add a blank line [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#doc_lazy_continuation [INFO] [stdout] = note: `#[warn(clippy::doc_lazy_continuation)]` on by default [INFO] [stdout] help: indent this line [INFO] [stdout] | [INFO] [stdout] 810 | /// Always returns either Ok(Some(Packet::Response{...})), Ok(None), or error. [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:814:17 [INFO] [stdout] | [INFO] [stdout] 814 | return Err(Box::new(io::Error::new(ErrorKind::InvalidData, "invalid packet type"))); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 814 - return Err(Box::new(io::Error::new(ErrorKind::InvalidData, "invalid packet type"))); [INFO] [stdout] 814 + Err(Box::new(io::Error::new(ErrorKind::InvalidData, "invalid packet type"))) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:834:25 [INFO] [stdout] | [INFO] [stdout] 834 | return Ok(Some(response)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 834 ~ Ok(Some(response)) [INFO] [stdout] 835 | } else { [INFO] [stdout] 836 | return Err(Box::new(io::Error::new(ErrorKind::Other, "client out of date -- please upgrade"))); [INFO] [stdout] 837 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:836:25 [INFO] [stdout] | [INFO] [stdout] 836 | return Err(Box::new(io::Error::new(ErrorKind::Other, "client out of date -- please upgrade"))); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 836 ~ Err(Box::new(io::Error::new(ErrorKind::Other, "client out of date -- please upgrade"))) [INFO] [stdout] 837 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/server.rs:822:28 [INFO] [stdout] | [INFO] [stdout] 822 | if cookie == None { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `cookie.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/server.rs:836:45 [INFO] [stdout] | [INFO] [stdout] 836 | return Err(Box::new(io::Error::new(ErrorKind::Other, "client out of date -- please upgrade"))); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#io_other_error [INFO] [stdout] = note: `#[warn(clippy::io_other_error)]` on by default [INFO] [stdout] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 836 - return Err(Box::new(io::Error::new(ErrorKind::Other, "client out of date -- please upgrade"))); [INFO] [stdout] 836 + return Err(Box::new(io::Error::other("client out of date -- please upgrade"))); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/server.rs:853:21 [INFO] [stdout] | [INFO] [stdout] 853 | / match action.clone() { [INFO] [stdout] 854 | | RequestAction::KeepAlive(resp_ack) => { [INFO] [stdout] ... | [INFO] [stdout] 861 | | _ => (), [INFO] [stdout] 862 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 853 ~ if let RequestAction::KeepAlive(resp_ack) = action.clone() { [INFO] [stdout] 854 + // If the client does not send new requests, the Server will never get a reply for [INFO] [stdout] 855 + // the set of responses it may have sent. This will result in the transmission queue contents [INFO] [stdout] 856 + // flooding the Client on retranmission. [INFO] [stdout] 857 + self.clear_transmission_queue_on_ack(player_id, Some(resp_ack)); [INFO] [stdout] 858 + return Ok(None); [INFO] [stdout] 859 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:963:13 [INFO] [stdout] | [INFO] [stdout] 963 | return response; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 963 - return response; [INFO] [stdout] 963 + response [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:971:13 [INFO] [stdout] | [INFO] [stdout] 971 | return response; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 971 - return response; [INFO] [stdout] 971 + response [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `SocketAddr` which implements the `Copy` trait [INFO] [stdout] --> src/server.rs:954:60 [INFO] [stdout] | [INFO] [stdout] 954 | let player = self.add_new_player(name.clone(), addr.clone()); [INFO] [stdout] | ^^^^^^^^^^^^ help: try removing the `clone` call: `addr` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/server.rs:976:51 [INFO] [stdout] | [INFO] [stdout] 976 | pub fn construct_client_updates(&mut self) -> Result>, Box> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server.rs:979:12 [INFO] [stdout] | [INFO] [stdout] 979 | if self.rooms.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.rooms.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server.rs:987:44 [INFO] [stdout] | [INFO] [stdout] 987 | if room.messages.is_empty() || room.player_ids.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `room.player_ids.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/server.rs:998:111 [INFO] [stdout] | [INFO] [stdout] 998 | let unsent_messages: Option> = self.collect_unacknowledged_messages(&room, player); [INFO] [stdout] | ^^^^^ help: change this to: `room` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `SocketAddr` which implements the `Copy` trait [INFO] [stdout] --> src/server.rs:1012:43 [INFO] [stdout] | [INFO] [stdout] 1012 | client_updates.push( (player.addr.clone(), update_packet) ); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `player.addr` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server.rs:1017:12 [INFO] [stdout] | [INFO] [stdout] 1017 | if client_updates.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!client_updates.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:1065:9 [INFO] [stdout] | [INFO] [stdout] 1065 | return Some(unsent_messages); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 1065 - return Some(unsent_messages); [INFO] [stdout] 1065 + Some(unsent_messages) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this block may be rewritten with the `?` operator [INFO] [stdout] --> src/server.rs:1032:17 [INFO] [stdout] | [INFO] [stdout] 1032 | / if opt_newest_msg.is_none() { [INFO] [stdout] 1033 | | return None; [INFO] [stdout] 1034 | | } [INFO] [stdout] | |_________________^ help: replace it with: `opt_newest_msg?;` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server.rs:1057:12 [INFO] [stdout] | [INFO] [stdout] 1057 | if raw_unsent_messages.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `raw_unsent_messages.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server.rs:1069:12 [INFO] [stdout] | [INFO] [stdout] 1069 | if self.rooms.len() != 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!self.rooms.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this pattern creates a reference to a reference [INFO] [stdout] --> src/server.rs:1073:43 [INFO] [stdout] | [INFO] [stdout] 1073 | ... room.messages.retain(|ref m| current_timestamp - m.timestamp < Duration::from_secs(MAX_AGE_CHAT_MESSAGES as u64) ); [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 1073 - room.messages.retain(|ref m| current_timestamp - m.timestamp < Duration::from_secs(MAX_AGE_CHAT_MESSAGES as u64) ); [INFO] [stdout] 1073 + room.messages.retain(|m| current_timestamp - m.timestamp < Duration::from_secs(MAX_AGE_CHAT_MESSAGES as u64) ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `PlayerID` which implements the `Copy` trait [INFO] [stdout] --> src/server.rs:1083:28 [INFO] [stdout] | [INFO] [stdout] 1083 | player_id: player_id.clone(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `player_id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant name ends with the enum's name [INFO] [stdout] --> src/server.rs:1137:5 [INFO] [stdout] | [INFO] [stdout] 1137 | TickEvent, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] = note: `#[warn(clippy::enum_variant_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant name ends with the enum's name [INFO] [stdout] --> src/server.rs:1139:5 [INFO] [stdout] | [INFO] [stdout] 1139 | NetworkEvent, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: if let can be simplified with `.unwrap_or_default()` [INFO] [stdout] --> src/net.rs:169:9 [INFO] [stdout] | [INFO] [stdout] 169 | / if let Some(v) = self.chat_seq { [INFO] [stdout] 170 | | v [INFO] [stdout] 171 | | } else { 0 } [INFO] [stdout] | |____________________^ help: replace it with: `self.chat_seq.unwrap_or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::manual_unwrap_or_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/server.rs:1208:18 [INFO] [stdout] | [INFO] [stdout] 1208 | .filter(|&(_, ref opt_packet)| { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] = note: `#[warn(clippy::needless_borrowed_reference)]` on by default [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 1208 - .filter(|&(_, ref opt_packet)| { [INFO] [stdout] 1208 + .filter(|(_, opt_packet)| { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/server.rs:1209:13 [INFO] [stdout] | [INFO] [stdout] 1209 | *opt_packet != None [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: use `Option::is_some()` instead: `opt_packet.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `decode_result` after checking its variant with `is_ok` [INFO] [stdout] --> src/server.rs:1246:55 [INFO] [stdout] | [INFO] [stdout] 1245 | if decode_result.is_ok() { [INFO] [stdout] | ------------------------ help: try: `if let Ok() = decode_result` [INFO] [stdout] 1246 | let opt_response_packet = decode_result.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap_err` on `decode_result` after checking its variant with `is_ok` [INFO] [stdout] --> src/server.rs:1253:39 [INFO] [stdout] | [INFO] [stdout] 1245 | if decode_result.is_ok() { [INFO] [stdout] | ------------------------ help: try: `if let Err() = decode_result` [INFO] [stdout] ... [INFO] [stdout] 1253 | let err = decode_result.unwrap_err(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `client_update_packets_result` after checking its variant with `is_ok` [INFO] [stdout] --> src/server.rs:1263:50 [INFO] [stdout] | [INFO] [stdout] 1262 | if client_update_packets_result.is_ok() { [INFO] [stdout] | --------------------------------------- help: try: `if let Ok() = client_update_packets_result` [INFO] [stdout] 1263 | let opt_update_packets = client_update_packets_result.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `SocketAddr` which implements the `Copy` trait [INFO] [stdout] --> src/server.rs:1249:49 [INFO] [stdout] | [INFO] [stdout] 1249 | ... let response = (addr.clone(), response_packet); [INFO] [stdout] | ^^^^^^^^^^^^ help: try removing the `clone` call: `addr` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/net.rs:378:39 [INFO] [stdout] | [INFO] [stdout] 378 | let sock = UdpSocket::bind(&addr, &handle).expect("failed to bind socket"); [INFO] [stdout] | ^^^^^^^ help: change this to: `handle` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `opt_newest_packet` after checking its variant with `is_some` [INFO] [stdout] --> src/net.rs:450:37 [INFO] [stdout] | [INFO] [stdout] 449 | if opt_newest_packet.is_some() { [INFO] [stdout] | ------------------------------ help: try: `if let Some() = opt_newest_packet` [INFO] [stdout] 450 | let newest_packet: &T = opt_newest_packet.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `opt_oldest_packet` after checking its variant with `is_some` [INFO] [stdout] --> src/net.rs:459:37 [INFO] [stdout] | [INFO] [stdout] 458 | if opt_oldest_packet.is_some() { [INFO] [stdout] | ------------------------------ help: try: `if let Some() = opt_oldest_packet` [INFO] [stdout] 459 | let oldest_packet: &T = opt_oldest_packet.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/net.rs:482:36 [INFO] [stdout] | [INFO] [stdout] 482 | static HALFWAYPOINT: u64 = u64::max_value()/2; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] = note: `#[warn(clippy::legacy_numeric_constants)]` on by default [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 482 - static HALFWAYPOINT: u64 = u64::max_value()/2; [INFO] [stdout] 482 + static HALFWAYPOINT: u64 = u64::MAX/2; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/net.rs:613:17 [INFO] [stdout] | [INFO] [stdout] 613 | return None; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 613 - return None; [INFO] [stdout] 613 + None [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/net.rs:618:17 [INFO] [stdout] | [INFO] [stdout] 618 | return Some(pkt); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 618 - return Some(pkt); [INFO] [stdout] 618 + Some(pkt) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/net.rs:664:34 [INFO] [stdout] | [INFO] [stdout] 664 | if newest_seq_num == u64::max_value() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 664 - if newest_seq_num == u64::max_value() { [INFO] [stdout] 664 + if newest_seq_num == u64::MAX { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/net.rs:747:50 [INFO] [stdout] | [INFO] [stdout] 747 | let f_result = front_slice.binary_search(&item); [INFO] [stdout] | ^^^^^ help: change this to: `item` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/net.rs:748:49 [INFO] [stdout] | [INFO] [stdout] 748 | let b_result = back_slice.binary_search(&item); [INFO] [stdout] | ^^^^^ help: change this to: `item` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/net.rs:806:9 [INFO] [stdout] | [INFO] [stdout] 806 | return exists; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 806 - return exists; [INFO] [stdout] 806 + exists [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/net.rs:795:13 [INFO] [stdout] | [INFO] [stdout] 795 | / if insertion_index != MATCH_FOUND_SENTINEL { [INFO] [stdout] 796 | | if cfg!(test) { [INFO] [stdout] 797 | | self.as_queue_type_mut().insert(insertion_index, item.clone()); [INFO] [stdout] 798 | | self.attempts.push_back(NetAttempt::new()); [INFO] [stdout] 799 | | } [INFO] [stdout] 800 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 795 ~ if insertion_index != MATCH_FOUND_SENTINEL [INFO] [stdout] 796 ~ && cfg!(test) { [INFO] [stdout] 797 | self.as_queue_type_mut().insert(insertion_index, item.clone()); [INFO] [stdout] 798 | self.attempts.push_back(NetAttempt::new()); [INFO] [stdout] 799 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/server.rs:59:55 [INFO] [stdout] | [INFO] [stdout] 59 | pub const SERVER_ID: PlayerID = PlayerID(u64::max_value()); // 0xFFFF....FFFF [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 59 - pub const SERVER_ID: PlayerID = PlayerID(u64::max_value()); // 0xFFFF....FFFF [INFO] [stdout] 59 + pub const SERVER_ID: PlayerID = PlayerID(u64::MAX); // 0xFFFF....FFFF [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:133:9 [INFO] [stdout] | [INFO] [stdout] 133 | return None; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 133 - return None; [INFO] [stdout] 133 + None [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this block may be rewritten with the `?` operator [INFO] [stdout] --> src/server.rs:126:9 [INFO] [stdout] | [INFO] [stdout] 126 | / if self.game_info.is_none() { [INFO] [stdout] 127 | | return None; [INFO] [stdout] 128 | | } [INFO] [stdout] | |_________^ help: replace it with: `self.game_info.as_ref()?;` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stdout] = note: `#[warn(clippy::question_mark)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:146:9 [INFO] [stdout] | [INFO] [stdout] 146 | return false; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 146 - return false; [INFO] [stdout] 146 + false [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded late initialization [INFO] [stdout] --> src/server.rs:200:5 [INFO] [stdout] | [INFO] [stdout] 200 | let hash: u64; [INFO] [stdout] | ^^^^^^^^^^^^^^ created here [INFO] [stdout] ... [INFO] [stdout] 208 | hash = (timestamp << 32) | rand_salt; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ initialised here [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_late_init [INFO] [stdout] = note: `#[warn(clippy::needless_late_init)]` on by default [INFO] [stdout] help: move the declaration `hash` here [INFO] [stdout] | [INFO] [stdout] 200 ~ [INFO] [stdout] 201 | [INFO] [stdout] ... [INFO] [stdout] 207 | [INFO] [stdout] 208 ~ let hash: u64 = (timestamp << 32) | rand_salt; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `u64` [INFO] [stdout] --> src/server.rs:202:30 [INFO] [stdout] | [INFO] [stdout] 202 | let mut timestamp: u64 = time::Instant::now().elapsed().as_secs().into(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `time::Instant::now().elapsed().as_secs()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/server.rs:203:5 [INFO] [stdout] | [INFO] [stdout] 203 | timestamp = timestamp & 0xFFFFFFFF; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `timestamp &= 0xFFFFFFFF` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] = note: `#[warn(clippy::assign_op_pattern)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/server.rs:206:5 [INFO] [stdout] | [INFO] [stdout] 206 | rand_salt = rand_salt & 0xFFFFFFFF; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `rand_salt &= 0xFFFFFFFF` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:274:9 [INFO] [stdout] | [INFO] [stdout] 274 | return self.messages.front(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 274 - return self.messages.front(); [INFO] [stdout] 274 + self.messages.front() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:279:9 [INFO] [stdout] | [INFO] [stdout] 279 | return self.messages.back(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 279 - return self.messages.back(); [INFO] [stdout] 279 + self.messages.back() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:309:9 [INFO] [stdout] | [INFO] [stdout] 309 | return amount_to_consume; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 309 - return amount_to_consume; [INFO] [stdout] 309 + amount_to_consume [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/server.rs:304:18 [INFO] [stdout] | [INFO] [stdout] 304 | (::max_value() - oldest_msg.seq_num) + chat_msg_seq_num + 1 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 304 - (::max_value() - oldest_msg.seq_num) + chat_msg_seq_num + 1 [INFO] [stdout] 304 + (u64::MAX - oldest_msg.seq_num) + chat_msg_seq_num + 1 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `ServerState` [INFO] [stdout] --> src/server.rs:1121:5 [INFO] [stdout] | [INFO] [stdout] 1121 | / pub fn new() -> Self { [INFO] [stdout] 1122 | | ServerState { [INFO] [stdout] 1123 | | tick: 0, [INFO] [stdout] 1124 | | players: HashMap::::new(), [INFO] [stdout] ... | [INFO] [stdout] 1130 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 320 + impl Default for ServerState { [INFO] [stdout] 321 + fn default() -> Self { [INFO] [stdout] 322 + Self::new() [INFO] [stdout] 323 + } [INFO] [stdout] 324 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/server.rs:344:12 [INFO] [stdout] | [INFO] [stdout] 344 | if player.game_info == None { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `player.game_info.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] = note: `#[warn(clippy::partialeq_to_none)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this block may be rewritten with the `?` operator [INFO] [stdout] --> src/server.rs:354:9 [INFO] [stdout] | [INFO] [stdout] 354 | / if opt_room_id.is_none() { [INFO] [stdout] 355 | | return None; [INFO] [stdout] 356 | | } [INFO] [stdout] | |_________^ help: replace it with: `opt_room_id?;` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this block may be rewritten with the `?` operator [INFO] [stdout] --> src/server.rs:363:9 [INFO] [stdout] | [INFO] [stdout] 363 | / if opt_room_id.is_none() { [INFO] [stdout] 364 | | return None; [INFO] [stdout] 365 | | } [INFO] [stdout] | |_________^ help: replace it with: `opt_room_id?;` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:383:9 [INFO] [stdout] | [INFO] [stdout] 383 | return ResponseCode::PlayerList(players); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 383 - return ResponseCode::PlayerList(players); [INFO] [stdout] 383 + ResponseCode::PlayerList(players) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:412:9 [INFO] [stdout] | [INFO] [stdout] 412 | return ResponseCode::OK; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 412 - return ResponseCode::OK; [INFO] [stdout] 412 + ResponseCode::OK [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/server.rs:444:12 [INFO] [stdout] | [INFO] [stdout] 444 | if !self.room_map.get(&room_name).is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.room_map.get(&room_name).is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:447:13 [INFO] [stdout] | [INFO] [stdout] 447 | return ResponseCode::OK; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 447 - return ResponseCode::OK; [INFO] [stdout] 447 + ResponseCode::OK [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:449:13 [INFO] [stdout] | [INFO] [stdout] 449 | return ResponseCode::BadRequest(Some(format!("room name already in use"))); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 449 - return ResponseCode::BadRequest(Some(format!("room name already in use"))); [INFO] [stdout] 449 + ResponseCode::BadRequest(Some(format!("room name already in use"))) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary use of `get(&room_name).is_some()` [INFO] [stdout] --> src/server.rs:444:27 [INFO] [stdout] | [INFO] [stdout] 444 | if !self.room_map.get(&room_name).is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `contains_key(&room_name)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_get_then_check [INFO] [stdout] = note: `#[warn(clippy::unnecessary_get_then_check)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/server.rs:449:50 [INFO] [stdout] | [INFO] [stdout] 449 | return ResponseCode::BadRequest(Some(format!("room name already in use"))); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"room name already in use".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:472:9 [INFO] [stdout] | [INFO] [stdout] 472 | return ResponseCode::BadRequest(Some(format!("no room named {:?}", room_name))); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 472 - return ResponseCode::BadRequest(Some(format!("no room named {:?}", room_name))); [INFO] [stdout] 472 + ResponseCode::BadRequest(Some(format!("no room named {:?}", room_name))) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `RoomID` which implements the `Copy` trait [INFO] [stdout] --> src/server.rs:466:30 [INFO] [stdout] | [INFO] [stdout] 466 | room_id: gs.room_id.clone(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `gs.room_id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:494:9 [INFO] [stdout] | [INFO] [stdout] 494 | return ResponseCode::LeaveRoom; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 494 - return ResponseCode::LeaveRoom; [INFO] [stdout] 494 + ResponseCode::LeaveRoom [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:527:17 [INFO] [stdout] | [INFO] [stdout] 527 | return self.handle_disconnect(player_id); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 527 - return self.handle_disconnect(player_id); [INFO] [stdout] 527 + self.handle_disconnect(player_id) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:532:17 [INFO] [stdout] | [INFO] [stdout] 532 | return ResponseCode::OK; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 532 - return ResponseCode::OK; [INFO] [stdout] 532 + ResponseCode::OK [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:535:17 [INFO] [stdout] | [INFO] [stdout] 535 | return self.list_players(player_id); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 535 - return self.list_players(player_id); [INFO] [stdout] 535 + self.list_players(player_id) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:538:17 [INFO] [stdout] | [INFO] [stdout] 538 | return self.handle_chat_message(player_id, msg); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 538 - return self.handle_chat_message(player_id, msg); [INFO] [stdout] 538 + self.handle_chat_message(player_id, msg) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:541:17 [INFO] [stdout] | [INFO] [stdout] 541 | return self.list_rooms(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 541 - return self.list_rooms(); [INFO] [stdout] 541 + self.list_rooms() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:544:17 [INFO] [stdout] | [INFO] [stdout] 544 | return self.create_new_room(Some(player_id), name); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 544 - return self.create_new_room(Some(player_id), name); [INFO] [stdout] 544 + self.create_new_room(Some(player_id), name) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:547:17 [INFO] [stdout] | [INFO] [stdout] 547 | return self.join_room(player_id, room_name); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 547 - return self.join_room(player_id, room_name); [INFO] [stdout] 547 + self.join_room(player_id, room_name) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:550:17 [INFO] [stdout] | [INFO] [stdout] 550 | return self.leave_room(player_id); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 550 - return self.leave_room(player_id); [INFO] [stdout] 550 + self.leave_room(player_id) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:553:17 [INFO] [stdout] | [INFO] [stdout] 553 | return ResponseCode::BadRequest( Some("already connected".to_owned()) ); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 553 - return ResponseCode::BadRequest( Some("already connected".to_owned()) ); [INFO] [stdout] 553 + ResponseCode::BadRequest( Some("already connected".to_owned()) ) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:556:17 [INFO] [stdout] | [INFO] [stdout] 556 | return ResponseCode::BadRequest( Some("Invalid request".to_owned()) ); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 556 - return ResponseCode::BadRequest( Some("Invalid request".to_owned()) ); [INFO] [stdout] 556 + ResponseCode::BadRequest( Some("Invalid request".to_owned()) ) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:572:9 [INFO] [stdout] | [INFO] [stdout] 572 | return true; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 572 - return true; [INFO] [stdout] 572 + true [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this pattern creates a reference to a reference [INFO] [stdout] --> src/server.rs:567:13 [INFO] [stdout] | [INFO] [stdout] 567 | for ref player in self.players.values() { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 567 - for ref player in self.players.values() { [INFO] [stdout] 567 + for player in self.players.values() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/server.rs:589:9 [INFO] [stdout] | [INFO] [stdout] 589 | / match self.player_map.get(cookie) { [INFO] [stdout] 590 | | Some(player_id) => Some(*player_id), [INFO] [stdout] 591 | | None => None [INFO] [stdout] 592 | | } [INFO] [stdout] | |_________^ help: try: `self.player_map.get(cookie).map(|player_id| *player_id)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_map [INFO] [stdout] = note: `#[warn(clippy::manual_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/server.rs:601:9 [INFO] [stdout] | [INFO] [stdout] 600 | let already_exists = network.rx_packets.buffer_item(packet); [INFO] [stdout] | ------------------------------------------------------------ unnecessary `let` binding [INFO] [stdout] 601 | already_exists [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 600 ~ [INFO] [stdout] 601 ~ network.rx_packets.buffer_item(packet) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server.rs:699:12 [INFO] [stdout] | [INFO] [stdout] 699 | if self.players.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.players.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server.rs:711:12 [INFO] [stdout] | [INFO] [stdout] 711 | if players_to_update.len() != 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!players_to_update.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server.rs:719:12 [INFO] [stdout] | [INFO] [stdout] 719 | if self.players.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.players.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server.rs:727:12 [INFO] [stdout] | [INFO] [stdout] 727 | if players_to_update.len() != 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!players_to_update.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server.rs:754:12 [INFO] [stdout] | [INFO] [stdout] 754 | if self.rooms.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.rooms.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server.rs:759:16 [INFO] [stdout] | [INFO] [stdout] 759 | if room.player_ids.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `room.player_ids.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server.rs:774:12 [INFO] [stdout] | [INFO] [stdout] 774 | if players_to_update.len() != 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!players_to_update.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> src/server.rs:810:9 [INFO] [stdout] | [INFO] [stdout] 810 | /// Always returns either Ok(Some(Packet::Response{...})), Ok(None), or error. [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = help: if this is supposed to be its own paragraph, add a blank line [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#doc_lazy_continuation [INFO] [stdout] = note: `#[warn(clippy::doc_lazy_continuation)]` on by default [INFO] [stdout] help: indent this line [INFO] [stdout] | [INFO] [stdout] 810 | /// Always returns either Ok(Some(Packet::Response{...})), Ok(None), or error. [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:814:17 [INFO] [stdout] | [INFO] [stdout] 814 | return Err(Box::new(io::Error::new(ErrorKind::InvalidData, "invalid packet type"))); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 814 - return Err(Box::new(io::Error::new(ErrorKind::InvalidData, "invalid packet type"))); [INFO] [stdout] 814 + Err(Box::new(io::Error::new(ErrorKind::InvalidData, "invalid packet type"))) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:834:25 [INFO] [stdout] | [INFO] [stdout] 834 | return Ok(Some(response)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 834 ~ Ok(Some(response)) [INFO] [stdout] 835 | } else { [INFO] [stdout] 836 | return Err(Box::new(io::Error::new(ErrorKind::Other, "client out of date -- please upgrade"))); [INFO] [stdout] 837 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:836:25 [INFO] [stdout] | [INFO] [stdout] 836 | return Err(Box::new(io::Error::new(ErrorKind::Other, "client out of date -- please upgrade"))); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 836 ~ Err(Box::new(io::Error::new(ErrorKind::Other, "client out of date -- please upgrade"))) [INFO] [stdout] 837 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/server.rs:822:28 [INFO] [stdout] | [INFO] [stdout] 822 | if cookie == None { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `cookie.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/server.rs:836:45 [INFO] [stdout] | [INFO] [stdout] 836 | return Err(Box::new(io::Error::new(ErrorKind::Other, "client out of date -- please upgrade"))); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#io_other_error [INFO] [stdout] = note: `#[warn(clippy::io_other_error)]` on by default [INFO] [stdout] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 836 - return Err(Box::new(io::Error::new(ErrorKind::Other, "client out of date -- please upgrade"))); [INFO] [stdout] 836 + return Err(Box::new(io::Error::other("client out of date -- please upgrade"))); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/server.rs:853:21 [INFO] [stdout] | [INFO] [stdout] 853 | / match action.clone() { [INFO] [stdout] 854 | | RequestAction::KeepAlive(resp_ack) => { [INFO] [stdout] ... | [INFO] [stdout] 861 | | _ => (), [INFO] [stdout] 862 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 853 ~ if let RequestAction::KeepAlive(resp_ack) = action.clone() { [INFO] [stdout] 854 + // If the client does not send new requests, the Server will never get a reply for [INFO] [stdout] 855 + // the set of responses it may have sent. This will result in the transmission queue contents [INFO] [stdout] 856 + // flooding the Client on retranmission. [INFO] [stdout] 857 + self.clear_transmission_queue_on_ack(player_id, Some(resp_ack)); [INFO] [stdout] 858 + return Ok(None); [INFO] [stdout] 859 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:963:13 [INFO] [stdout] | [INFO] [stdout] 963 | return response; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 963 - return response; [INFO] [stdout] 963 + response [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:971:13 [INFO] [stdout] | [INFO] [stdout] 971 | return response; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 971 - return response; [INFO] [stdout] 971 + response [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `SocketAddr` which implements the `Copy` trait [INFO] [stdout] --> src/server.rs:954:60 [INFO] [stdout] | [INFO] [stdout] 954 | let player = self.add_new_player(name.clone(), addr.clone()); [INFO] [stdout] | ^^^^^^^^^^^^ help: try removing the `clone` call: `addr` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/server.rs:976:51 [INFO] [stdout] | [INFO] [stdout] 976 | pub fn construct_client_updates(&mut self) -> Result>, Box> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server.rs:979:12 [INFO] [stdout] | [INFO] [stdout] 979 | if self.rooms.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.rooms.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server.rs:987:44 [INFO] [stdout] | [INFO] [stdout] 987 | if room.messages.is_empty() || room.player_ids.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `room.player_ids.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/server.rs:998:111 [INFO] [stdout] | [INFO] [stdout] 998 | let unsent_messages: Option> = self.collect_unacknowledged_messages(&room, player); [INFO] [stdout] | ^^^^^ help: change this to: `room` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `SocketAddr` which implements the `Copy` trait [INFO] [stdout] --> src/server.rs:1012:43 [INFO] [stdout] | [INFO] [stdout] 1012 | client_updates.push( (player.addr.clone(), update_packet) ); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `player.addr` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server.rs:1017:12 [INFO] [stdout] | [INFO] [stdout] 1017 | if client_updates.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!client_updates.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server.rs:1065:9 [INFO] [stdout] | [INFO] [stdout] 1065 | return Some(unsent_messages); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 1065 - return Some(unsent_messages); [INFO] [stdout] 1065 + Some(unsent_messages) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this block may be rewritten with the `?` operator [INFO] [stdout] --> src/server.rs:1032:17 [INFO] [stdout] | [INFO] [stdout] 1032 | / if opt_newest_msg.is_none() { [INFO] [stdout] 1033 | | return None; [INFO] [stdout] 1034 | | } [INFO] [stdout] | |_________________^ help: replace it with: `opt_newest_msg?;` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server.rs:1057:12 [INFO] [stdout] | [INFO] [stdout] 1057 | if raw_unsent_messages.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `raw_unsent_messages.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server.rs:1069:12 [INFO] [stdout] | [INFO] [stdout] 1069 | if self.rooms.len() != 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!self.rooms.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this pattern creates a reference to a reference [INFO] [stdout] --> src/server.rs:1073:43 [INFO] [stdout] | [INFO] [stdout] 1073 | ... room.messages.retain(|ref m| current_timestamp - m.timestamp < Duration::from_secs(MAX_AGE_CHAT_MESSAGES as u64) ); [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 1073 - room.messages.retain(|ref m| current_timestamp - m.timestamp < Duration::from_secs(MAX_AGE_CHAT_MESSAGES as u64) ); [INFO] [stdout] 1073 + room.messages.retain(|m| current_timestamp - m.timestamp < Duration::from_secs(MAX_AGE_CHAT_MESSAGES as u64) ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `PlayerID` which implements the `Copy` trait [INFO] [stdout] --> src/server.rs:1083:28 [INFO] [stdout] | [INFO] [stdout] 1083 | player_id: player_id.clone(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `player_id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant name ends with the enum's name [INFO] [stdout] --> src/server.rs:1137:5 [INFO] [stdout] | [INFO] [stdout] 1137 | TickEvent, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] = note: `#[warn(clippy::enum_variant_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant name ends with the enum's name [INFO] [stdout] --> src/server.rs:1139:5 [INFO] [stdout] | [INFO] [stdout] 1139 | NetworkEvent, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/server.rs:1208:18 [INFO] [stdout] | [INFO] [stdout] 1208 | .filter(|&(_, ref opt_packet)| { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] = note: `#[warn(clippy::needless_borrowed_reference)]` on by default [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 1208 - .filter(|&(_, ref opt_packet)| { [INFO] [stdout] 1208 + .filter(|(_, opt_packet)| { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/server.rs:1209:13 [INFO] [stdout] | [INFO] [stdout] 1209 | *opt_packet != None [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: use `Option::is_some()` instead: `opt_packet.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `decode_result` after checking its variant with `is_ok` [INFO] [stdout] --> src/server.rs:1246:55 [INFO] [stdout] | [INFO] [stdout] 1245 | if decode_result.is_ok() { [INFO] [stdout] | ------------------------ help: try: `if let Ok() = decode_result` [INFO] [stdout] 1246 | let opt_response_packet = decode_result.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap_err` on `decode_result` after checking its variant with `is_ok` [INFO] [stdout] --> src/server.rs:1253:39 [INFO] [stdout] | [INFO] [stdout] 1245 | if decode_result.is_ok() { [INFO] [stdout] | ------------------------ help: try: `if let Err() = decode_result` [INFO] [stdout] ... [INFO] [stdout] 1253 | let err = decode_result.unwrap_err(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `client_update_packets_result` after checking its variant with `is_ok` [INFO] [stdout] --> src/server.rs:1263:50 [INFO] [stdout] | [INFO] [stdout] 1262 | if client_update_packets_result.is_ok() { [INFO] [stdout] | --------------------------------------- help: try: `if let Ok() = client_update_packets_result` [INFO] [stdout] 1263 | let opt_update_packets = client_update_packets_result.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `SocketAddr` which implements the `Copy` trait [INFO] [stdout] --> src/server.rs:1249:49 [INFO] [stdout] | [INFO] [stdout] 1249 | ... let response = (addr.clone(), response_packet); [INFO] [stdout] | ^^^^^^^^^^^^ help: try removing the `clone` call: `addr` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/server.rs:1374:9 [INFO] [stdout] | [INFO] [stdout] 1374 | assert_eq!(player.has_chatted(), false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] = note: `#[warn(clippy::bool_assert_comparison)]` on by default [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 1374 - assert_eq!(player.has_chatted(), false); [INFO] [stdout] 1374 + assert!(!player.has_chatted()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/server.rs:1518:29 [INFO] [stdout] | [INFO] [stdout] 1518 | let start_seq_num = u64::max_value() - 6; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 1518 - let start_seq_num = u64::max_value() - 6; [INFO] [stdout] 1518 + let start_seq_num = u64::MAX - 6; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/server.rs:1520:39 [INFO] [stdout] | [INFO] [stdout] 1520 | for seq_num in start_seq_num..u64::max_value() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 1520 - for seq_num in start_seq_num..u64::max_value() { [INFO] [stdout] 1520 + for seq_num in start_seq_num..u64::MAX { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/server.rs:1580:13 [INFO] [stdout] | [INFO] [stdout] 1580 | assert_eq!(messages.is_some(), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 1580 - assert_eq!(messages.is_some(), true); [INFO] [stdout] 1580 + assert!(messages.is_some()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/server.rs:1627:13 [INFO] [stdout] | [INFO] [stdout] 1627 | assert_eq!(messages.is_some(), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 1627 - assert_eq!(messages.is_some(), true); [INFO] [stdout] 1627 + assert!(messages.is_some()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/server.rs:1886:9 [INFO] [stdout] | [INFO] [stdout] 1886 | assert_eq!(server.is_unique_player_name("some player"), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 1886 - assert_eq!(server.is_unique_player_name("some player"), true); [INFO] [stdout] 1886 + assert!(server.is_unique_player_name("some player")); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/server.rs:1891:9 [INFO] [stdout] | [INFO] [stdout] 1891 | assert_eq!(server.is_unique_player_name("some player"), false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 1891 - assert_eq!(server.is_unique_player_name("some player"), false); [INFO] [stdout] 1891 + assert!(!server.is_unique_player_name("some player")); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/server.rs:2125:53 [INFO] [stdout] | [INFO] [stdout] 2125 | ("([A-Z]{1,4} [0-9]{1,2}){3}").prop_map(|a| RequestAction::ChatMessage(a)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `RequestAction::ChatMessage` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/server.rs:2126:53 [INFO] [stdout] | [INFO] [stdout] 2126 | ("([A-Z]{1,4} [0-9]{1,2}){3}").prop_map(|a| RequestAction::NewRoom(a)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `RequestAction::NewRoom` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/server.rs:2127:53 [INFO] [stdout] | [INFO] [stdout] 2127 | ("([A-Z]{1,4} [0-9]{1,2}){3}").prop_map(|a| RequestAction::JoinRoom(a)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `RequestAction::JoinRoom` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/server.rs:2204:9 [INFO] [stdout] | [INFO] [stdout] 2204 | assert_eq!(validate_client_version( env!("CARGO_PKG_VERSION").to_owned()), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 2204 - assert_eq!(validate_client_version( env!("CARGO_PKG_VERSION").to_owned()), true); [INFO] [stdout] 2204 + assert!(validate_client_version( env!("CARGO_PKG_VERSION").to_owned())); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/server.rs:2209:7 [INFO] [stdout] | [INFO] [stdout] 2209 | assert_eq!(validate_client_version("0.0.1".to_owned()), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 2209 - assert_eq!(validate_client_version("0.0.1".to_owned()), true); [INFO] [stdout] 2209 + assert!(validate_client_version("0.0.1".to_owned())); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/server.rs:2214:9 [INFO] [stdout] | [INFO] [stdout] 2214 | ... assert_eq!(validate_client_version(format!("{}.{}.{}", ::max_value(), ::max_value(), ::max_value()).to_owned()), false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 2214 - assert_eq!(validate_client_version(format!("{}.{}.{}", ::max_value(), ::max_value(), ::max_value()).to_owned()), false); [INFO] [stdout] 2214 + assert!(!validate_client_version(format!("{}.{}.{}", ::max_value(), ::max_value(), ::max_value()).to_owned())); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/server.rs:2214:64 [INFO] [stdout] | [INFO] [stdout] 2214 | ... assert_eq!(validate_client_version(format!("{}.{}.{}", ::max_value(), ::max_value(), ::max_value()).to_owned(... [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 2214 - assert_eq!(validate_client_version(format!("{}.{}.{}", ::max_value(), ::max_value(), ::max_value()).to_owned()), false); [INFO] [stdout] 2214 + assert_eq!(validate_client_version(format!("{}.{}.{}", i32::MAX, ::max_value(), ::max_value()).to_owned()), false); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/server.rs:2214:84 [INFO] [stdout] | [INFO] [stdout] 2214 | ... assert_eq!(validate_client_version(format!("{}.{}.{}", ::max_value(), ::max_value(), ::max_value()).to_owned(... [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 2214 - assert_eq!(validate_client_version(format!("{}.{}.{}", ::max_value(), ::max_value(), ::max_value()).to_owned()), false); [INFO] [stdout] 2214 + assert_eq!(validate_client_version(format!("{}.{}.{}", ::max_value(), i32::MAX, ::max_value()).to_owned()), false); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of a legacy numeric method [INFO] [stdout] --> src/server.rs:2214:104 [INFO] [stdout] | [INFO] [stdout] 2214 | ... assert_eq!(validate_client_version(format!("{}.{}.{}", ::max_value(), ::max_value(), ::max_value()).to_owned(... [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] help: use the associated constant instead [INFO] [stdout] | [INFO] [stdout] 2214 - assert_eq!(validate_client_version(format!("{}.{}.{}", ::max_value(), ::max_value(), ::max_value()).to_owned()), false); [INFO] [stdout] 2214 + assert_eq!(validate_client_version(format!("{}.{}.{}", ::max_value(), ::max_value(), i32::MAX).to_owned()), false); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the variable `i` is used as a loop counter [INFO] [stdout] --> src/server.rs:2314:17 [INFO] [stdout] | [INFO] [stdout] 2314 | for msg in chats.unwrap() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `for (i, msg) in (1..).zip(chats.unwrap().into_iter())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stdout] = note: `#[warn(clippy::explicit_counter_loop)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/server.rs:2426:56 [INFO] [stdout] | [INFO] [stdout] 2426 | let room: &mut Room = server.rooms.get_mut(&room_id).unwrap(); [INFO] [stdout] | ^^^^^^^^ help: change this to: `room_id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/server.rs:2429:44 [INFO] [stdout] | [INFO] [stdout] 2429 | let room: &Room = server.rooms.get(&room_id).unwrap(); [INFO] [stdout] | ^^^^^^^^ help: change this to: `room_id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `room.messages.get(0)` [INFO] [stdout] --> src/server.rs:2432:40 [INFO] [stdout] | [INFO] [stdout] 2432 | let msgs: &ServerChatMessage = room.messages.get(0).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `room.messages.front()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] = note: `#[warn(clippy::get_first)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/server.rs:2482:13 [INFO] [stdout] | [INFO] [stdout] 2482 | assert_eq!(room.player_ids.contains(&player_id), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 2482 - assert_eq!(room.player_ids.contains(&player_id), true); [INFO] [stdout] 2482 + assert!(room.player_ids.contains(&player_id)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/server.rs:2488:9 [INFO] [stdout] | [INFO] [stdout] 2488 | assert_eq!(room.player_ids.contains(&player_id), false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 2488 - assert_eq!(room.player_ids.contains(&player_id), false); [INFO] [stdout] 2488 + assert!(!room.player_ids.contains(&player_id)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/server.rs:2508:9 [INFO] [stdout] | [INFO] [stdout] 2508 | assert_eq!(server.is_previously_processed_packet(player_id2, 0), false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 2508 - assert_eq!(server.is_previously_processed_packet(player_id2, 0), false); [INFO] [stdout] 2508 + assert!(!server.is_previously_processed_packet(player_id2, 0)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/server.rs:2510:9 [INFO] [stdout] | [INFO] [stdout] 2510 | assert_eq!(server.is_previously_processed_packet(player_id, 0), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 2510 - assert_eq!(server.is_previously_processed_packet(player_id, 0), true); [INFO] [stdout] 2510 + assert!(server.is_previously_processed_packet(player_id, 0)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/server.rs:2511:9 [INFO] [stdout] | [INFO] [stdout] 2511 | assert_eq!(server.is_previously_processed_packet(player_id, 4), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 2511 - assert_eq!(server.is_previously_processed_packet(player_id, 4), true); [INFO] [stdout] 2511 + assert!(server.is_previously_processed_packet(player_id, 4)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/server.rs:2512:9 [INFO] [stdout] | [INFO] [stdout] 2512 | assert_eq!(server.is_previously_processed_packet(player_id, 5), false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 2512 - assert_eq!(server.is_previously_processed_packet(player_id, 5), false); [INFO] [stdout] 2512 + assert!(!server.is_previously_processed_packet(player_id, 5)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused return value of `std::clone::Clone::clone` that must be used [INFO] [stdout] --> src/server.rs:2242:13 [INFO] [stdout] | [INFO] [stdout] 2242 | player.cookie.clone() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: cloning is often expensive and is not expected to have side effects [INFO] [stdout] = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 2242 | let _ = player.cookie.clone(); [INFO] [stdout] | +++++++ + [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 18.39s [INFO] running `Command { std: "docker" "inspect" "35e98f4cb85c74923c9506e2d76bcdc1de69dce07e5d4a8802b1daa3f3825f61", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "35e98f4cb85c74923c9506e2d76bcdc1de69dce07e5d4a8802b1daa3f3825f61", kill_on_drop: false }` [INFO] [stdout] 35e98f4cb85c74923c9506e2d76bcdc1de69dce07e5d4a8802b1daa3f3825f61