[INFO] fetching crate buttplug 9.0.9... [INFO] linting buttplug-9.0.9 against nightly for clippy-nonminimal_bool-denied [INFO] extracting crate buttplug 9.0.9 into /workspace/builds/worker-6-tc1/source [INFO] started tweaking crates.io crate buttplug 9.0.9 [INFO] removed 0 missing tests [INFO] finished tweaking crates.io crate buttplug 9.0.9 [INFO] tweaked toml for crates.io crate buttplug 9.0.9 written to /workspace/builds/worker-6-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate buttplug 9.0.9 on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate crates.io crate buttplug 9.0.9 already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded wasmtimer v0.4.3 [INFO] [stderr] Downloaded objc2-core-bluetooth v0.2.2 [INFO] [stderr] Downloaded bluez-generated v0.4.0 [INFO] [stderr] Downloaded dbus-tokio v0.7.6 [INFO] [stderr] Downloaded serde-aux v4.7.0 [INFO] [stderr] Downloaded os_info v3.12.0 [INFO] [stderr] Downloaded xml-rs v0.8.27 [INFO] [stderr] Downloaded jni-utils v0.1.1 [INFO] [stderr] Downloaded fancy-regex v0.14.0 [INFO] [stderr] Downloaded serde-xml-rs v0.8.1 [INFO] [stderr] Downloaded jsonschema v0.30.0 [INFO] [stderr] Downloaded btleplug v0.11.8 [INFO] [stderr] Downloaded hidapi v2.6.3 [INFO] [stderr] Downloaded dbus v0.9.7 [INFO] [stderr] Downloaded plist v1.7.4 [INFO] [stderr] Downloaded quick-xml v0.38.3 [INFO] [stderr] Downloaded cc v1.2.30 [INFO] [stderr] Downloaded rustls-webpki v0.103.4 [INFO] [stderr] Downloaded webpki-roots v1.0.2 [INFO] [stderr] Downloaded fluent-uri v0.3.2 [INFO] [stderr] Downloaded prost-types v0.13.5 [INFO] [stderr] Downloaded serialport v4.7.2 [INFO] [stderr] Downloaded bluez-async v0.8.2 [INFO] [stderr] Downloaded rustls v0.23.29 [INFO] [stderr] Downloaded referencing v0.30.0 [INFO] [stderr] Downloaded tempfile v3.21.0 [INFO] [stderr] Downloaded prost-build v0.13.5 [INFO] [stderr] Downloaded prost v0.13.5 [INFO] [stderr] Downloaded unescaper v0.1.6 [INFO] [stderr] Downloaded prost-derive v0.13.5 [INFO] [stderr] Downloaded rusty-xinput v1.3.0 [INFO] [stderr] Downloaded ordered-float v2.10.1 [INFO] [stderr] Downloaded serde-value v0.7.0 [INFO] [stderr] Downloaded tungstenite v0.26.2 [INFO] [stderr] Downloaded uuid v1.17.0 [INFO] [stderr] Downloaded redox_syscall v0.5.15 [INFO] [stderr] Downloaded buttplug_derive v0.8.1 [INFO] [stderr] Downloaded block-padding v0.3.3 [INFO] [stderr] Downloaded ecb v0.1.2 [INFO] [stderr] Downloaded borrow-or-share v0.2.2 [INFO] [stderr] Downloaded ref-cast-impl v1.0.24 [INFO] [stderr] Downloaded ref-cast v1.0.24 [INFO] [stderr] Downloaded libudev v0.3.0 [INFO] [stderr] Downloaded tokio-tungstenite v0.26.2 [INFO] [stderr] Downloaded libdbus-sys v0.2.5 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] f21e4c48313aa2d1330716544187ba76cc3d880ec05cee26d36fbc5856ddd782 [INFO] running `Command { std: "docker" "start" "-a" "f21e4c48313aa2d1330716544187ba76cc3d880ec05cee26d36fbc5856ddd782", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "f21e4c48313aa2d1330716544187ba76cc3d880ec05cee26d36fbc5856ddd782", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "f21e4c48313aa2d1330716544187ba76cc3d880ec05cee26d36fbc5856ddd782", kill_on_drop: false }` [INFO] [stdout] f21e4c48313aa2d1330716544187ba76cc3d880ec05cee26d36fbc5856ddd782 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 809d6f6d39d15f7031a0f4225477393f6be299e3b153de01e309886a58850507 [INFO] running `Command { std: "docker" "start" "-a" "809d6f6d39d15f7031a0f4225477393f6be299e3b153de01e309886a58850507", kill_on_drop: false }` [INFO] [stderr] Checking memchr v2.7.5 [INFO] [stderr] Compiling serde v1.0.219 [INFO] [stderr] Compiling syn v2.0.104 [INFO] [stderr] Checking mio v1.0.4 [INFO] [stderr] Checking socket2 v0.5.10 [INFO] [stderr] Checking futures-channel v0.3.31 [INFO] [stderr] Compiling typenum v1.18.0 [INFO] [stderr] Checking slab v0.4.10 [INFO] [stderr] Checking futures-io v0.3.31 [INFO] [stderr] Compiling cc v1.2.30 [INFO] [stderr] Checking getrandom v0.2.16 [INFO] [stderr] Checking writeable v0.6.1 [INFO] [stderr] Checking litemap v0.8.0 [INFO] [stderr] Compiling icu_normalizer_data v2.0.0 [INFO] [stderr] Compiling icu_properties_data v2.0.1 [INFO] [stderr] Checking percent-encoding v2.3.1 [INFO] [stderr] Checking zeroize v1.8.1 [INFO] [stderr] Checking getrandom v0.3.3 [INFO] [stderr] Checking rustls-pki-types v1.12.0 [INFO] [stderr] Compiling thiserror v2.0.12 [INFO] [stderr] Compiling libdbus-sys v0.2.5 [INFO] [stderr] Compiling rustls v0.23.29 [INFO] [stderr] Checking num-integer v0.1.46 [INFO] [stderr] Compiling serde_json v1.0.141 [INFO] [stderr] Checking lock_api v0.4.13 [INFO] [stderr] Checking parking_lot_core v0.9.11 [INFO] [stderr] Checking form_urlencoded v1.2.1 [INFO] [stderr] Compiling ref-cast v1.0.24 [INFO] [stderr] Checking bitflags v2.9.1 [INFO] [stderr] Checking num-bigint v0.4.6 [INFO] [stderr] Checking rand_core v0.9.3 [INFO] [stderr] Checking webpki-roots v1.0.2 [INFO] [stderr] Checking aho-corasick v1.1.3 [INFO] [stderr] Compiling libudev-sys v0.1.4 [INFO] [stderr] Compiling ahash v0.8.12 [INFO] [stderr] Checking generic-array v0.14.7 [INFO] [stderr] Compiling anyhow v1.0.98 [INFO] [stderr] Checking rand_chacha v0.9.0 [INFO] [stderr] Checking num-iter v0.1.45 [INFO] [stderr] Checking num-complex v0.4.6 [INFO] [stderr] Checking sync_wrapper v1.0.2 [INFO] [stderr] Checking borrow-or-share v0.2.2 [INFO] [stderr] Compiling syn v1.0.109 [INFO] [stderr] Checking xml-rs v0.8.27 [INFO] [stderr] Checking bit-vec v0.8.0 [INFO] [stderr] Checking crypto-common v0.1.6 [INFO] [stderr] Checking block-buffer v0.10.4 [INFO] [stderr] Checking block-padding v0.3.3 [INFO] [stderr] Compiling ring v0.17.14 [INFO] [stderr] Checking regex-automata v0.4.9 [INFO] [stderr] Checking digest v0.10.7 [INFO] [stderr] Checking inout v0.1.4 [INFO] [stderr] Checking cipher v0.4.4 [INFO] [stderr] Checking bit-set v0.8.0 [INFO] [stderr] Checking sha1 v0.10.6 [INFO] [stderr] Compiling hidapi v2.6.3 [INFO] [stderr] Checking rand v0.9.2 [INFO] [stderr] Checking parking_lot v0.12.4 [INFO] [stderr] Checking rand_core v0.6.4 [INFO] [stderr] Checking ordered-float v2.10.1 [INFO] [stderr] Checking num-rational v0.4.2 [INFO] [stderr] Checking iri-string v0.7.8 [INFO] [stderr] Checking iana-time-zone v0.1.63 [INFO] [stderr] Checking chrono v0.4.41 [INFO] [stderr] Checking nix v0.26.4 [INFO] [stderr] Checking rand_chacha v0.3.1 [INFO] [stderr] Checking libudev v0.3.0 [INFO] [stderr] Checking num v0.4.3 [INFO] [stderr] Checking fraction v0.15.3 [INFO] [stderr] Checking webpki-roots v0.26.11 [INFO] [stderr] Checking tracing-log v0.2.0 [INFO] [stderr] Checking num-cmp v0.1.0 [INFO] [stderr] Checking static_assertions v1.1.0 [INFO] [stderr] Checking bytecount v0.6.9 [INFO] [stderr] Checking hashbrown v0.15.4 [INFO] [stderr] Checking rand v0.8.5 [INFO] [stderr] Checking aes v0.8.4 [INFO] [stderr] Checking ecb v0.1.2 [INFO] [stderr] Checking sha2 v0.10.9 [INFO] [stderr] Checking indexmap v2.10.0 [INFO] [stderr] Checking instant v0.1.13 [INFO] [stderr] Checking strum v0.27.2 [INFO] [stderr] Checking unsafe-libyaml v0.2.11 [INFO] [stderr] Compiling synstructure v0.13.2 [INFO] [stderr] Checking regex v1.11.1 [INFO] [stderr] Checking fancy-regex v0.14.0 [INFO] [stderr] Compiling test-case-core v3.3.1 [INFO] [stderr] Compiling proc-macro-error2 v2.0.1 [INFO] [stderr] Compiling serde_derive v1.0.219 [INFO] [stderr] Compiling zerofrom-derive v0.1.6 [INFO] [stderr] Compiling yoke-derive v0.8.0 [INFO] [stderr] Compiling zerovec-derive v0.11.1 [INFO] [stderr] Compiling futures-macro v0.3.31 [INFO] [stderr] Compiling tokio-macros v2.5.0 [INFO] [stderr] Compiling displaydoc v0.2.5 [INFO] [stderr] Compiling thiserror-impl v2.0.12 [INFO] [stderr] Checking tokio v1.46.1 [INFO] [stderr] Checking futures-util v0.3.31 [INFO] [stderr] Checking rustls-webpki v0.103.4 [INFO] [stderr] Compiling tracing-attributes v0.1.30 [INFO] [stderr] Compiling ref-cast-impl v1.0.24 [INFO] [stderr] Checking zerofrom v0.1.6 [INFO] [stderr] Checking yoke v0.8.0 [INFO] [stderr] Compiling thiserror-impl v1.0.69 [INFO] [stderr] Compiling async-stream-impl v0.3.6 [INFO] [stderr] Checking zerovec v0.11.2 [INFO] [stderr] Checking zerotrie v0.2.2 [INFO] [stderr] Compiling pin-project-internal v1.1.10 [INFO] [stderr] Checking tracing v0.1.41 [INFO] [stderr] Checking async-stream v0.3.6 [INFO] [stderr] Checking unescaper v0.1.6 [INFO] [stderr] Compiling async-trait v0.1.88 [INFO] [stderr] Checking thiserror v1.0.69 [INFO] [stderr] Compiling prost-derive v0.13.5 [INFO] [stderr] Checking tinystr v0.8.1 [INFO] [stderr] Checking icu_locale_core v2.0.0 [INFO] [stderr] Checking potential_utf v0.1.2 [INFO] [stderr] Checking pin-project v1.1.10 [INFO] [stderr] Checking dbus v0.9.7 [INFO] [stderr] Checking icu_collections v2.0.0 [INFO] [stderr] Checking futures-executor v0.3.31 [INFO] [stderr] Checking futures v0.3.31 [INFO] [stderr] Checking tracing-futures v0.2.5 [INFO] [stderr] Checking serialport v4.7.2 [INFO] [stderr] Compiling derivative v2.2.0 [INFO] [stderr] Checking icu_provider v2.0.0 [INFO] [stderr] Checking icu_normalizer v2.0.0 [INFO] [stderr] Checking icu_properties v2.0.1 [INFO] [stderr] Checking tokio-util v0.7.15 [INFO] [stderr] Checking hyper v1.6.0 [INFO] [stderr] Checking tokio-stream v0.1.17 [INFO] [stderr] Checking tower v0.5.2 [INFO] [stderr] Checking prost v0.13.5 [INFO] [stderr] Checking tower-http v0.6.6 [INFO] [stderr] Checking tokio-rustls v0.26.2 [INFO] [stderr] Checking hyper-util v0.1.15 [INFO] [stderr] Compiling test-case-macros v3.3.1 [INFO] [stderr] Compiling buttplug_derive v0.8.1 [INFO] [stderr] Compiling serde_repr v0.1.20 [INFO] [stderr] Checking idna_adapter v1.2.1 [INFO] [stderr] Compiling strum_macros v0.27.2 [INFO] [stderr] Checking idna v1.0.3 [INFO] [stderr] Compiling getset v0.1.6 [INFO] [stderr] Checking test-case v3.3.1 [INFO] [stderr] Checking tokio-test v0.4.4 [INFO] [stderr] Checking url v2.5.4 [INFO] [stderr] Checking dbus-tokio v0.7.6 [INFO] [stderr] Checking bluez-generated v0.4.0 [INFO] [stderr] Checking hyper-rustls v0.27.7 [INFO] [stderr] Checking tungstenite v0.26.2 [INFO] [stderr] Checking uuid v1.17.0 [INFO] [stderr] Checking fluent-uri v0.3.2 [INFO] [stderr] Checking serde-xml-rs v0.8.1 [INFO] [stderr] Checking email_address v0.2.9 [INFO] [stderr] Checking serde_urlencoded v0.7.1 [INFO] [stderr] Checking dashmap v6.1.0 [INFO] [stderr] Checking serde-value v0.7.0 [INFO] [stderr] Checking uuid-simd v0.8.0 [INFO] [stderr] Checking tracing-serde v0.2.0 [INFO] [stderr] Checking reqwest v0.12.22 [INFO] [stderr] Checking tokio-tungstenite v0.26.2 [INFO] [stderr] Checking os_info v3.12.0 [INFO] [stderr] Checking bluez-async v0.8.2 [INFO] [stderr] Checking serde_yaml v0.9.34+deprecated [INFO] [stderr] Checking referencing v0.30.0 [INFO] [stderr] Checking tracing-subscriber v0.3.19 [INFO] [stderr] Checking serde-aux v4.7.0 [INFO] [stderr] Checking btleplug v0.11.8 [INFO] [stderr] Checking jsonschema v0.30.0 [INFO] [stderr] Checking buttplug v9.0.9 (/opt/rustwide/workdir) [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/core/message/client_device_message_attributes.rs:372:9 [INFO] [stdout] | [INFO] [stdout] 372 | step_count: step_count, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `step_count` [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/device/configuration/device_definitions.rs:91:9 [INFO] [stdout] | [INFO] [stdout] 91 | index: index, [INFO] [stdout] | ^^^^^^^^^^^^ help: replace it with: `index` [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: operator precedence might not be obvious [INFO] [stdout] --> src/server/device/protocol/galaku.rs:65:13 [INFO] [stdout] | [INFO] [stdout] 65 | let u = data[i] as i32 - a as i32 ^ data[0] as i32 ^ a as i32; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider parenthesizing your expression: `(data[i] as i32 - a as i32) ^ data[0] as i32` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stdout] = note: `#[warn(clippy::precedence)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/server/device/protocol/hismith.rs:40:26 [INFO] [stdout] | [INFO] [stdout] 40 | const LEGACY_HISMITHS: [&'static str; 6] = ["1001", "1002", "1003", "3001", "2001", "1006"]; [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/core/message/client_device_message_attributes.rs:372:9 [INFO] [stdout] | [INFO] [stdout] 372 | step_count: step_count, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `step_count` [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: this is a decimal constant [INFO] [stdout] --> src/server/device/protocol/svakom_dice.rs:33:32 [INFO] [stdout] | [INFO] [stdout] 33 | [0x55, 0x04, 0x00, 0x00, 01, scalar as u8, 0xaa].to_vec(), [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#zero_prefixed_literal [INFO] [stdout] = note: `#[warn(clippy::zero_prefixed_literal)]` on by default [INFO] [stdout] help: if you mean to use a decimal constant, remove the `0` to avoid confusion [INFO] [stdout] | [INFO] [stdout] 33 - [0x55, 0x04, 0x00, 0x00, 01, scalar as u8, 0xaa].to_vec(), [INFO] [stdout] 33 + [0x55, 0x04, 0x00, 0x00, 1, scalar as u8, 0xaa].to_vec(), [INFO] [stdout] | [INFO] [stdout] help: if you mean to use an octal constant, use `0o` [INFO] [stdout] | [INFO] [stdout] 33 | [0x55, 0x04, 0x00, 0x00, 0o1, scalar as u8, 0xaa].to_vec(), [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/server/device/server_device_manager_event_loop.rs:68:7 [INFO] [stdout] | [INFO] [stdout] 68 | device_config_manager: device_config_manager, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `device_config_manager` [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/server_builder.rs:75:7 [INFO] [stdout] | [INFO] [stdout] 75 | device_manager: device_manager, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `device_manager` [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/device/configuration/device_definitions.rs:91:9 [INFO] [stdout] | [INFO] [stdout] 91 | index: index, [INFO] [stdout] | ^^^^^^^^^^^^ help: replace it with: `index` [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: operator precedence might not be obvious [INFO] [stdout] --> src/server/device/protocol/galaku.rs:65:13 [INFO] [stdout] | [INFO] [stdout] 65 | let u = data[i] as i32 - a as i32 ^ data[0] as i32 ^ a as i32; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider parenthesizing your expression: `(data[i] as i32 - a as i32) ^ data[0] as i32` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#precedence [INFO] [stdout] = note: `#[warn(clippy::precedence)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/server/device/protocol/hismith.rs:40:26 [INFO] [stdout] | [INFO] [stdout] 40 | const LEGACY_HISMITHS: [&'static str; 6] = ["1001", "1002", "1003", "3001", "2001", "1006"]; [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: this is a decimal constant [INFO] [stdout] --> src/server/device/protocol/svakom_dice.rs:33:32 [INFO] [stdout] | [INFO] [stdout] 33 | [0x55, 0x04, 0x00, 0x00, 01, scalar as u8, 0xaa].to_vec(), [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#zero_prefixed_literal [INFO] [stdout] = note: `#[warn(clippy::zero_prefixed_literal)]` on by default [INFO] [stdout] help: if you mean to use a decimal constant, remove the `0` to avoid confusion [INFO] [stdout] | [INFO] [stdout] 33 - [0x55, 0x04, 0x00, 0x00, 01, scalar as u8, 0xaa].to_vec(), [INFO] [stdout] 33 + [0x55, 0x04, 0x00, 0x00, 1, scalar as u8, 0xaa].to_vec(), [INFO] [stdout] | [INFO] [stdout] help: if you mean to use an octal constant, use `0o` [INFO] [stdout] | [INFO] [stdout] 33 | [0x55, 0x04, 0x00, 0x00, 0o1, scalar as u8, 0xaa].to_vec(), [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/server/device/server_device_manager_event_loop.rs:68:7 [INFO] [stdout] | [INFO] [stdout] 68 | device_config_manager: device_config_manager, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `device_config_manager` [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/server_builder.rs:75:7 [INFO] [stdout] | [INFO] [stdout] 75 | device_manager: device_manager, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `device_manager` [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: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/client/device.rs:311:41 [INFO] [stdout] | [INFO] [stdout] 311 | scalar_vec = Vec::with_capacity(map.len() as usize); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `map.len()` [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: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/client/device.rs:331:41 [INFO] [stdout] | [INFO] [stdout] 331 | scalar_vec = Vec::with_capacity(vec.len() as usize); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `vec.len()` [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: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/client/device.rs:395:41 [INFO] [stdout] | [INFO] [stdout] 395 | scalar_vec = Vec::with_capacity(map.len() as usize); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `map.len()` [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: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/client/device.rs:411:41 [INFO] [stdout] | [INFO] [stdout] 411 | scalar_vec = Vec::with_capacity(vec.len() as usize); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `vec.len()` [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: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/client/device.rs:453:41 [INFO] [stdout] | [INFO] [stdout] 453 | linear_vec = Vec::with_capacity(map.len() as usize); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `map.len()` [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: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/client/device.rs:469:41 [INFO] [stdout] | [INFO] [stdout] 469 | linear_vec = Vec::with_capacity(vec.len() as usize); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `vec.len()` [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: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/client/device.rs:511:41 [INFO] [stdout] | [INFO] [stdout] 511 | rotate_vec = Vec::with_capacity(map.len() as usize); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `map.len()` [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: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/client/device.rs:527:41 [INFO] [stdout] | [INFO] [stdout] 527 | rotate_vec = Vec::with_capacity(vec.len() as usize); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `vec.len()` [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: doc list item without indentation [INFO] [stdout] --> src/client/mod.rs:103:5 [INFO] [stdout] | [INFO] [stdout] 103 | /// client and the server, like a network connection issue. [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] 103 | /// client and the server, like a network connection issue. [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this lifetime isn't used in the impl [INFO] [stdout] --> src/core/connector/in_process_connector.rs:84:6 [INFO] [stdout] | [INFO] [stdout] 84 | impl<'a> ButtplugInProcessClientConnector { [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stdout] = note: `#[warn(clippy::extra_unused_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of a fallible conversion when an infallible one could be used [INFO] [stdout] --> src/core/connector/in_process_connector.rs:159:8 [INFO] [stdout] | [INFO] [stdout] 159 | .try_into() [INFO] [stdout] | ________^ [INFO] [stdout] 160 | | .expect("This is in-process so message conversions will always work."); [INFO] [stdout] | |____________________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = note: converting `ButtplugClientMessageV3` to `ButtplugClientMessageVariant` cannot fail [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fallible_conversions [INFO] [stdout] = note: `#[warn(clippy::unnecessary_fallible_conversions)]` on by default [INFO] [stdout] help: use [INFO] [stdout] | [INFO] [stdout] 159 - .try_into() [INFO] [stdout] 160 - .expect("This is in-process so message conversions will always work."); [INFO] [stdout] 159 + .into(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this call to `clone` can be replaced with `std::slice::from_ref` [INFO] [stdout] --> src/core/connector/remote_connector.rs:146:55 [INFO] [stdout] | [INFO] [stdout] 146 | let serialized_msg = serializer.serialize(&[msg.clone()]); [INFO] [stdout] | ^^^^^^^^^^^^^^ help: try: `std::slice::from_ref(msg)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cloned_ref_to_slice_refs [INFO] [stdout] = note: `#[warn(clippy::cloned_ref_to_slice_refs)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `default` to create a unit struct [INFO] [stdout] --> src/core/connector/remote_connector.rs:225:25 [INFO] [stdout] | [INFO] [stdout] 225 | dummy_serializer: PhantomData::default(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#default_constructed_unit_structs [INFO] [stdout] = note: `#[warn(clippy::default_constructed_unit_structs)]` on by default [INFO] [stdout] help: remove this call to `default` [INFO] [stdout] | [INFO] [stdout] 225 - dummy_serializer: PhantomData::default(), [INFO] [stdout] 225 + dummy_serializer: PhantomData, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/core/message/client_device_message_attributes.rs:195:21 [INFO] [stdout] | [INFO] [stdout] 195 | let raw_attrs = if let Some(raw_feature) = features.iter().find(|f| f.raw().is_some()) { [INFO] [stdout] | _____________________^ [INFO] [stdout] 196 | | Some(RawDeviceMessageAttributesV2::new( [INFO] [stdout] 197 | | raw_feature.raw().as_ref().unwrap().endpoints(), [INFO] [stdout] 198 | | )) [INFO] [stdout] 199 | | } else { [INFO] [stdout] 200 | | None [INFO] [stdout] 201 | | }; [INFO] [stdout] | |_____^ [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] help: try [INFO] [stdout] | [INFO] [stdout] 195 ~ let raw_attrs = features.iter().find(|f| f.raw().is_some()).map(|raw_feature| RawDeviceMessageAttributesV2::new( [INFO] [stdout] 196 + raw_feature.raw().as_ref().unwrap().endpoints(), [INFO] [stdout] 197 ~ )); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/core/message/client_device_message_attributes.rs:377:11 [INFO] [stdout] | [INFO] [stdout] 377 | Err(format!( [INFO] [stdout] | ___________^ [INFO] [stdout] 378 | | "Cannot produce a GenericDeviceMessageAttribute from a feature with no actuator member" [INFO] [stdout] 379 | | )) [INFO] [stdout] | |_______^ help: consider using `.to_string()`: `"Cannot produce a GenericDeviceMessageAttribute from a feature with no actuator member".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: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/core/message/device_added.rs:56:22 [INFO] [stdout] | [INFO] [stdout] 56 | device_features: &Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 56 ~ device_features: &[DeviceFeature], [INFO] [stdout] 57 | ) -> Self { [INFO] [stdout] ... [INFO] [stdout] 63 | device_message_timing_gap: *device_message_timing_gap, [INFO] [stdout] 64 ~ device_features: device_features.to_owned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/core/message/device_added.rs:86:7 [INFO] [stdout] | [INFO] [stdout] 86 | &value.device_name(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: change this to: `value.device_name()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/core/message/device_added.rs:87:7 [INFO] [stdout] | [INFO] [stdout] 87 | &value.device_display_name(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `value.device_display_name()` [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: useless use of `format!` [INFO] [stdout] --> src/core/message/device_feature.rs:225:57 [INFO] [stdout] | [INFO] [stdout] 225 | Err(ButtplugDeviceError::DeviceConfigurationError(format!( [INFO] [stdout] | _________________________________________________________^ [INFO] [stdout] 226 | | "Step range out of order, must be start <= x <= end." [INFO] [stdout] 227 | | ))) [INFO] [stdout] | |_______^ help: consider using `.to_string()`: `"Step range out of order, must be start <= x <= end.".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] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/core/message/device_feature.rs:229:57 [INFO] [stdout] | [INFO] [stdout] 229 | Err(ButtplugDeviceError::DeviceConfigurationError(format!( [INFO] [stdout] | _________________________________________________________^ [INFO] [stdout] 230 | | "Step limit out of order, must be start <= x <= end." [INFO] [stdout] 231 | | ))) [INFO] [stdout] | |_______^ help: consider using `.to_string()`: `"Step limit out of order, must be start <= x <= end.".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] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/core/message/device_feature.rs:253:18 [INFO] [stdout] | [INFO] [stdout] 253 | value_range: &Vec>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 253 ~ value_range: &[RangeInclusive], [INFO] [stdout] 254 | messages: &HashSet, [INFO] [stdout] 255 | ) -> Self { [INFO] [stdout] 256 | Self { [INFO] [stdout] 257 ~ value_range: value_range.to_owned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::message::device_message_info::DeviceMessageInfoV2` [INFO] [stdout] --> src/core/message/device_list.rs:128:19 [INFO] [stdout] | [INFO] [stdout] 128 | let dmiv2 = DeviceMessageInfoV2::from(d); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `DeviceMessageInfoV2::from()`: `d` [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: useless conversion to the same type: `core::message::device_message_info::DeviceMessageInfoV1` [INFO] [stdout] --> src/core/message/device_list.rs:161:19 [INFO] [stdout] | [INFO] [stdout] 161 | let dmiv1 = DeviceMessageInfoV1::from(d); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `DeviceMessageInfoV1::from()`: `d` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/core/message/device_message_info.rs:78:7 [INFO] [stdout] | [INFO] [stdout] 78 | &value.device_name(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: change this to: `value.device_name()` [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/core/message/device_message_info.rs:79:7 [INFO] [stdout] | [INFO] [stdout] 79 | &value.device_display_name(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `value.device_display_name()` [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: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/client/device.rs:311:41 [INFO] [stdout] | [INFO] [stdout] 311 | scalar_vec = Vec::with_capacity(map.len() as usize); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `map.len()` [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: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/client/device.rs:331:41 [INFO] [stdout] | [INFO] [stdout] 331 | scalar_vec = Vec::with_capacity(vec.len() as usize); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `vec.len()` [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: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/client/device.rs:395:41 [INFO] [stdout] | [INFO] [stdout] 395 | scalar_vec = Vec::with_capacity(map.len() as usize); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `map.len()` [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: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/client/device.rs:411:41 [INFO] [stdout] | [INFO] [stdout] 411 | scalar_vec = Vec::with_capacity(vec.len() as usize); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `vec.len()` [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: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/client/device.rs:453:41 [INFO] [stdout] | [INFO] [stdout] 453 | linear_vec = Vec::with_capacity(map.len() as usize); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `map.len()` [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: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/client/device.rs:469:41 [INFO] [stdout] | [INFO] [stdout] 469 | linear_vec = Vec::with_capacity(vec.len() as usize); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `vec.len()` [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: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/client/device.rs:511:41 [INFO] [stdout] | [INFO] [stdout] 511 | rotate_vec = Vec::with_capacity(map.len() as usize); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `map.len()` [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: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/client/device.rs:527:41 [INFO] [stdout] | [INFO] [stdout] 527 | rotate_vec = Vec::with_capacity(vec.len() as usize); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `vec.len()` [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: doc list item without indentation [INFO] [stdout] --> src/client/mod.rs:103:5 [INFO] [stdout] | [INFO] [stdout] 103 | /// client and the server, like a network connection issue. [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] 103 | /// client and the server, like a network connection issue. [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this lifetime isn't used in the impl [INFO] [stdout] --> src/core/connector/in_process_connector.rs:84:6 [INFO] [stdout] | [INFO] [stdout] 84 | impl<'a> ButtplugInProcessClientConnector { [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stdout] = note: `#[warn(clippy::extra_unused_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of a fallible conversion when an infallible one could be used [INFO] [stdout] --> src/core/connector/in_process_connector.rs:159:8 [INFO] [stdout] | [INFO] [stdout] 159 | .try_into() [INFO] [stdout] | ________^ [INFO] [stdout] 160 | | .expect("This is in-process so message conversions will always work."); [INFO] [stdout] | |____________________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = note: converting `ButtplugClientMessageV3` to `ButtplugClientMessageVariant` cannot fail [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fallible_conversions [INFO] [stdout] = note: `#[warn(clippy::unnecessary_fallible_conversions)]` on by default [INFO] [stdout] help: use [INFO] [stdout] | [INFO] [stdout] 159 - .try_into() [INFO] [stdout] 160 - .expect("This is in-process so message conversions will always work."); [INFO] [stdout] 159 + .into(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this call to `clone` can be replaced with `std::slice::from_ref` [INFO] [stdout] --> src/core/connector/remote_connector.rs:146:55 [INFO] [stdout] | [INFO] [stdout] 146 | let serialized_msg = serializer.serialize(&[msg.clone()]); [INFO] [stdout] | ^^^^^^^^^^^^^^ help: try: `std::slice::from_ref(msg)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cloned_ref_to_slice_refs [INFO] [stdout] = note: `#[warn(clippy::cloned_ref_to_slice_refs)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `default` to create a unit struct [INFO] [stdout] --> src/core/connector/remote_connector.rs:225:25 [INFO] [stdout] | [INFO] [stdout] 225 | dummy_serializer: PhantomData::default(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#default_constructed_unit_structs [INFO] [stdout] = note: `#[warn(clippy::default_constructed_unit_structs)]` on by default [INFO] [stdout] help: remove this call to `default` [INFO] [stdout] | [INFO] [stdout] 225 - dummy_serializer: PhantomData::default(), [INFO] [stdout] 225 + dummy_serializer: PhantomData, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::message::error::ErrorV0` [INFO] [stdout] --> src/core/message/serializer/json_serializer.rs:225:17 [INFO] [stdout] | [INFO] [stdout] 225 | / message::ErrorV0::from(ButtplugError::from( [INFO] [stdout] 226 | | ButtplugMessageError::MessageConversionError(format!( [INFO] [stdout] 227 | | "Message {:?} not in Spec V0! This is a server bug.", [INFO] [stdout] 228 | | msg [INFO] [stdout] 229 | | )), [INFO] [stdout] 230 | | )) [INFO] [stdout] 231 | | .into(), [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `.into()` [INFO] [stdout] | [INFO] [stdout] 225 ~ message::ErrorV0::from(ButtplugError::from( [INFO] [stdout] 226 + ButtplugMessageError::MessageConversionError(format!( [INFO] [stdout] 227 + "Message {:?} not in Spec V0! This is a server bug.", [INFO] [stdout] 228 + msg [INFO] [stdout] 229 + )), [INFO] [stdout] 230 ~ )), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::message::error::ErrorV0` [INFO] [stdout] --> src/core/message/serializer/json_serializer.rs:243:17 [INFO] [stdout] | [INFO] [stdout] 243 | / message::ErrorV0::from(ButtplugError::from( [INFO] [stdout] 244 | | ButtplugMessageError::MessageConversionError(format!( [INFO] [stdout] 245 | | "Message {:?} not in Spec V1! This is a server bug.", [INFO] [stdout] 246 | | msg [INFO] [stdout] 247 | | )), [INFO] [stdout] 248 | | )) [INFO] [stdout] 249 | | .into(), [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `.into()` [INFO] [stdout] | [INFO] [stdout] 243 ~ message::ErrorV0::from(ButtplugError::from( [INFO] [stdout] 244 + ButtplugMessageError::MessageConversionError(format!( [INFO] [stdout] 245 + "Message {:?} not in Spec V1! This is a server bug.", [INFO] [stdout] 246 + msg [INFO] [stdout] 247 + )), [INFO] [stdout] 248 ~ )), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::message::error::ErrorV0` [INFO] [stdout] --> src/core/message/serializer/json_serializer.rs:261:17 [INFO] [stdout] | [INFO] [stdout] 261 | / message::ErrorV0::from(ButtplugError::from( [INFO] [stdout] 262 | | ButtplugMessageError::MessageConversionError(format!( [INFO] [stdout] 263 | | "Message {:?} not in Spec V2! This is a server bug.", [INFO] [stdout] 264 | | msg [INFO] [stdout] 265 | | )), [INFO] [stdout] 266 | | )) [INFO] [stdout] 267 | | .into(), [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `.into()` [INFO] [stdout] | [INFO] [stdout] 261 ~ message::ErrorV0::from(ButtplugError::from( [INFO] [stdout] 262 + ButtplugMessageError::MessageConversionError(format!( [INFO] [stdout] 263 + "Message {:?} not in Spec V2! This is a server bug.", [INFO] [stdout] 264 + msg [INFO] [stdout] 265 + )), [INFO] [stdout] 266 ~ )), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::message::error::ErrorV0` [INFO] [stdout] --> src/core/message/serializer/json_serializer.rs:279:17 [INFO] [stdout] | [INFO] [stdout] 279 | / message::ErrorV0::from(ButtplugError::from( [INFO] [stdout] 280 | | ButtplugMessageError::MessageConversionError(format!( [INFO] [stdout] 281 | | "Message {:?} not in Spec V3! This is a server bug.", [INFO] [stdout] 282 | | msg [INFO] [stdout] 283 | | )), [INFO] [stdout] 284 | | )) [INFO] [stdout] 285 | | .into(), [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `.into()` [INFO] [stdout] | [INFO] [stdout] 279 ~ message::ErrorV0::from(ButtplugError::from( [INFO] [stdout] 280 + ButtplugMessageError::MessageConversionError(format!( [INFO] [stdout] 281 + "Message {:?} not in Spec V3! This is a server bug.", [INFO] [stdout] 282 + msg [INFO] [stdout] 283 + )), [INFO] [stdout] 284 ~ )), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::message::error::ErrorV0` [INFO] [stdout] --> src/core/message/serializer/json_serializer.rs:297:17 [INFO] [stdout] | [INFO] [stdout] 297 | / message::ErrorV0::from(ButtplugError::from( [INFO] [stdout] 298 | | ButtplugMessageError::MessageConversionError(format!( [INFO] [stdout] 299 | | "Message {:?} not in Spec V4! This is a server bug.", [INFO] [stdout] 300 | | msg [INFO] [stdout] 301 | | )), [INFO] [stdout] 302 | | )) [INFO] [stdout] 303 | | .into(), [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `.into()` [INFO] [stdout] | [INFO] [stdout] 297 ~ message::ErrorV0::from(ButtplugError::from( [INFO] [stdout] 298 + ButtplugMessageError::MessageConversionError(format!( [INFO] [stdout] 299 + "Message {:?} not in Spec V4! This is a server bug.", [INFO] [stdout] 300 + msg [INFO] [stdout] 301 + )), [INFO] [stdout] 302 ~ )), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/core/message/client_device_message_attributes.rs:195:21 [INFO] [stdout] | [INFO] [stdout] 195 | let raw_attrs = if let Some(raw_feature) = features.iter().find(|f| f.raw().is_some()) { [INFO] [stdout] | _____________________^ [INFO] [stdout] 196 | | Some(RawDeviceMessageAttributesV2::new( [INFO] [stdout] 197 | | raw_feature.raw().as_ref().unwrap().endpoints(), [INFO] [stdout] 198 | | )) [INFO] [stdout] 199 | | } else { [INFO] [stdout] 200 | | None [INFO] [stdout] 201 | | }; [INFO] [stdout] | |_____^ [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] help: try [INFO] [stdout] | [INFO] [stdout] 195 ~ let raw_attrs = features.iter().find(|f| f.raw().is_some()).map(|raw_feature| RawDeviceMessageAttributesV2::new( [INFO] [stdout] 196 + raw_feature.raw().as_ref().unwrap().endpoints(), [INFO] [stdout] 197 ~ )); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/core/message/client_device_message_attributes.rs:377:11 [INFO] [stdout] | [INFO] [stdout] 377 | Err(format!( [INFO] [stdout] | ___________^ [INFO] [stdout] 378 | | "Cannot produce a GenericDeviceMessageAttribute from a feature with no actuator member" [INFO] [stdout] 379 | | )) [INFO] [stdout] | |_______^ help: consider using `.to_string()`: `"Cannot produce a GenericDeviceMessageAttribute from a feature with no actuator member".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/core/message/mod.rs:590:12 [INFO] [stdout] | [INFO] [stdout] 590 | _ => return, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: replace `return` with a unit value [INFO] [stdout] | [INFO] [stdout] 590 - _ => return, [INFO] [stdout] 590 + _ => (), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/core/message/device_added.rs:56:22 [INFO] [stdout] | [INFO] [stdout] 56 | device_features: &Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 56 ~ device_features: &[DeviceFeature], [INFO] [stdout] 57 | ) -> Self { [INFO] [stdout] ... [INFO] [stdout] 63 | device_message_timing_gap: *device_message_timing_gap, [INFO] [stdout] 64 ~ device_features: device_features.to_owned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/core/message/device_added.rs:86:7 [INFO] [stdout] | [INFO] [stdout] 86 | &value.device_name(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: change this to: `value.device_name()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/core/message/device_added.rs:87:7 [INFO] [stdout] | [INFO] [stdout] 87 | &value.device_display_name(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `value.device_display_name()` [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/core/message/mod.rs:658:12 [INFO] [stdout] | [INFO] [stdout] 658 | _ => return, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: replace `return` with a unit value [INFO] [stdout] | [INFO] [stdout] 658 - _ => return, [INFO] [stdout] 658 + _ => (), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/core/message/device_feature.rs:225:57 [INFO] [stdout] | [INFO] [stdout] 225 | Err(ButtplugDeviceError::DeviceConfigurationError(format!( [INFO] [stdout] | _________________________________________________________^ [INFO] [stdout] 226 | | "Step range out of order, must be start <= x <= end." [INFO] [stdout] 227 | | ))) [INFO] [stdout] | |_______^ help: consider using `.to_string()`: `"Step range out of order, must be start <= x <= end.".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] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/core/message/device_feature.rs:229:57 [INFO] [stdout] | [INFO] [stdout] 229 | Err(ButtplugDeviceError::DeviceConfigurationError(format!( [INFO] [stdout] | _________________________________________________________^ [INFO] [stdout] 230 | | "Step limit out of order, must be start <= x <= end." [INFO] [stdout] 231 | | ))) [INFO] [stdout] | |_______^ help: consider using `.to_string()`: `"Step limit out of order, must be start <= x <= end.".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] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/core/message/device_feature.rs:253:18 [INFO] [stdout] | [INFO] [stdout] 253 | value_range: &Vec>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 253 ~ value_range: &[RangeInclusive], [INFO] [stdout] 254 | messages: &HashSet, [INFO] [stdout] 255 | ) -> Self { [INFO] [stdout] 256 | Self { [INFO] [stdout] 257 ~ value_range: value_range.to_owned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::message::device_message_info::DeviceMessageInfoV2` [INFO] [stdout] --> src/core/message/device_list.rs:128:19 [INFO] [stdout] | [INFO] [stdout] 128 | let dmiv2 = DeviceMessageInfoV2::from(d); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `DeviceMessageInfoV2::from()`: `d` [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: useless conversion to the same type: `core::message::device_message_info::DeviceMessageInfoV1` [INFO] [stdout] --> src/core/message/device_list.rs:161:19 [INFO] [stdout] | [INFO] [stdout] 161 | let dmiv1 = DeviceMessageInfoV1::from(d); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `DeviceMessageInfoV1::from()`: `d` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/core/message/device_message_info.rs:78:7 [INFO] [stdout] | [INFO] [stdout] 78 | &value.device_name(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: change this to: `value.device_name()` [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/core/message/device_message_info.rs:79:7 [INFO] [stdout] | [INFO] [stdout] 79 | &value.device_display_name(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `value.device_display_name()` [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 `ButtplugDeviceMessageType` which implements the `Copy` trait [INFO] [stdout] --> src/server/device/configuration/device_definitions.rs:107:83 [INFO] [stdout] | [INFO] [stdout] 107 | if let Ok(actuator_msg_type) = ButtplugActuatorFeatureMessageType::try_from(msg_type.clone()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try dereferencing it: `*msg_type` [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 `ButtplugDeviceMessageType` which implements the `Copy` trait [INFO] [stdout] --> src/server/device/configuration/device_definitions.rs:115:52 [INFO] [stdout] | [INFO] [stdout] 115 | ButtplugSensorFeatureMessageType::try_from(msg_type.clone()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try dereferencing it: `*msg_type` [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: redundant pattern matching, consider using `is_ok()` [INFO] [stdout] --> src/server/device/configuration/device_definitions.rs:122:21 [INFO] [stdout] | [INFO] [stdout] 122 | } else if let Ok(_) = ButtplugRawFeatureMessageType::try_from(msg_type.clone()) { [INFO] [stdout] | -------^^^^^------------------------------------------------------------ help: try: `if ButtplugRawFeatureMessageType::try_from(msg_type.clone()).is_ok()` [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 `ButtplugDeviceMessageType` which implements the `Copy` trait [INFO] [stdout] --> src/server/device/configuration/device_definitions.rs:122:69 [INFO] [stdout] | [INFO] [stdout] 122 | } else if let Ok(_) = ButtplugRawFeatureMessageType::try_from(msg_type.clone()) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try dereferencing it: `*msg_type` [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: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/server/device/configuration/device_definitions.rs:123:16 [INFO] [stdout] | [INFO] [stdout] 123 | if let Some(_) = feature.raw() { [INFO] [stdout] | -------^^^^^^^---------------- help: try: `if feature.raw().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] [INFO] [stdout] [INFO] [stdout] warning: this `if` branch is empty [INFO] [stdout] --> src/server/device/configuration/mod.rs:378:5 [INFO] [stdout] | [INFO] [stdout] 378 | if !self.protocol_map.contains_key(protocol) {} [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can remove it: `!self.protocol_map.contains_key(protocol);` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_ifs [INFO] [stdout] = note: `#[warn(clippy::needless_ifs)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` branch is empty [INFO] [stdout] --> src/server/device/configuration/mod.rs:407:5 [INFO] [stdout] | [INFO] [stdout] 407 | if !self.protocol_map.contains_key(identifier.protocol()) {} [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can remove it: `!self.protocol_map.contains_key(identifier.protocol());` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_ifs [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/server/device/configuration/mod.rs:473:7 [INFO] [stdout] | [INFO] [stdout] 473 | index = index + 1; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: replace it with: `index += 1` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/server/device/configuration/mod.rs:543:7 [INFO] [stdout] | [INFO] [stdout] 543 | &identifier.protocol(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `identifier.protocol()` [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/device/configuration/mod.rs:544:7 [INFO] [stdout] | [INFO] [stdout] 544 | &identifier.identifier(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `identifier.identifier()` [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/device/configuration/mod.rs:553:39 [INFO] [stdout] | [INFO] [stdout] 553 | .get(&BaseDeviceIdentifier::new(&identifier.protocol(), &None)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `identifier.protocol()` [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: useless use of `format!` [INFO] [stdout] --> src/server/device/hardware/communication/lovense_connect_service/lovense_connect_service_hardware.rs:172:42 [INFO] [stdout] | [INFO] [stdout] 172 | res.text().await.unwrap_or(format!("no response")) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"no response".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] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::message::error::ErrorV0` [INFO] [stdout] --> src/core/message/serializer/json_serializer.rs:225:17 [INFO] [stdout] | [INFO] [stdout] 225 | / message::ErrorV0::from(ButtplugError::from( [INFO] [stdout] 226 | | ButtplugMessageError::MessageConversionError(format!( [INFO] [stdout] 227 | | "Message {:?} not in Spec V0! This is a server bug.", [INFO] [stdout] 228 | | msg [INFO] [stdout] 229 | | )), [INFO] [stdout] 230 | | )) [INFO] [stdout] 231 | | .into(), [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `.into()` [INFO] [stdout] | [INFO] [stdout] 225 ~ message::ErrorV0::from(ButtplugError::from( [INFO] [stdout] 226 + ButtplugMessageError::MessageConversionError(format!( [INFO] [stdout] 227 + "Message {:?} not in Spec V0! This is a server bug.", [INFO] [stdout] 228 + msg [INFO] [stdout] 229 + )), [INFO] [stdout] 230 ~ )), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::message::error::ErrorV0` [INFO] [stdout] --> src/core/message/serializer/json_serializer.rs:243:17 [INFO] [stdout] | [INFO] [stdout] 243 | / message::ErrorV0::from(ButtplugError::from( [INFO] [stdout] 244 | | ButtplugMessageError::MessageConversionError(format!( [INFO] [stdout] 245 | | "Message {:?} not in Spec V1! This is a server bug.", [INFO] [stdout] 246 | | msg [INFO] [stdout] 247 | | )), [INFO] [stdout] 248 | | )) [INFO] [stdout] 249 | | .into(), [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `.into()` [INFO] [stdout] | [INFO] [stdout] 243 ~ message::ErrorV0::from(ButtplugError::from( [INFO] [stdout] 244 + ButtplugMessageError::MessageConversionError(format!( [INFO] [stdout] 245 + "Message {:?} not in Spec V1! This is a server bug.", [INFO] [stdout] 246 + msg [INFO] [stdout] 247 + )), [INFO] [stdout] 248 ~ )), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::message::error::ErrorV0` [INFO] [stdout] --> src/core/message/serializer/json_serializer.rs:261:17 [INFO] [stdout] | [INFO] [stdout] 261 | / message::ErrorV0::from(ButtplugError::from( [INFO] [stdout] 262 | | ButtplugMessageError::MessageConversionError(format!( [INFO] [stdout] 263 | | "Message {:?} not in Spec V2! This is a server bug.", [INFO] [stdout] 264 | | msg [INFO] [stdout] 265 | | )), [INFO] [stdout] 266 | | )) [INFO] [stdout] 267 | | .into(), [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `.into()` [INFO] [stdout] | [INFO] [stdout] 261 ~ message::ErrorV0::from(ButtplugError::from( [INFO] [stdout] 262 + ButtplugMessageError::MessageConversionError(format!( [INFO] [stdout] 263 + "Message {:?} not in Spec V2! This is a server bug.", [INFO] [stdout] 264 + msg [INFO] [stdout] 265 + )), [INFO] [stdout] 266 ~ )), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::message::error::ErrorV0` [INFO] [stdout] --> src/core/message/serializer/json_serializer.rs:279:17 [INFO] [stdout] | [INFO] [stdout] 279 | / message::ErrorV0::from(ButtplugError::from( [INFO] [stdout] 280 | | ButtplugMessageError::MessageConversionError(format!( [INFO] [stdout] 281 | | "Message {:?} not in Spec V3! This is a server bug.", [INFO] [stdout] 282 | | msg [INFO] [stdout] 283 | | )), [INFO] [stdout] 284 | | )) [INFO] [stdout] 285 | | .into(), [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `.into()` [INFO] [stdout] | [INFO] [stdout] 279 ~ message::ErrorV0::from(ButtplugError::from( [INFO] [stdout] 280 + ButtplugMessageError::MessageConversionError(format!( [INFO] [stdout] 281 + "Message {:?} not in Spec V3! This is a server bug.", [INFO] [stdout] 282 + msg [INFO] [stdout] 283 + )), [INFO] [stdout] 284 ~ )), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::message::error::ErrorV0` [INFO] [stdout] --> src/core/message/serializer/json_serializer.rs:297:17 [INFO] [stdout] | [INFO] [stdout] 297 | / message::ErrorV0::from(ButtplugError::from( [INFO] [stdout] 298 | | ButtplugMessageError::MessageConversionError(format!( [INFO] [stdout] 299 | | "Message {:?} not in Spec V4! This is a server bug.", [INFO] [stdout] 300 | | msg [INFO] [stdout] 301 | | )), [INFO] [stdout] 302 | | )) [INFO] [stdout] 303 | | .into(), [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `.into()` [INFO] [stdout] | [INFO] [stdout] 297 ~ message::ErrorV0::from(ButtplugError::from( [INFO] [stdout] 298 + ButtplugMessageError::MessageConversionError(format!( [INFO] [stdout] 299 + "Message {:?} not in Spec V4! This is a server bug.", [INFO] [stdout] 300 + msg [INFO] [stdout] 301 + )), [INFO] [stdout] 302 ~ )), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_err()` [INFO] [stdout] --> src/core/message/serializer/json_serializer.rs:503:13 [INFO] [stdout] | [INFO] [stdout] 503 | assert!(matches!( [INFO] [stdout] | _____________^ [INFO] [stdout] 504 | | serializer.deserialize(&ButtplugSerializedMessage::Text(json.to_owned())), [INFO] [stdout] 505 | | Err(_) [INFO] [stdout] 506 | | )); [INFO] [stdout] | |_____^ help: try: `serializer.deserialize(&ButtplugSerializedMessage::Text(json.to_owned())).is_err()` [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: this assertion is always `false` [INFO] [stdout] --> src/core/message/serializer/json_serializer.rs:541:9 [INFO] [stdout] | [INFO] [stdout] 541 | assert!(false, "Wrong error!"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: replace this with `panic!()` or `unreachable!()` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assertions_on_constants [INFO] [stdout] = note: `#[warn(clippy::assertions_on_constants)]` 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/device/hardware/communication/hid/hid_comm_manager.rs:67:67 [INFO] [stdout] | [INFO] [stdout] 67 | let device_creator = HidHardwareConnector::new(api.clone(), &device); [INFO] [stdout] | ^^^^^^^ help: change this to: `device` [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/device/hardware/communication/hid/hid_device_impl.rs:80:7 [INFO] [stdout] | [INFO] [stdout] 80 | &self.device_info.product_string().unwrap(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `self.device_info.product_string().unwrap()` [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/device/hardware/communication/hid/hid_device_impl.rs:81:7 [INFO] [stdout] | [INFO] [stdout] 81 | &self.device_info.serial_number().unwrap(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `self.device_info.serial_number().unwrap()` [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/device/hardware/communication/hid/hidapi_async.rs:58:55 [INFO] [stdout] | [INFO] [stdout] 58 | inner: self.inner.as_ref().map(|dev| Arc::clone(&dev)), [INFO] [stdout] | ^^^^ help: change this to: `dev` [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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/server/device/hardware/communication/hid/hidapi_async.rs:73:9 [INFO] [stdout] | [INFO] [stdout] 73 | / match guard.read_thread.take() { [INFO] [stdout] 74 | | Some(jh) => match jh.join() { [INFO] [stdout] 75 | | Ok(_) => info!("device read thread joined"), [INFO] [stdout] 76 | | Err(_) => {} //error!("failed to join device read thread"), [INFO] [stdout] 77 | | }, [INFO] [stdout] 78 | | None => {} //error!("already joined"), [INFO] [stdout] 79 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = note: you might want to preserve the comments from inside the `match` [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] 73 ~ if let Some(jh) = guard.read_thread.take() { match jh.join() { [INFO] [stdout] 74 + Ok(_) => info!("device read thread joined"), [INFO] [stdout] 75 + Err(_) => {} //error!("failed to join device read thread"), [INFO] [stdout] 76 + } } [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/device/hardware/communication/hid/hidapi_async.rs:74:23 [INFO] [stdout] | [INFO] [stdout] 74 | Some(jh) => match jh.join() { [INFO] [stdout] | _______________________^ [INFO] [stdout] 75 | | Ok(_) => info!("device read thread joined"), [INFO] [stdout] 76 | | Err(_) => {} //error!("failed to join device read thread"), [INFO] [stdout] 77 | | }, [INFO] [stdout] | |___________^ help: try: `if let Ok(_) = jh.join() { info!("device read thread joined") }` [INFO] [stdout] | [INFO] [stdout] = note: you might want to preserve the comments from inside the `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_err()` [INFO] [stdout] --> src/server/device/hardware/communication/hid/hidapi_async.rs:129:26 [INFO] [stdout] | [INFO] [stdout] 129 | if let Err(_) = data_tx.send(Some(buf)) { [INFO] [stdout] | -------^^^^^^-------------------------- help: try: `if data_tx.send(Some(buf)).is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [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/device/hardware/communication/hid/hidapi_async.rs:182:22 [INFO] [stdout] | [INFO] [stdout] 182 | Ok(guard) => match guard.device.lock() { [INFO] [stdout] | ______________________^ [INFO] [stdout] 183 | | Ok(guard) => { [INFO] [stdout] 184 | | guard [INFO] [stdout] 185 | | .write(&buf[..]) [INFO] [stdout] ... | [INFO] [stdout] 189 | | Err(_) => {} //error!("{:?}", e), [INFO] [stdout] 190 | | }, [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = note: you might want to preserve the comments from inside the `match` [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] 182 ~ Ok(guard) => if let Ok(guard) = guard.device.lock() { [INFO] [stdout] 183 + guard [INFO] [stdout] 184 + .write(&buf[..]) [INFO] [stdout] 185 + .map_err(|e| io::Error::new(io::ErrorKind::Other, format!("hidapi failed: {}", e)))?; [INFO] [stdout] 186 + //debug!("Wrote: {:?}", &buf[0..max_len]); [INFO] [stdout] 187 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant slicing of the whole range [INFO] [stdout] --> src/server/device/hardware/communication/hid/hidapi_async.rs:185:22 [INFO] [stdout] | [INFO] [stdout] 185 | .write(&buf[..]) [INFO] [stdout] | ^^^^^^^^ help: use the original value instead: `buf` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_slicing [INFO] [stdout] = note: `#[warn(clippy::redundant_slicing)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/server/device/hardware/communication/hid/hidapi_async.rs:186:28 [INFO] [stdout] | [INFO] [stdout] 186 | .map_err(|e| io::Error::new(io::ErrorKind::Other, format!("hidapi failed: {}", e)))?; [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] 186 - .map_err(|e| io::Error::new(io::ErrorKind::Other, format!("hidapi failed: {}", e)))?; [INFO] [stdout] 186 + .map_err(|e| io::Error::other(format!("hidapi failed: {}", e)))?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/server/device/hardware/communication/hid/hidapi_async.rs:192:34 [INFO] [stdout] | [INFO] [stdout] 192 | return Poll::Ready(Err(io::Error::new( [INFO] [stdout] | __________________________________^ [INFO] [stdout] 193 | | io::ErrorKind::Other, [INFO] [stdout] 194 | | format!("Mutex broken: {:?}", e), [INFO] [stdout] 195 | | ))) [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] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 192 ~ return Poll::Ready(Err(io::Error::other( [INFO] [stdout] 193 ~ format!("Mutex broken: {:?}", e), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/server/device/hardware/communication/hid/hidapi_async.rs:237:20 [INFO] [stdout] | [INFO] [stdout] 237 | .map_err(|e| io::Error::new(io::ErrorKind::Other, format!("Mutex broken: {:?}", e)))?; [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] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 237 - .map_err(|e| io::Error::new(io::ErrorKind::Other, format!("Mutex broken: {:?}", e)))?; [INFO] [stdout] 237 + .map_err(|e| io::Error::other(format!("Mutex broken: {:?}", e)))?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/server/device/hardware/communication/hid/hidapi_async.rs:281:40 [INFO] [stdout] | [INFO] [stdout] 281 | return Poll::Ready(Err(io::Error::new( [INFO] [stdout] | ________________________________________^ [INFO] [stdout] 282 | | io::ErrorKind::Other, [INFO] [stdout] 283 | | "Inner channel dead", [INFO] [stdout] 284 | | ))); [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] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 281 ~ return Poll::Ready(Err(io::Error::other( [INFO] [stdout] 282 ~ "Inner channel dead", [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-binding `let` on a future [INFO] [stdout] --> src/server/device/hardware/communication/mod.rs:197:5 [INFO] [stdout] | [INFO] [stdout] 197 | let _ = self.stop_scanning(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider awaiting the future or dropping explicitly with `std::mem::drop` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_underscore_future [INFO] [stdout] = note: `#[warn(clippy::let_underscore_future)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/server/device/protocol/actuator_command_manager.rs:118:24 [INFO] [stdout] | [INFO] [stdout] 118 | pub fn new(features: &Vec) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 118 - pub fn new(features: &Vec) -> Self { [INFO] [stdout] 118 + pub fn new(features: &[DeviceFeature]) -> Self { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `FeatureType` which implements the `Copy` trait [INFO] [stdout] --> src/server/device/protocol/actuator_command_manager.rs:126:43 [INFO] [stdout] | [INFO] [stdout] 126 | let actuator_type: ActuatorType = feature.feature_type().clone().try_into().unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `(*feature.feature_type())` [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/device/protocol/actuator_command_manager.rs:159:8 [INFO] [stdout] | [INFO] [stdout] 159 | ) -> Result, ButtplugError> { [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: this `if` statement can be collapsed [INFO] [stdout] --> src/server/device/protocol/actuator_command_manager.rs:187:14 [INFO] [stdout] | [INFO] [stdout] 187 | } else if match_all { [INFO] [stdout] | ______________^ [INFO] [stdout] 188 | | if cmd.messages().contains(&msg_type) { [INFO] [stdout] 189 | | result.push((u32_index, *cmd.actuator_type(), cmd.current().1)); [INFO] [stdout] 190 | | } [INFO] [stdout] 191 | | } [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] 187 ~ } else if match_all [INFO] [stdout] 188 ~ && cmd.messages().contains(&msg_type) { [INFO] [stdout] 189 | result.push((u32_index, *cmd.actuator_type(), cmd.current().1)); [INFO] [stdout] 190 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> src/server/device/protocol/fleshlight_launch_helper.rs:23:5 [INFO] [stdout] | [INFO] [stdout] 23 | / ((90f64 - (diff / mil * 90f64)) / 100f64) [INFO] [stdout] 24 | | .min(1f64) [INFO] [stdout] 25 | | .max(0f64) [INFO] [stdout] | |________________^ help: replace with clamp: `((90f64 - (diff / mil * 90f64)) / 100f64).clamp(0f64, 1f64)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min, min.is_nan(), or max.is_nan() [INFO] [stdout] = note: clamp returns NaN if the input is NaN [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] = note: `#[warn(clippy::manual_clamp)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> src/server/device/protocol/foreo.rs:39:5 [INFO] [stdout] | [INFO] [stdout] 39 | ph.mode = 0; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `server::device::protocol::foreo::Foreo { mode: 0 }` and removing relevant reassignments [INFO] [stdout] --> src/server/device/protocol/foreo.rs:38:5 [INFO] [stdout] | [INFO] [stdout] 38 | let mut ph = Foreo::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] = note: `#[warn(clippy::field_reassign_with_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server/device/protocol/galaku.rs:48:3 [INFO] [stdout] | [INFO] [stdout] 48 | return KEY_TAB[e][t]; [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] 48 - return KEY_TAB[e][t]; [INFO] [stdout] 48 + KEY_TAB[e][t] [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server/device/protocol/galaku.rs:58:3 [INFO] [stdout] | [INFO] [stdout] 58 | return new_data; [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] 58 - return new_data; [INFO] [stdout] 58 + new_data [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server/device/protocol/galaku.rs:68:3 [INFO] [stdout] | [INFO] [stdout] 68 | return new_data; [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] 68 - return new_data; [INFO] [stdout] 68 + new_data [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server/device/protocol/galaku.rs:79:3 [INFO] [stdout] | [INFO] [stdout] 79 | return uint8_array; [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] 79 - return uint8_array; [INFO] [stdout] 79 + uint8_array [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server/device/protocol/galaku.rs:88:6 [INFO] [stdout] | [INFO] [stdout] 88 | if decrypted_data.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!decrypted_data.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: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> src/server/device/protocol/galaku.rs:108:5 [INFO] [stdout] | [INFO] [stdout] 108 | protocol.is_caiping_pump_device = false; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `server::device::protocol::galaku::Galaku { is_caiping_pump_device: false }` and removing relevant reassignments [INFO] [stdout] --> src/server/device/protocol/galaku.rs:107:5 [INFO] [stdout] | [INFO] [stdout] 107 | let mut protocol = Galaku::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::message::sensor_reading::SensorReadingV4` [INFO] [stdout] --> src/server/device/protocol/galaku.rs:267:16 [INFO] [stdout] | [INFO] [stdout] 267 | Ok(battery_reading.into()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `battery_reading` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/core/message/mod.rs:590:12 [INFO] [stdout] | [INFO] [stdout] 590 | _ => return, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: replace `return` with a unit value [INFO] [stdout] | [INFO] [stdout] 590 - _ => return, [INFO] [stdout] 590 + _ => (), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/core/message/mod.rs:658:12 [INFO] [stdout] | [INFO] [stdout] 658 | _ => return, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: replace `return` with a unit value [INFO] [stdout] | [INFO] [stdout] 658 - _ => return, [INFO] [stdout] 658 + _ => (), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::ops::Range` [INFO] [stdout] --> src/server/device/protocol/kiiroo_v21.rs:203:40 [INFO] [stdout] | [INFO] [stdout] 203 | let analog: Vec = (0..4) [INFO] [stdout] | ________________________________________^ [INFO] [stdout] 204 | | .into_iter() [INFO] [stdout] | |______________________________^ help: consider removing `.into_iter()`: `(0..4)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::ops::Range` [INFO] [stdout] --> src/server/device/protocol/kiiroo_v21.rs:209:41 [INFO] [stdout] | [INFO] [stdout] 209 | let digital: Vec = (0..4) [INFO] [stdout] | _________________________________________^ [INFO] [stdout] 210 | | .into_iter() [INFO] [stdout] | |______________________________^ help: consider removing `.into_iter()`: `(0..4)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `cmds.get(0)` [INFO] [stdout] --> src/server/device/protocol/kiiroo_v2_vibrator.rs:36:9 [INFO] [stdout] | [INFO] [stdout] 36 | / cmds [INFO] [stdout] 37 | | .get(0) [INFO] [stdout] | |_________________^ help: try: `cmds.first()` [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: casting a character literal to `u8` truncates [INFO] [stdout] --> src/server/device/protocol/kizuna.rs:33:31 [INFO] [stdout] | [INFO] [stdout] 33 | vec![48 + scalar as u8, '\r' as u8, '\n' as u8], [INFO] [stdout] | ^^^^^^^^^^ help: use a byte literal instead: `b'\r'` [INFO] [stdout] | [INFO] [stdout] = note: `char` is four bytes wide, but `u8` is a single byte [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stdout] = note: `#[warn(clippy::char_lit_as_u8)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting a character literal to `u8` truncates [INFO] [stdout] --> src/server/device/protocol/kizuna.rs:33:43 [INFO] [stdout] | [INFO] [stdout] 33 | vec![48 + scalar as u8, '\r' as u8, '\n' as u8], [INFO] [stdout] | ^^^^^^^^^^ help: use a byte literal instead: `b'\n'` [INFO] [stdout] | [INFO] [stdout] = note: `char` is four bytes wide, but `u8` is a single byte [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/server/device/protocol/libo_elle.rs:35:12 [INFO] [stdout] | [INFO] [stdout] 35 | if speed as u8 > 0 && speed <= 7 { [INFO] [stdout] | ^^^^^^^^^^^ help: try: `speed` [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: unneeded `return` statement [INFO] [stdout] --> src/server/device/protocol/longlosttouch.rs:95:3 [INFO] [stdout] | [INFO] [stdout] 95 | return cmds; [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] 95 - return cmds; [INFO] [stdout] 95 + cmds [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `u8` is unnecessary [INFO] [stdout] --> src/server/device/protocol/longlosttouch.rs:88:13 [INFO] [stdout] | [INFO] [stdout] 88 | i + 1 as u8, [INFO] [stdout] | ^^^^^^^ help: try: `1_u8` [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: useless conversion to the same type: `server::device::hardware::HardwareWriteCmd` [INFO] [stdout] --> src/server/device/protocol/longlosttouch.rs:103:23 [INFO] [stdout] | [INFO] [stdout] 103 | .write_value(&HardwareWriteCmd::new(Endpoint::Tx, cmd, true).into()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `HardwareWriteCmd::new(Endpoint::Tx, cmd, true)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `message.vectors().get(0)` [INFO] [stdout] --> src/server/device/protocol/loob.rs:54:24 [INFO] [stdout] | [INFO] [stdout] 54 | if let Some(vec) = message.vectors().get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `message.vectors().first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> src/server/device/protocol/loob.rs:55:22 [INFO] [stdout] | [INFO] [stdout] 55 | let pos: u16 = max(min((vec.position() * 1000.0) as u16, 1000), 1); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with clamp: `((vec.position() * 1000.0) as u16).clamp(1, 1000)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the variable `i` is used as a loop counter [INFO] [stdout] --> src/server/device/protocol/lovehoney_desire.rs:68:7 [INFO] [stdout] | [INFO] [stdout] 68 | for cmd in cmds { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: consider using: `for (i, cmd) in (1..).zip(cmds.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: compiling a regex in a loop [INFO] [stdout] --> src/server/device/protocol/lovense.rs:118:22 [INFO] [stdout] | [INFO] [stdout] 118 | let re = Regex::new(r"LVS-([A-Z]+)\d+").expect("Static regex shouldn't fail"); [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: move the regex construction outside this loop [INFO] [stdout] --> src/server/device/protocol/lovense.rs:94:5 [INFO] [stdout] | [INFO] [stdout] 94 | loop { [INFO] [stdout] | ^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#regex_creation_in_loops [INFO] [stdout] = note: `#[warn(clippy::regex_creation_in_loops)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `cmds.get(0)` [INFO] [stdout] --> src/server/device/protocol/lovense.rs:368:45 [INFO] [stdout] | [INFO] [stdout] 368 | if let Some(Some((speed, clockwise))) = cmds.get(0) { [INFO] [stdout] | ^^^^^^^^^^^ help: try: `cmds.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::message::sensor_reading::SensorReadingV4` [INFO] [stdout] --> src/server/device/protocol/lovense.rs:412:19 [INFO] [stdout] | [INFO] [stdout] 412 | / message::SensorReadingV4::new( [INFO] [stdout] 413 | | message.device_index(), [INFO] [stdout] 414 | | *message.feature_index(), [INFO] [stdout] 415 | | message::SensorType::Battery, [INFO] [stdout] ... | [INFO] [stdout] 418 | | .into(), [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `.into()` [INFO] [stdout] | [INFO] [stdout] 412 ~ message::SensorReadingV4::new( [INFO] [stdout] 413 + message.device_index(), [INFO] [stdout] 414 + *message.feature_index(), [INFO] [stdout] 415 + message::SensorType::Battery, [INFO] [stdout] 416 + vec![level as i32], [INFO] [stdout] 417 ~ ), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i32` -> `i32`) [INFO] [stdout] --> src/server/device/protocol/lovense.rs:472:29 [INFO] [stdout] | [INFO] [stdout] 472 | current_move_amount = (goal_position as i32 - current_position) as i32 / move_steps as i32; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `((goal_position as i32 - current_position))` [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: casting to the same type is unnecessary (`i32` -> `i32`) [INFO] [stdout] --> src/server/device/protocol/lovense.rs:472:30 [INFO] [stdout] | [INFO] [stdout] 472 | current_move_amount = (goal_position as i32 - current_position) as i32 / move_steps as i32; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `goal_position` [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: useless conversion to the same type: `server::device::hardware::HardwareWriteCmd` [INFO] [stdout] --> src/server/device/protocol/lovense_connect_service.rs:71:23 [INFO] [stdout] | [INFO] [stdout] 71 | .write_value(&HardwareWriteCmd::new(Endpoint::Tx, lovense_cmd, false).into()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `HardwareWriteCmd::new(Endpoint::Tx, lovense_cmd, false)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `cmds.get(0)` [INFO] [stdout] --> src/server/device/protocol/lovense_connect_service.rs:276:45 [INFO] [stdout] | [INFO] [stdout] 276 | if let Some(Some((speed, clockwise))) = cmds.get(0) { [INFO] [stdout] | ^^^^^^^^^^^ help: try: `cmds.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::message::sensor_reading::SensorReadingV4` [INFO] [stdout] --> src/server/device/protocol/lovense_connect_service.rs:305:9 [INFO] [stdout] | [INFO] [stdout] 305 | / message::SensorReadingV4::new( [INFO] [stdout] 306 | | msg.device_index(), [INFO] [stdout] 307 | | *msg.feature_index(), [INFO] [stdout] 308 | | *msg.sensor_type(), [INFO] [stdout] ... | [INFO] [stdout] 311 | | .into(), [INFO] [stdout] | |_______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `.into()` [INFO] [stdout] | [INFO] [stdout] 305 ~ message::SensorReadingV4::new( [INFO] [stdout] 306 + msg.device_index(), [INFO] [stdout] 307 + *msg.feature_index(), [INFO] [stdout] 308 + *msg.sensor_type(), [INFO] [stdout] 309 + vec![reading.data()[0] as i32], [INFO] [stdout] 310 ~ ), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/server/device/protocol/luvmazer.rs:38:42 [INFO] [stdout] | [INFO] [stdout] 38 | vec![0xa0, 0x0f, 0x00, 0x00, 0x64, scalar as u8], [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `scalar` [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 loop variable `i` is used to index `commands` [INFO] [stdout] --> src/server/device/protocol/metaxsire_v2.rs:54:14 [INFO] [stdout] | [INFO] [stdout] 54 | for i in 0..commands.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 54 - for i in 0..commands.len() { [INFO] [stdout] 54 + for (i, ) in commands.iter().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/server/device/protocol/metaxsire_v3.rs:59:17 [INFO] [stdout] | [INFO] [stdout] 59 | errored = !device [INFO] [stdout] | _________________^ [INFO] [stdout] 60 | | .write_value(&HardwareWriteCmd::new( [INFO] [stdout] 61 | | Endpoint::Tx, [INFO] [stdout] 62 | | vec![0xa1, 0x04, current_commands[i], i as u8 + 1], [INFO] [stdout] ... | [INFO] [stdout] 65 | | .await [INFO] [stdout] 66 | | .is_ok(); [INFO] [stdout] | |________________^ [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] help: try [INFO] [stdout] | [INFO] [stdout] 59 ~ errored = device [INFO] [stdout] 60 + .write_value(&HardwareWriteCmd::new( [INFO] [stdout] 61 + Endpoint::Tx, [INFO] [stdout] 62 + vec![0xa1, 0x04, current_commands[i], i as u8 + 1], [INFO] [stdout] 63 + false, [INFO] [stdout] 64 + )) [INFO] [stdout] 65 ~ .await.is_err(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `current_commands` [INFO] [stdout] --> src/server/device/protocol/metaxsire_v3.rs:55:14 [INFO] [stdout] | [INFO] [stdout] 55 | for i in 0..current_commands.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 55 - for i in 0..current_commands.len() { [INFO] [stdout] 55 + for (i, ) in current_commands.iter().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/server/device/protocol/monsterpub.rs:52:39 [INFO] [stdout] | [INFO] [stdout] 52 | Ok(data) => std::str::from_utf8(&data.data()) [INFO] [stdout] | ^^^^^^^^^^^^ help: change this to: `data.data()` [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: you seem to use `.enumerate()` and immediately discard the index [INFO] [stdout] --> src/server/device/protocol/monsterpub.rs:157:32 [INFO] [stdout] | [INFO] [stdout] 157 | for (_, cmd) in cmds.iter().enumerate() { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_enumerate_index [INFO] [stdout] = note: `#[warn(clippy::unused_enumerate_index)]` on by default [INFO] [stdout] help: remove the `.enumerate()` call [INFO] [stdout] | [INFO] [stdout] 157 - for (_, cmd) in cmds.iter().enumerate() { [INFO] [stdout] 157 + for cmd in cmds.iter() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/server/device/protocol/nintendo_joycon.rs:115:47 [INFO] [stdout] | [INFO] [stdout] 115 | send_sub_command_raw(device, packet_number, sub_command as u8, data).await [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `sub_command` [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: clamp-like pattern without using clamp function [INFO] [stdout] --> src/server/device/protocol/nintendo_joycon.rs:142:16 [INFO] [stdout] | [INFO] [stdout] 142 | let freq = if freq < 0.0 { [INFO] [stdout] | ________________^ [INFO] [stdout] 143 | | 0.0 [INFO] [stdout] 144 | | } else if freq > 1252.0 { [INFO] [stdout] 145 | | 1252.0 [INFO] [stdout] 146 | | } else { [INFO] [stdout] 147 | | freq [INFO] [stdout] 148 | | }; [INFO] [stdout] | |_____^ help: replace with clamp: `freq.clamp(0.0, 1252.0)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min, min.is_nan(), or max.is_nan() [INFO] [stdout] = note: clamp returns NaN if the input is NaN [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> src/server/device/protocol/nintendo_joycon.rs:150:15 [INFO] [stdout] | [INFO] [stdout] 150 | let amp = if amp < 0.0 { [INFO] [stdout] | _______________^ [INFO] [stdout] 151 | | 0.0 [INFO] [stdout] 152 | | } else if amp > 1.799 { [INFO] [stdout] 153 | | 1.799 [INFO] [stdout] 154 | | } else { [INFO] [stdout] 155 | | amp [INFO] [stdout] 156 | | }; [INFO] [stdout] | |_____^ help: replace with clamp: `amp.clamp(0.0, 1.799)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min, min.is_nan(), or max.is_nan() [INFO] [stdout] = note: clamp returns NaN if the input is NaN [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: an implementation of `From` is preferred since it gives you `Into<_>` for free where the reverse isn't true [INFO] [stdout] --> src/server/device/protocol/nintendo_joycon.rs:178:1 [INFO] [stdout] | [INFO] [stdout] 178 | impl Into<[u8; 4]> for Rumble { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: `impl From for Foreign` is allowed by the orphan rules, for more information see [INFO] [stdout] https://doc.rust-lang.org/reference/items/implementations.html#trait-implementation-coherence [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#from_over_into [INFO] [stdout] = note: `#[warn(clippy::from_over_into)]` on by default [INFO] [stdout] help: replace the `Into` implementation with `From` [INFO] [stdout] | [INFO] [stdout] 178 ~ impl From for [u8; 4] { [INFO] [stdout] 179 ~ fn from(val: Rumble) -> Self { [INFO] [stdout] 180 ~ let encoded_hex_freq = f32::round(f32::log2(val.frequency / 10.0) * 32.0) as u8; [INFO] [stdout] 181 | [INFO] [stdout] ... [INFO] [stdout] 184 | [INFO] [stdout] 185 ~ let encoded_hex_amp = if val.amplitude > 0.23 { [INFO] [stdout] 186 ~ f32::round(f32::log2(val.amplitude * 8.7) * 32.0) as u8 [INFO] [stdout] 187 ~ } else if val.amplitude > 0.12 { [INFO] [stdout] 188 ~ f32::round(f32::log2(val.amplitude * 17.0) * 16.0) as u8 [INFO] [stdout] 189 | } else { [INFO] [stdout] 190 ~ f32::round(((f32::log2(val.amplitude) * 32.0) - 96.0) / (4.0 - 2.0 * val.amplitude)) as u8 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_err()` [INFO] [stdout] --> src/server/device/protocol/nintendo_joycon.rs:274:16 [INFO] [stdout] | [INFO] [stdout] 274 | if let Err(_) = [INFO] [stdout] | _________- ^^^^^^ [INFO] [stdout] 275 | | send_command_raw(hardware.clone(), 1, 16, 0, &[], Some(rumble), Some(rumble)).await [INFO] [stdout] | |_____________________________________________________________________________________________- help: try: `if send_command_raw(hardware.clone(), 1, 16, 0, &[], Some(rumble), Some(rumble)).await.is_err()` [INFO] [stdout] | [INFO] [stdout] = note: this will change drop order of the result, as well as all temporaries [INFO] [stdout] = note: add `#[allow(clippy::redundant_pattern_matching)]` if this is important [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> src/server/device/protocol/sensee_v2.rs:44:5 [INFO] [stdout] | [INFO] [stdout] 44 | / protocol.device_type = if res.data().len() >= 6 { [INFO] [stdout] 45 | | res.data()[6] [INFO] [stdout] 46 | | } else { [INFO] [stdout] 47 | | 0x66 [INFO] [stdout] 48 | | }; [INFO] [stdout] | |______^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `server::device::protocol::sensee_v2::SenseeV2 { device_type: if res.data().len() >= 6 { [INFO] [stdout] res.data()[6] [INFO] [stdout] } else { [INFO] [stdout] 0x66 [INFO] [stdout] }, vibe_count: device_definition [INFO] [stdout] .features() [INFO] [stdout] .iter() [INFO] [stdout] .filter(|x| [FeatureType::Vibrate].contains(x.feature_type())) [INFO] [stdout] .count(), thrust_count: device_definition [INFO] [stdout] .features() [INFO] [stdout] .iter() [INFO] [stdout] .filter(|x| [FeatureType::Oscillate].contains(x.feature_type())) [INFO] [stdout] .count(), suck_count: device_definition [INFO] [stdout] .features() [INFO] [stdout] .iter() [INFO] [stdout] .filter(|x| [FeatureType::Constrict].contains(x.feature_type())) [INFO] [stdout] .count() }` and removing relevant reassignments [INFO] [stdout] --> src/server/device/protocol/sensee_v2.rs:43:5 [INFO] [stdout] | [INFO] [stdout] 43 | let mut protocol = SenseeV2::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `vibes` [INFO] [stdout] --> src/server/device/protocol/sensee_v2.rs:131:16 [INFO] [stdout] | [INFO] [stdout] 131 | for i in 0..self.vibe_count { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 131 - for i in 0..self.vibe_count { [INFO] [stdout] 131 + for (i, ) in vibes.iter().enumerate().take(self.vibe_count) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `thrusts` [INFO] [stdout] --> src/server/device/protocol/sensee_v2.rs:139:16 [INFO] [stdout] | [INFO] [stdout] 139 | for i in 0..self.thrust_count { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 139 - for i in 0..self.thrust_count { [INFO] [stdout] 139 + for (i, ) in thrusts.iter().enumerate().take(self.thrust_count) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `sucks` [INFO] [stdout] --> src/server/device/protocol/sensee_v2.rs:147:16 [INFO] [stdout] | [INFO] [stdout] 147 | for i in 0..self.suck_count { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 147 - for i in 0..self.suck_count { [INFO] [stdout] 147 + for (i, ) in sucks.iter().enumerate().take(self.suck_count) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/server/device/protocol/svakom_avaneo.rs:49:32 [INFO] [stdout] | [INFO] [stdout] 49 | [0x55, mode, 0x00, 0x00, scalar as u8, 0xff].to_vec(), [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `{ scalar }` [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: called `unwrap` on `hcmd` after checking its variant with `is_some` [INFO] [stdout] --> src/server/device/protocol/svakom_avaneo.rs:96:17 [INFO] [stdout] | [INFO] [stdout] 95 | return if hcmd.is_some() { [INFO] [stdout] | ----------------- help: try: `if let Some() = hcmd` [INFO] [stdout] 96 | Ok(vec![hcmd.unwrap().into()]) [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 `hcmd` after checking its variant with `is_some` [INFO] [stdout] --> src/server/device/protocol/svakom_avaneo.rs:124:15 [INFO] [stdout] | [INFO] [stdout] 123 | return if hcmd.is_some() { [INFO] [stdout] | ----------------- help: try: `if let Some() = hcmd` [INFO] [stdout] 124 | Ok(vec![hcmd.unwrap().into()]) [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: unneeded `return` statement [INFO] [stdout] --> src/server/device/protocol/svakom_avaneo.rs:123:5 [INFO] [stdout] | [INFO] [stdout] 123 | / return if hcmd.is_some() { [INFO] [stdout] 124 | | Ok(vec![hcmd.unwrap().into()]) [INFO] [stdout] 125 | | } else { [INFO] [stdout] 126 | | Ok(vec![]) [INFO] [stdout] 127 | | }; [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] 123 ~ if hcmd.is_some() { [INFO] [stdout] 124 + Ok(vec![hcmd.unwrap().into()]) [INFO] [stdout] 125 + } else { [INFO] [stdout] 126 + Ok(vec![]) [INFO] [stdout] 127 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server/device/protocol/svakom_avaneo.rs:72:8 [INFO] [stdout] | [INFO] [stdout] 72 | if cmds.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `cmds.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: called `unwrap` on `hcmd` after checking its variant with `is_some` [INFO] [stdout] --> src/server/device/protocol/svakom_dt250a.rs:94:17 [INFO] [stdout] | [INFO] [stdout] 93 | return if hcmd.is_some() { [INFO] [stdout] | ----------------- help: try: `if let Some() = hcmd` [INFO] [stdout] 94 | Ok(vec![hcmd.unwrap().into()]) [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 `hcmd` after checking its variant with `is_some` [INFO] [stdout] --> src/server/device/protocol/svakom_dt250a.rs:126:17 [INFO] [stdout] | [INFO] [stdout] 125 | return if hcmd.is_some() { [INFO] [stdout] | ----------------- help: try: `if let Some() = hcmd` [INFO] [stdout] 126 | Ok(vec![hcmd.unwrap().into()]) [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 `hcmd` after checking its variant with `is_some` [INFO] [stdout] --> src/server/device/protocol/svakom_dt250a.rs:146:15 [INFO] [stdout] | [INFO] [stdout] 145 | return if hcmd.is_some() { [INFO] [stdout] | ----------------- help: try: `if let Some() = hcmd` [INFO] [stdout] 146 | Ok(vec![hcmd.unwrap().into()]) [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: unneeded `return` statement [INFO] [stdout] --> src/server/device/protocol/svakom_dt250a.rs:145:5 [INFO] [stdout] | [INFO] [stdout] 145 | / return if hcmd.is_some() { [INFO] [stdout] 146 | | Ok(vec![hcmd.unwrap().into()]) [INFO] [stdout] 147 | | } else { [INFO] [stdout] 148 | | Ok(vec![]) [INFO] [stdout] 149 | | }; [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] 145 ~ if hcmd.is_some() { [INFO] [stdout] 146 + Ok(vec![hcmd.unwrap().into()]) [INFO] [stdout] 147 + } else { [INFO] [stdout] 148 + Ok(vec![]) [INFO] [stdout] 149 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server/device/protocol/svakom_dt250a.rs:68:8 [INFO] [stdout] | [INFO] [stdout] 68 | if cmds.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `cmds.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: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/server/device/protocol/svakom_suitcase.rs:49:32 [INFO] [stdout] | [INFO] [stdout] 49 | [0x55, 0x09, 0x00, 0x00, scalar as u8, 0x00].to_vec(), [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `{ scalar }` [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: called `unwrap` on `hcmd` after checking its variant with `is_some` [INFO] [stdout] --> src/server/device/protocol/svakom_suitcase.rs:100:17 [INFO] [stdout] | [INFO] [stdout] 99 | return if hcmd.is_some() { [INFO] [stdout] | ----------------- help: try: `if let Some() = hcmd` [INFO] [stdout] 100 | Ok(vec![hcmd.unwrap().into()]) [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 `hcmd` after checking its variant with `is_some` [INFO] [stdout] --> src/server/device/protocol/svakom_suitcase.rs:124:15 [INFO] [stdout] | [INFO] [stdout] 123 | return if hcmd.is_some() { [INFO] [stdout] | ----------------- help: try: `if let Some() = hcmd` [INFO] [stdout] 124 | Ok(vec![hcmd.unwrap().into()]) [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: unneeded `return` statement [INFO] [stdout] --> src/server/device/protocol/svakom_suitcase.rs:123:5 [INFO] [stdout] | [INFO] [stdout] 123 | / return if hcmd.is_some() { [INFO] [stdout] 124 | | Ok(vec![hcmd.unwrap().into()]) [INFO] [stdout] 125 | | } else { [INFO] [stdout] 126 | | Ok(vec![]) [INFO] [stdout] 127 | | }; [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] 123 ~ if hcmd.is_some() { [INFO] [stdout] 124 + Ok(vec![hcmd.unwrap().into()]) [INFO] [stdout] 125 + } else { [INFO] [stdout] 126 + Ok(vec![]) [INFO] [stdout] 127 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server/device/protocol/svakom_suitcase.rs:72:8 [INFO] [stdout] | [INFO] [stdout] 72 | if cmds.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `cmds.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: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/server/device/protocol/svakom_tarax.rs:50:32 [INFO] [stdout] | [INFO] [stdout] 50 | [0x55, 0x09, 0x00, 0x00, scalar as u8, 0x00].to_vec(), [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `{ scalar }` [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: called `unwrap` on `hcmd` after checking its variant with `is_some` [INFO] [stdout] --> src/server/device/protocol/svakom_tarax.rs:97:17 [INFO] [stdout] | [INFO] [stdout] 96 | return if hcmd.is_some() { [INFO] [stdout] | ----------------- help: try: `if let Some() = hcmd` [INFO] [stdout] 97 | Ok(vec![hcmd.unwrap().into()]) [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 `hcmd` after checking its variant with `is_some` [INFO] [stdout] --> src/server/device/protocol/svakom_tarax.rs:121:15 [INFO] [stdout] | [INFO] [stdout] 120 | return if hcmd.is_some() { [INFO] [stdout] | ----------------- help: try: `if let Some() = hcmd` [INFO] [stdout] 121 | Ok(vec![hcmd.unwrap().into()]) [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: unneeded `return` statement [INFO] [stdout] --> src/server/device/protocol/svakom_tarax.rs:120:5 [INFO] [stdout] | [INFO] [stdout] 120 | / return if hcmd.is_some() { [INFO] [stdout] 121 | | Ok(vec![hcmd.unwrap().into()]) [INFO] [stdout] 122 | | } else { [INFO] [stdout] 123 | | Ok(vec![]) [INFO] [stdout] 124 | | }; [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] 120 ~ if hcmd.is_some() { [INFO] [stdout] 121 + Ok(vec![hcmd.unwrap().into()]) [INFO] [stdout] 122 + } else { [INFO] [stdout] 123 + Ok(vec![]) [INFO] [stdout] 124 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server/device/protocol/svakom_tarax.rs:73:8 [INFO] [stdout] | [INFO] [stdout] 73 | if cmds.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `cmds.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: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/server/device/protocol/svakom_v4.rs:56:9 [INFO] [stdout] | [INFO] [stdout] 56 | scalar as u8, [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `{ scalar }` [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: length comparison to zero [INFO] [stdout] --> src/server/device/protocol/svakom_v5.rs:79:8 [INFO] [stdout] | [INFO] [stdout] 79 | if vibes.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!vibes.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/device/protocol/svakom_v5.rs:132:8 [INFO] [stdout] | [INFO] [stdout] 132 | if oscs.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!oscs.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: `filter(..).map(..)` can be simplified as `filter_map(..)` [INFO] [stdout] --> src/server/device/protocol/svakom_v5.rs:153:8 [INFO] [stdout] | [INFO] [stdout] 153 | .filter(|c| c.is_some()) [INFO] [stdout] | ________^ [INFO] [stdout] 154 | | .map(|c| c.unwrap_or((Vibrate, 0))) [INFO] [stdout] | |_________________________________________^ help: try: `filter_map(|c| *c)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_filter_map [INFO] [stdout] = note: `#[warn(clippy::manual_filter_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server/device/protocol/svakom_v6.rs:84:8 [INFO] [stdout] | [INFO] [stdout] 84 | if vibes.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!vibes.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: `filter(..).map(..)` can be simplified as `filter_map(..)` [INFO] [stdout] --> src/server/device/protocol/svakom_v6.rs:158:8 [INFO] [stdout] | [INFO] [stdout] 158 | .filter(|c| c.is_some()) [INFO] [stdout] | ________^ [INFO] [stdout] 159 | | .map(|c| c.unwrap_or((Vibrate, 0))) [INFO] [stdout] | |_________________________________________^ help: try: `filter_map(|c| *c)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_filter_map [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `cmds.get(0)` [INFO] [stdout] --> src/server/device/protocol/synchro.rs:30:45 [INFO] [stdout] | [INFO] [stdout] 30 | if let Some(Some((speed, clockwise))) = cmds.get(0) { [INFO] [stdout] | ^^^^^^^^^^^ help: try: `cmds.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u32` -> `u32`) [INFO] [stdout] --> src/server/device/protocol/thehandy/mod.rs:152:7 [INFO] [stdout] | [INFO] [stdout] 152 | fleshlight_launch_helper::calculate_duration(distance, message.speed() as f64 / 99f64) as u32; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `fleshlight_launch_helper::calculate_duration(distance, message.speed() as f64 / 99f64)` [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: length comparison to one [INFO] [stdout] --> src/server/device/protocol/tryfun_meta2.rs:61:8 [INFO] [stdout] | [INFO] [stdout] 61 | if commands.len() >= 1 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!commands.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/device/protocol/vibcrafter.rs:50:3 [INFO] [stdout] | [INFO] [stdout] 50 | return res; [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] 50 - return res; [INFO] [stdout] 50 + res [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server/device/protocol/vibcrafter.rs:58:3 [INFO] [stdout] | [INFO] [stdout] 58 | return res; [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] 58 - return res; [INFO] [stdout] 58 + res [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: compiling a regex in a loop [INFO] [stdout] --> src/server/device/protocol/vibcrafter.rs:95:25 [INFO] [stdout] | [INFO] [stdout] 95 | let challenge = Regex::new(r"^[a-zA-Z0-9]{4}:([a-zA-Z0-9]+);$") [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: move the regex construction outside this loop [INFO] [stdout] --> src/server/device/protocol/vibcrafter.rs:87:5 [INFO] [stdout] | [INFO] [stdout] 87 | loop { [INFO] [stdout] | ^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#regex_creation_in_loops [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/server/device/protocol/vibcrafter.rs:102:27 [INFO] [stdout] | [INFO] [stdout] 102 | sha256.update(&to_hash.as_str().as_bytes()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `to_hash.as_str().as_bytes()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> src/server/device/protocol/vorze_sa.rs:111:3 [INFO] [stdout] | [INFO] [stdout] 111 | / if speed > 100f64 { [INFO] [stdout] 112 | | speed = 100f64; [INFO] [stdout] ... | [INFO] [stdout] 116 | | speed = 0f64; [INFO] [stdout] 117 | | } [INFO] [stdout] | |___^ help: replace with clamp: `speed = speed.clamp(0f64, 100f64);` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min, min.is_nan(), or max.is_nan() [INFO] [stdout] = note: clamp returns NaN if the input is NaN [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/server/device/protocol/vorze_sa.rs:205:52 [INFO] [stdout] | [INFO] [stdout] 205 | vec![self.device_type as u8, position as u8, speed as u8], [INFO] [stdout] | ^^^^^^^^^^^ help: try: `speed` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `ButtplugDeviceMessageType` which implements the `Copy` trait [INFO] [stdout] --> src/server/device/configuration/device_definitions.rs:107:83 [INFO] [stdout] | [INFO] [stdout] 107 | if let Ok(actuator_msg_type) = ButtplugActuatorFeatureMessageType::try_from(msg_type.clone()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try dereferencing it: `*msg_type` [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 `ButtplugDeviceMessageType` which implements the `Copy` trait [INFO] [stdout] --> src/server/device/configuration/device_definitions.rs:115:52 [INFO] [stdout] | [INFO] [stdout] 115 | ButtplugSensorFeatureMessageType::try_from(msg_type.clone()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try dereferencing it: `*msg_type` [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: redundant pattern matching, consider using `is_ok()` [INFO] [stdout] --> src/server/device/configuration/device_definitions.rs:122:21 [INFO] [stdout] | [INFO] [stdout] 122 | } else if let Ok(_) = ButtplugRawFeatureMessageType::try_from(msg_type.clone()) { [INFO] [stdout] | -------^^^^^------------------------------------------------------------ help: try: `if ButtplugRawFeatureMessageType::try_from(msg_type.clone()).is_ok()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `ButtplugDeviceMessageType` which implements the `Copy` trait [INFO] [stdout] --> src/server/device/configuration/device_definitions.rs:122:69 [INFO] [stdout] | [INFO] [stdout] 122 | } else if let Ok(_) = ButtplugRawFeatureMessageType::try_from(msg_type.clone()) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try dereferencing it: `*msg_type` [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: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/server/device/configuration/device_definitions.rs:123:16 [INFO] [stdout] | [INFO] [stdout] 123 | if let Some(_) = feature.raw() { [INFO] [stdout] | -------^^^^^^^---------------- help: try: `if feature.raw().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] [INFO] [stdout] [INFO] [stdout] warning: this `if` branch is empty [INFO] [stdout] --> src/server/device/configuration/mod.rs:378:5 [INFO] [stdout] | [INFO] [stdout] 378 | if !self.protocol_map.contains_key(protocol) {} [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can remove it: `!self.protocol_map.contains_key(protocol);` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_ifs [INFO] [stdout] = note: `#[warn(clippy::needless_ifs)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` branch is empty [INFO] [stdout] --> src/server/device/configuration/mod.rs:407:5 [INFO] [stdout] | [INFO] [stdout] 407 | if !self.protocol_map.contains_key(identifier.protocol()) {} [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can remove it: `!self.protocol_map.contains_key(identifier.protocol());` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_ifs [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/server/device/configuration/mod.rs:473:7 [INFO] [stdout] | [INFO] [stdout] 473 | index = index + 1; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: replace it with: `index += 1` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/server/device/configuration/mod.rs:543:7 [INFO] [stdout] | [INFO] [stdout] 543 | &identifier.protocol(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `identifier.protocol()` [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/device/configuration/mod.rs:544:7 [INFO] [stdout] | [INFO] [stdout] 544 | &identifier.identifier(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `identifier.identifier()` [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/device/configuration/mod.rs:553:39 [INFO] [stdout] | [INFO] [stdout] 553 | .get(&BaseDeviceIdentifier::new(&identifier.protocol(), &None)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `identifier.protocol()` [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: useless conversion to the same type: `server::device::configuration::device_definitions::UserDeviceDefinition` [INFO] [stdout] --> src/server/device/server_device.rs:199:38 [INFO] [stdout] | [INFO] [stdout] 199 | .initialize(hardware.clone(), &attrs.clone().into()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `attrs.clone()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/server/device/server_device.rs:252:54 [INFO] [stdout] | [INFO] [stdout] 252 | if let Err(e) = hardware.write_value(&packet).await { [INFO] [stdout] | ^^^^^^^ help: change this to: `packet` [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/device/server_device.rs:259:56 [INFO] [stdout] | [INFO] [stdout] 259 | if let Err(e) = hardware.write_value(&packet).await { [INFO] [stdout] | ^^^^^^^ help: change this to: `packet` [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 async expression only awaits a single future [INFO] [stdout] --> src/server/device/server_device.rs:421:14 [INFO] [stdout] | [INFO] [stdout] 421 | return async move { fut.await }.boxed(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to: `fut` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_async_block [INFO] [stdout] = note: `#[warn(clippy::redundant_async_block)]` 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/device/server_device.rs:499:22 [INFO] [stdout] | [INFO] [stdout] 499 | .update_scalar(&msg, self.handler.needs_full_command_set()) [INFO] [stdout] | ^^^^ help: change this to: `msg` [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: useless use of `format!` [INFO] [stdout] --> src/server/device/hardware/communication/lovense_connect_service/lovense_connect_service_hardware.rs:172:42 [INFO] [stdout] | [INFO] [stdout] 172 | res.text().await.unwrap_or(format!("no response")) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"no response".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] [INFO] [stdout] [INFO] [stdout] warning: this async expression only awaits a single future [INFO] [stdout] --> src/server/device/server_device_manager.rs:245:9 [INFO] [stdout] | [INFO] [stdout] 245 | async move { fut.await }.boxed() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to: `fut` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_async_block [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/server/device/server_device_manager.rs:265:15 [INFO] [stdout] | [INFO] [stdout] 265 | &dev.definition().user_config().display_name(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `dev.definition().user_config().display_name()` [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/device/server_device_manager_event_loop.rs:287:11 [INFO] [stdout] | [INFO] [stdout] 287 | &device.definition().user_config().display_name(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `device.definition().user_config().display_name()` [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 async expression only awaits a single future [INFO] [stdout] --> src/server/ping_timer.rs:93:28 [INFO] [stdout] | [INFO] [stdout] 93 | async_manager::spawn(async move { fut.await }); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to: `fut` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_async_block [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/server/mod.rs:50:1 [INFO] [stdout] | [INFO] [stdout] 50 | mod server; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] = note: `#[warn(clippy::module_inception)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::message::error::ErrorV0` [INFO] [stdout] --> src/server/server_builder.rs:133:15 [INFO] [stdout] | [INFO] [stdout] 133 | message::ErrorV0::from(ButtplugError::from(ButtplugPingError::PingedOut)).into(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `message::ErrorV0::from(ButtplugError::from(ButtplugPingError::PingedOut))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/server/server_downgrade_wrapper.rs:156:23 [INFO] [stdout] | [INFO] [stdout] 156 | &&ButtplugServerMessageV4::from(ErrorV0::from(e)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `(&ButtplugServerMessageV4::from(ErrorV0::from(e)))` [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: useless conversion to the same type: `core::errors::ButtplugMessageError` [INFO] [stdout] --> src/server/server_message_conversion.rs:200:13 [INFO] [stdout] | [INFO] [stdout] 200 | ...rr(ButtplugMessageError::MessageConversionError("FleshlightLaunchFW12Cmd is not implemented. Please update the client software to use a newer command".to_owned()).into()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `ButtplugMessageError::MessageConversionError("FleshlightLaunchFW12Cmd is not implemented. Please update the client software to use a newer command".to_owned())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::errors::ButtplugMessageError` [INFO] [stdout] --> src/server/server_message_conversion.rs:206:11 [INFO] [stdout] | [INFO] [stdout] 206 | / ButtplugMessageError::MessageConversionError( [INFO] [stdout] 207 | | "RequestLog is no longer allowed by any version of Buttplug.".to_owned(), [INFO] [stdout] 208 | | ) [INFO] [stdout] 209 | | .into(), [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `.into()` [INFO] [stdout] | [INFO] [stdout] 206 ~ ButtplugMessageError::MessageConversionError( [INFO] [stdout] 207 + "RequestLog is no longer allowed by any version of Buttplug.".to_owned(), [INFO] [stdout] 208 ~ ), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::errors::ButtplugMessageError` [INFO] [stdout] --> src/server/server_message_conversion.rs:215:13 [INFO] [stdout] | [INFO] [stdout] 215 | ...rr(ButtplugMessageError::MessageConversionError("KiirooCmd is not implemented. Please update the client software to use a newer command".to_owned()).into()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `ButtplugMessageError::MessageConversionError("KiirooCmd is not implemented. Please update the client software to use a newer command".to_owned())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::errors::ButtplugMessageError` [INFO] [stdout] --> src/server/server_message_conversion.rs:220:13 [INFO] [stdout] | [INFO] [stdout] 220 | ...rr(ButtplugMessageError::MessageConversionError("LovenseCmd is not implemented. Please update the client software to use a newer command".to_owned()).into()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `ButtplugMessageError::MessageConversionError("LovenseCmd is not implemented. Please update the client software to use a newer command".to_owned())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::message::server_info::ServerInfoV0` [INFO] [stdout] --> src/server/server_message_conversion.rs:346:85 [INFO] [stdout] | [INFO] [stdout] 346 | ButtplugServerMessageV1::ServerInfo(m) => ButtplugServerMessageV0::ServerInfo(m.into()), [INFO] [stdout] | ^^^^^^^^ help: consider removing `.into()`: `m` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `f64` which implements the `Copy` trait [INFO] [stdout] --> src/server/server_message_conversion.rs:667:11 [INFO] [stdout] | [INFO] [stdout] 667 | x.scalar().clone(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `x.scalar()` [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 `ActuatorType` which implements the `Copy` trait [INFO] [stdout] --> src/server/server_message_conversion.rs:668:11 [INFO] [stdout] | [INFO] [stdout] 668 | x.actuator_type().clone(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `x.actuator_type()` [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 async expression only awaits a single future [INFO] [stdout] --> src/util/async_manager/tokio.rs:48:31 [INFO] [stdout] | [INFO] [stdout] 48 | futures::executor::block_on(async move { f.await }) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to: `f` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_async_block [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: found `.or(Some(…)).unwrap()` [INFO] [stdout] --> src/util/device_configuration.rs:123:18 [INFO] [stdout] | [INFO] [stdout] 123 | .or(Some( [INFO] [stdout] | __________________^ [INFO] [stdout] 124 | | defaults [INFO] [stdout] 125 | | .features [INFO] [stdout] 126 | | .as_ref() [INFO] [stdout] 127 | | .expect("Defaults always have features"), [INFO] [stdout] 128 | | )) [INFO] [stdout] 129 | | .unwrap(), [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_then_unwrap [INFO] [stdout] = note: `#[warn(clippy::or_then_unwrap)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 123 ~ .unwrap_or(defaults [INFO] [stdout] 124 + .features [INFO] [stdout] 125 + .as_ref() [INFO] [stdout] 126 ~ .expect("Defaults always have features")), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/util/device_configuration.rs:288:5 [INFO] [stdout] | [INFO] [stdout] 288 | / &main_config_str [INFO] [stdout] 289 | | .as_ref() [INFO] [stdout] 290 | | .unwrap_or(&DEVICE_CONFIGURATION_JSON.to_owned()), [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: change this to [INFO] [stdout] | [INFO] [stdout] 288 ~ main_config_str [INFO] [stdout] 289 + .as_ref() [INFO] [stdout] 290 ~ .unwrap_or(&DEVICE_CONFIGURATION_JSON.to_owned()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/util/device_configuration.rs:339:54 [INFO] [stdout] | [INFO] [stdout] 339 | load_protocol_config_from_json::(&user_config_str, skip_version_check)?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: change this to: `user_config_str` [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: enclosing `Ok` and `?` operator are unneeded [INFO] [stdout] --> src/util/device_configuration.rs:408:3 [INFO] [stdout] | [INFO] [stdout] 408 | / Ok(serde_json::to_string(&user_config_file).map_err(|e| { [INFO] [stdout] 409 | | ButtplugError::from(ButtplugDeviceError::DeviceConfigurationError(format!( [INFO] [stdout] 410 | | "Cannot save device configuration file: {e:?}", [INFO] [stdout] 411 | | ))) [INFO] [stdout] 412 | | })?) [INFO] [stdout] | |______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] = note: `#[warn(clippy::needless_question_mark)]` on by default [INFO] [stdout] help: remove the enclosing `Ok` and `?` operator [INFO] [stdout] | [INFO] [stdout] 408 ~ serde_json::to_string(&user_config_file).map_err(|e| { [INFO] [stdout] 409 | ButtplugError::from(ButtplugDeviceError::DeviceConfigurationError(format!( [INFO] [stdout] 410 | "Cannot save device configuration file: {e:?}", [INFO] [stdout] 411 | ))) [INFO] [stdout] 412 ~ }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/server/device/protocol/motorbunny.rs:68:32 [INFO] [stdout] | [INFO] [stdout] 68 | let mut rotate_command = vec![if rotate.1 { 0x2a } else { 0x29 }, rotate.0 as u8].repeat(7); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can use an array directly: `[if rotate.1 { 0x2a } else { 0x29 }, rotate.0 as u8]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/mod.rs:934:5 [INFO] [stdout] | [INFO] [stdout] 934 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 937 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 937 | ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/mod.rs:945:5 [INFO] [stdout] | [INFO] [stdout] 945 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 948 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 948 | ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/mod.rs:956:5 [INFO] [stdout] | [INFO] [stdout] 956 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 959 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 959 | ) -> BoxFuture<'_, Result> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/mod.rs:972:5 [INFO] [stdout] | [INFO] [stdout] 972 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 975 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 975 | ) -> BoxFuture<'_, Result> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/mod.rs:1004:5 [INFO] [stdout] | [INFO] [stdout] 1004 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 1007 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 1007 | ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/galaku.rs:196:5 [INFO] [stdout] | [INFO] [stdout] 196 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 199 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 199 | ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/galaku.rs:219:5 [INFO] [stdout] | [INFO] [stdout] 219 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 222 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 222 | ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/galaku.rs:242:5 [INFO] [stdout] | [INFO] [stdout] 242 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 245 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 245 | ) -> BoxFuture<'_, Result> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/kgoal_boost.rs:61:5 [INFO] [stdout] | [INFO] [stdout] 61 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 64 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 64 | ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/kgoal_boost.rs:147:5 [INFO] [stdout] | [INFO] [stdout] 147 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 150 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 150 | ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/kiiroo_prowand.rs:48:5 [INFO] [stdout] | [INFO] [stdout] 48 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 51 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 51 | ) -> BoxFuture<'_, Result> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/kiiroo_spot.rs:41:5 [INFO] [stdout] | [INFO] [stdout] 41 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 44 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 44 | ) -> BoxFuture<'_, Result> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/kiiroo_v21.rs:118:5 [INFO] [stdout] | [INFO] [stdout] 118 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 121 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 121 | ) -> BoxFuture<'_, Result> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/kiiroo_v21.rs:157:5 [INFO] [stdout] | [INFO] [stdout] 157 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 160 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 160 | ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/kiiroo_v21.rs:243:5 [INFO] [stdout] | [INFO] [stdout] 243 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 246 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 246 | ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/lovense.rs:383:5 [INFO] [stdout] | [INFO] [stdout] 383 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 386 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 386 | ) -> BoxFuture<'_, Result> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/lovense_connect_service.rs:293:5 [INFO] [stdout] | [INFO] [stdout] 293 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 296 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 296 | ) -> BoxFuture<'_, Result> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/xinput.rs:67:5 [INFO] [stdout] | [INFO] [stdout] 67 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 70 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 70 | ) -> BoxFuture<'_, Result> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/server.rs:128:21 [INFO] [stdout] | [INFO] [stdout] 128 | pub fn disconnect(&self) -> BoxFuture> { [INFO] [stdout] | ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 128 | pub fn disconnect(&self) -> BoxFuture<'_, Result<(), message::ErrorV0>> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/server_downgrade_wrapper.rs:71:21 [INFO] [stdout] | [INFO] [stdout] 71 | pub fn disconnect(&self) -> BoxFuture> { [INFO] [stdout] | ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 71 | pub fn disconnect(&self) -> BoxFuture<'_, Result<(), message::ErrorV0>> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/server/device/hardware/communication/hid/hid_comm_manager.rs:67:67 [INFO] [stdout] | [INFO] [stdout] 67 | let device_creator = HidHardwareConnector::new(api.clone(), &device); [INFO] [stdout] | ^^^^^^^ help: change this to: `device` [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/device/hardware/communication/hid/hid_device_impl.rs:80:7 [INFO] [stdout] | [INFO] [stdout] 80 | &self.device_info.product_string().unwrap(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `self.device_info.product_string().unwrap()` [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/device/hardware/communication/hid/hid_device_impl.rs:81:7 [INFO] [stdout] | [INFO] [stdout] 81 | &self.device_info.serial_number().unwrap(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `self.device_info.serial_number().unwrap()` [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/device/hardware/communication/hid/hidapi_async.rs:58:55 [INFO] [stdout] | [INFO] [stdout] 58 | inner: self.inner.as_ref().map(|dev| Arc::clone(&dev)), [INFO] [stdout] | ^^^^ help: change this to: `dev` [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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/server/device/hardware/communication/hid/hidapi_async.rs:73:9 [INFO] [stdout] | [INFO] [stdout] 73 | / match guard.read_thread.take() { [INFO] [stdout] 74 | | Some(jh) => match jh.join() { [INFO] [stdout] 75 | | Ok(_) => info!("device read thread joined"), [INFO] [stdout] 76 | | Err(_) => {} //error!("failed to join device read thread"), [INFO] [stdout] 77 | | }, [INFO] [stdout] 78 | | None => {} //error!("already joined"), [INFO] [stdout] 79 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = note: you might want to preserve the comments from inside the `match` [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] 73 ~ if let Some(jh) = guard.read_thread.take() { match jh.join() { [INFO] [stdout] 74 + Ok(_) => info!("device read thread joined"), [INFO] [stdout] 75 + Err(_) => {} //error!("failed to join device read thread"), [INFO] [stdout] 76 + } } [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/device/hardware/communication/hid/hidapi_async.rs:74:23 [INFO] [stdout] | [INFO] [stdout] 74 | Some(jh) => match jh.join() { [INFO] [stdout] | _______________________^ [INFO] [stdout] 75 | | Ok(_) => info!("device read thread joined"), [INFO] [stdout] 76 | | Err(_) => {} //error!("failed to join device read thread"), [INFO] [stdout] 77 | | }, [INFO] [stdout] | |___________^ help: try: `if let Ok(_) = jh.join() { info!("device read thread joined") }` [INFO] [stdout] | [INFO] [stdout] = note: you might want to preserve the comments from inside the `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_err()` [INFO] [stdout] --> src/server/device/hardware/communication/hid/hidapi_async.rs:129:26 [INFO] [stdout] | [INFO] [stdout] 129 | if let Err(_) = data_tx.send(Some(buf)) { [INFO] [stdout] | -------^^^^^^-------------------------- help: try: `if data_tx.send(Some(buf)).is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [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/device/hardware/communication/hid/hidapi_async.rs:182:22 [INFO] [stdout] | [INFO] [stdout] 182 | Ok(guard) => match guard.device.lock() { [INFO] [stdout] | ______________________^ [INFO] [stdout] 183 | | Ok(guard) => { [INFO] [stdout] 184 | | guard [INFO] [stdout] 185 | | .write(&buf[..]) [INFO] [stdout] ... | [INFO] [stdout] 189 | | Err(_) => {} //error!("{:?}", e), [INFO] [stdout] 190 | | }, [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = note: you might want to preserve the comments from inside the `match` [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] 182 ~ Ok(guard) => if let Ok(guard) = guard.device.lock() { [INFO] [stdout] 183 + guard [INFO] [stdout] 184 + .write(&buf[..]) [INFO] [stdout] 185 + .map_err(|e| io::Error::new(io::ErrorKind::Other, format!("hidapi failed: {}", e)))?; [INFO] [stdout] 186 + //debug!("Wrote: {:?}", &buf[0..max_len]); [INFO] [stdout] 187 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant slicing of the whole range [INFO] [stdout] --> src/server/device/hardware/communication/hid/hidapi_async.rs:185:22 [INFO] [stdout] | [INFO] [stdout] 185 | .write(&buf[..]) [INFO] [stdout] | ^^^^^^^^ help: use the original value instead: `buf` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_slicing [INFO] [stdout] = note: `#[warn(clippy::redundant_slicing)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/server/device/hardware/communication/hid/hidapi_async.rs:186:28 [INFO] [stdout] | [INFO] [stdout] 186 | .map_err(|e| io::Error::new(io::ErrorKind::Other, format!("hidapi failed: {}", e)))?; [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] 186 - .map_err(|e| io::Error::new(io::ErrorKind::Other, format!("hidapi failed: {}", e)))?; [INFO] [stdout] 186 + .map_err(|e| io::Error::other(format!("hidapi failed: {}", e)))?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/server/device/hardware/communication/hid/hidapi_async.rs:192:34 [INFO] [stdout] | [INFO] [stdout] 192 | return Poll::Ready(Err(io::Error::new( [INFO] [stdout] | __________________________________^ [INFO] [stdout] 193 | | io::ErrorKind::Other, [INFO] [stdout] 194 | | format!("Mutex broken: {:?}", e), [INFO] [stdout] 195 | | ))) [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] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 192 ~ return Poll::Ready(Err(io::Error::other( [INFO] [stdout] 193 ~ format!("Mutex broken: {:?}", e), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/server/device/hardware/communication/hid/hidapi_async.rs:237:20 [INFO] [stdout] | [INFO] [stdout] 237 | .map_err(|e| io::Error::new(io::ErrorKind::Other, format!("Mutex broken: {:?}", e)))?; [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] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 237 - .map_err(|e| io::Error::new(io::ErrorKind::Other, format!("Mutex broken: {:?}", e)))?; [INFO] [stdout] 237 + .map_err(|e| io::Error::other(format!("Mutex broken: {:?}", e)))?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/server/device/hardware/communication/hid/hidapi_async.rs:281:40 [INFO] [stdout] | [INFO] [stdout] 281 | return Poll::Ready(Err(io::Error::new( [INFO] [stdout] | ________________________________________^ [INFO] [stdout] 282 | | io::ErrorKind::Other, [INFO] [stdout] 283 | | "Inner channel dead", [INFO] [stdout] 284 | | ))); [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] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 281 ~ return Poll::Ready(Err(io::Error::other( [INFO] [stdout] 282 ~ "Inner channel dead", [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-binding `let` on a future [INFO] [stdout] --> src/server/device/hardware/communication/mod.rs:197:5 [INFO] [stdout] | [INFO] [stdout] 197 | let _ = self.stop_scanning(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider awaiting the future or dropping explicitly with `std::mem::drop` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_underscore_future [INFO] [stdout] = note: `#[warn(clippy::let_underscore_future)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/server/device/protocol/actuator_command_manager.rs:118:24 [INFO] [stdout] | [INFO] [stdout] 118 | pub fn new(features: &Vec) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 118 - pub fn new(features: &Vec) -> Self { [INFO] [stdout] 118 + pub fn new(features: &[DeviceFeature]) -> Self { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `FeatureType` which implements the `Copy` trait [INFO] [stdout] --> src/server/device/protocol/actuator_command_manager.rs:126:43 [INFO] [stdout] | [INFO] [stdout] 126 | let actuator_type: ActuatorType = feature.feature_type().clone().try_into().unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `(*feature.feature_type())` [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/device/protocol/actuator_command_manager.rs:159:8 [INFO] [stdout] | [INFO] [stdout] 159 | ) -> Result, ButtplugError> { [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: this `if` statement can be collapsed [INFO] [stdout] --> src/server/device/protocol/actuator_command_manager.rs:187:14 [INFO] [stdout] | [INFO] [stdout] 187 | } else if match_all { [INFO] [stdout] | ______________^ [INFO] [stdout] 188 | | if cmd.messages().contains(&msg_type) { [INFO] [stdout] 189 | | result.push((u32_index, *cmd.actuator_type(), cmd.current().1)); [INFO] [stdout] 190 | | } [INFO] [stdout] 191 | | } [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] 187 ~ } else if match_all [INFO] [stdout] 188 ~ && cmd.messages().contains(&msg_type) { [INFO] [stdout] 189 | result.push((u32_index, *cmd.actuator_type(), cmd.current().1)); [INFO] [stdout] 190 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> src/server/device/protocol/fleshlight_launch_helper.rs:23:5 [INFO] [stdout] | [INFO] [stdout] 23 | / ((90f64 - (diff / mil * 90f64)) / 100f64) [INFO] [stdout] 24 | | .min(1f64) [INFO] [stdout] 25 | | .max(0f64) [INFO] [stdout] | |________________^ help: replace with clamp: `((90f64 - (diff / mil * 90f64)) / 100f64).clamp(0f64, 1f64)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min, min.is_nan(), or max.is_nan() [INFO] [stdout] = note: clamp returns NaN if the input is NaN [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] = note: `#[warn(clippy::manual_clamp)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> src/server/device/protocol/foreo.rs:39:5 [INFO] [stdout] | [INFO] [stdout] 39 | ph.mode = 0; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `server::device::protocol::foreo::Foreo { mode: 0 }` and removing relevant reassignments [INFO] [stdout] --> src/server/device/protocol/foreo.rs:38:5 [INFO] [stdout] | [INFO] [stdout] 38 | let mut ph = Foreo::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] = note: `#[warn(clippy::field_reassign_with_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server/device/protocol/galaku.rs:48:3 [INFO] [stdout] | [INFO] [stdout] 48 | return KEY_TAB[e][t]; [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] 48 - return KEY_TAB[e][t]; [INFO] [stdout] 48 + KEY_TAB[e][t] [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server/device/protocol/galaku.rs:58:3 [INFO] [stdout] | [INFO] [stdout] 58 | return new_data; [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] 58 - return new_data; [INFO] [stdout] 58 + new_data [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server/device/protocol/galaku.rs:68:3 [INFO] [stdout] | [INFO] [stdout] 68 | return new_data; [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] 68 - return new_data; [INFO] [stdout] 68 + new_data [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server/device/protocol/galaku.rs:79:3 [INFO] [stdout] | [INFO] [stdout] 79 | return uint8_array; [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] 79 - return uint8_array; [INFO] [stdout] 79 + uint8_array [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server/device/protocol/galaku.rs:88:6 [INFO] [stdout] | [INFO] [stdout] 88 | if decrypted_data.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!decrypted_data.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: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> src/server/device/protocol/galaku.rs:108:5 [INFO] [stdout] | [INFO] [stdout] 108 | protocol.is_caiping_pump_device = false; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `server::device::protocol::galaku::Galaku { is_caiping_pump_device: false }` and removing relevant reassignments [INFO] [stdout] --> src/server/device/protocol/galaku.rs:107:5 [INFO] [stdout] | [INFO] [stdout] 107 | let mut protocol = Galaku::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::message::sensor_reading::SensorReadingV4` [INFO] [stdout] --> src/server/device/protocol/galaku.rs:267:16 [INFO] [stdout] | [INFO] [stdout] 267 | Ok(battery_reading.into()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `battery_reading` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::ops::Range` [INFO] [stdout] --> src/server/device/protocol/kiiroo_v21.rs:203:40 [INFO] [stdout] | [INFO] [stdout] 203 | let analog: Vec = (0..4) [INFO] [stdout] | ________________________________________^ [INFO] [stdout] 204 | | .into_iter() [INFO] [stdout] | |______________________________^ help: consider removing `.into_iter()`: `(0..4)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::ops::Range` [INFO] [stdout] --> src/server/device/protocol/kiiroo_v21.rs:209:41 [INFO] [stdout] | [INFO] [stdout] 209 | let digital: Vec = (0..4) [INFO] [stdout] | _________________________________________^ [INFO] [stdout] 210 | | .into_iter() [INFO] [stdout] | |______________________________^ help: consider removing `.into_iter()`: `(0..4)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `cmds.get(0)` [INFO] [stdout] --> src/server/device/protocol/kiiroo_v2_vibrator.rs:36:9 [INFO] [stdout] | [INFO] [stdout] 36 | / cmds [INFO] [stdout] 37 | | .get(0) [INFO] [stdout] | |_________________^ help: try: `cmds.first()` [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: casting a character literal to `u8` truncates [INFO] [stdout] --> src/server/device/protocol/kizuna.rs:33:31 [INFO] [stdout] | [INFO] [stdout] 33 | vec![48 + scalar as u8, '\r' as u8, '\n' as u8], [INFO] [stdout] | ^^^^^^^^^^ help: use a byte literal instead: `b'\r'` [INFO] [stdout] | [INFO] [stdout] = note: `char` is four bytes wide, but `u8` is a single byte [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stdout] = note: `#[warn(clippy::char_lit_as_u8)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting a character literal to `u8` truncates [INFO] [stdout] --> src/server/device/protocol/kizuna.rs:33:43 [INFO] [stdout] | [INFO] [stdout] 33 | vec![48 + scalar as u8, '\r' as u8, '\n' as u8], [INFO] [stdout] | ^^^^^^^^^^ help: use a byte literal instead: `b'\n'` [INFO] [stdout] | [INFO] [stdout] = note: `char` is four bytes wide, but `u8` is a single byte [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/server/device/protocol/libo_elle.rs:35:12 [INFO] [stdout] | [INFO] [stdout] 35 | if speed as u8 > 0 && speed <= 7 { [INFO] [stdout] | ^^^^^^^^^^^ help: try: `speed` [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: unneeded `return` statement [INFO] [stdout] --> src/server/device/protocol/longlosttouch.rs:95:3 [INFO] [stdout] | [INFO] [stdout] 95 | return cmds; [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] 95 - return cmds; [INFO] [stdout] 95 + cmds [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `u8` is unnecessary [INFO] [stdout] --> src/server/device/protocol/longlosttouch.rs:88:13 [INFO] [stdout] | [INFO] [stdout] 88 | i + 1 as u8, [INFO] [stdout] | ^^^^^^^ help: try: `1_u8` [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: useless conversion to the same type: `server::device::hardware::HardwareWriteCmd` [INFO] [stdout] --> src/server/device/protocol/longlosttouch.rs:103:23 [INFO] [stdout] | [INFO] [stdout] 103 | .write_value(&HardwareWriteCmd::new(Endpoint::Tx, cmd, true).into()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `HardwareWriteCmd::new(Endpoint::Tx, cmd, true)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `message.vectors().get(0)` [INFO] [stdout] --> src/server/device/protocol/loob.rs:54:24 [INFO] [stdout] | [INFO] [stdout] 54 | if let Some(vec) = message.vectors().get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `message.vectors().first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> src/server/device/protocol/loob.rs:55:22 [INFO] [stdout] | [INFO] [stdout] 55 | let pos: u16 = max(min((vec.position() * 1000.0) as u16, 1000), 1); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with clamp: `((vec.position() * 1000.0) as u16).clamp(1, 1000)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the variable `i` is used as a loop counter [INFO] [stdout] --> src/server/device/protocol/lovehoney_desire.rs:68:7 [INFO] [stdout] | [INFO] [stdout] 68 | for cmd in cmds { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: consider using: `for (i, cmd) in (1..).zip(cmds.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: compiling a regex in a loop [INFO] [stdout] --> src/server/device/protocol/lovense.rs:118:22 [INFO] [stdout] | [INFO] [stdout] 118 | let re = Regex::new(r"LVS-([A-Z]+)\d+").expect("Static regex shouldn't fail"); [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: move the regex construction outside this loop [INFO] [stdout] --> src/server/device/protocol/lovense.rs:94:5 [INFO] [stdout] | [INFO] [stdout] 94 | loop { [INFO] [stdout] | ^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#regex_creation_in_loops [INFO] [stdout] = note: `#[warn(clippy::regex_creation_in_loops)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `cmds.get(0)` [INFO] [stdout] --> src/server/device/protocol/lovense.rs:368:45 [INFO] [stdout] | [INFO] [stdout] 368 | if let Some(Some((speed, clockwise))) = cmds.get(0) { [INFO] [stdout] | ^^^^^^^^^^^ help: try: `cmds.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::message::sensor_reading::SensorReadingV4` [INFO] [stdout] --> src/server/device/protocol/lovense.rs:412:19 [INFO] [stdout] | [INFO] [stdout] 412 | / message::SensorReadingV4::new( [INFO] [stdout] 413 | | message.device_index(), [INFO] [stdout] 414 | | *message.feature_index(), [INFO] [stdout] 415 | | message::SensorType::Battery, [INFO] [stdout] ... | [INFO] [stdout] 418 | | .into(), [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `.into()` [INFO] [stdout] | [INFO] [stdout] 412 ~ message::SensorReadingV4::new( [INFO] [stdout] 413 + message.device_index(), [INFO] [stdout] 414 + *message.feature_index(), [INFO] [stdout] 415 + message::SensorType::Battery, [INFO] [stdout] 416 + vec![level as i32], [INFO] [stdout] 417 ~ ), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i32` -> `i32`) [INFO] [stdout] --> src/server/device/protocol/lovense.rs:472:29 [INFO] [stdout] | [INFO] [stdout] 472 | current_move_amount = (goal_position as i32 - current_position) as i32 / move_steps as i32; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `((goal_position as i32 - current_position))` [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: casting to the same type is unnecessary (`i32` -> `i32`) [INFO] [stdout] --> src/server/device/protocol/lovense.rs:472:30 [INFO] [stdout] | [INFO] [stdout] 472 | current_move_amount = (goal_position as i32 - current_position) as i32 / move_steps as i32; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `goal_position` [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: useless conversion to the same type: `server::device::hardware::HardwareWriteCmd` [INFO] [stdout] --> src/server/device/protocol/lovense_connect_service.rs:71:23 [INFO] [stdout] | [INFO] [stdout] 71 | .write_value(&HardwareWriteCmd::new(Endpoint::Tx, lovense_cmd, false).into()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `HardwareWriteCmd::new(Endpoint::Tx, lovense_cmd, false)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `cmds.get(0)` [INFO] [stdout] --> src/server/device/protocol/lovense_connect_service.rs:276:45 [INFO] [stdout] | [INFO] [stdout] 276 | if let Some(Some((speed, clockwise))) = cmds.get(0) { [INFO] [stdout] | ^^^^^^^^^^^ help: try: `cmds.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::message::sensor_reading::SensorReadingV4` [INFO] [stdout] --> src/server/device/protocol/lovense_connect_service.rs:305:9 [INFO] [stdout] | [INFO] [stdout] 305 | / message::SensorReadingV4::new( [INFO] [stdout] 306 | | msg.device_index(), [INFO] [stdout] 307 | | *msg.feature_index(), [INFO] [stdout] 308 | | *msg.sensor_type(), [INFO] [stdout] ... | [INFO] [stdout] 311 | | .into(), [INFO] [stdout] | |_______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `.into()` [INFO] [stdout] | [INFO] [stdout] 305 ~ message::SensorReadingV4::new( [INFO] [stdout] 306 + msg.device_index(), [INFO] [stdout] 307 + *msg.feature_index(), [INFO] [stdout] 308 + *msg.sensor_type(), [INFO] [stdout] 309 + vec![reading.data()[0] as i32], [INFO] [stdout] 310 ~ ), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/server/device/protocol/luvmazer.rs:38:42 [INFO] [stdout] | [INFO] [stdout] 38 | vec![0xa0, 0x0f, 0x00, 0x00, 0x64, scalar as u8], [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `scalar` [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 loop variable `i` is used to index `commands` [INFO] [stdout] --> src/server/device/protocol/metaxsire_v2.rs:54:14 [INFO] [stdout] | [INFO] [stdout] 54 | for i in 0..commands.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 54 - for i in 0..commands.len() { [INFO] [stdout] 54 + for (i, ) in commands.iter().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/server/device/protocol/metaxsire_v3.rs:59:17 [INFO] [stdout] | [INFO] [stdout] 59 | errored = !device [INFO] [stdout] | _________________^ [INFO] [stdout] 60 | | .write_value(&HardwareWriteCmd::new( [INFO] [stdout] 61 | | Endpoint::Tx, [INFO] [stdout] 62 | | vec![0xa1, 0x04, current_commands[i], i as u8 + 1], [INFO] [stdout] ... | [INFO] [stdout] 65 | | .await [INFO] [stdout] 66 | | .is_ok(); [INFO] [stdout] | |________________^ [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] help: try [INFO] [stdout] | [INFO] [stdout] 59 ~ errored = device [INFO] [stdout] 60 + .write_value(&HardwareWriteCmd::new( [INFO] [stdout] 61 + Endpoint::Tx, [INFO] [stdout] 62 + vec![0xa1, 0x04, current_commands[i], i as u8 + 1], [INFO] [stdout] 63 + false, [INFO] [stdout] 64 + )) [INFO] [stdout] 65 ~ .await.is_err(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `current_commands` [INFO] [stdout] --> src/server/device/protocol/metaxsire_v3.rs:55:14 [INFO] [stdout] | [INFO] [stdout] 55 | for i in 0..current_commands.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 55 - for i in 0..current_commands.len() { [INFO] [stdout] 55 + for (i, ) in current_commands.iter().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/server/device/protocol/monsterpub.rs:52:39 [INFO] [stdout] | [INFO] [stdout] 52 | Ok(data) => std::str::from_utf8(&data.data()) [INFO] [stdout] | ^^^^^^^^^^^^ help: change this to: `data.data()` [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: you seem to use `.enumerate()` and immediately discard the index [INFO] [stdout] --> src/server/device/protocol/monsterpub.rs:157:32 [INFO] [stdout] | [INFO] [stdout] 157 | for (_, cmd) in cmds.iter().enumerate() { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_enumerate_index [INFO] [stdout] = note: `#[warn(clippy::unused_enumerate_index)]` on by default [INFO] [stdout] help: remove the `.enumerate()` call [INFO] [stdout] | [INFO] [stdout] 157 - for (_, cmd) in cmds.iter().enumerate() { [INFO] [stdout] 157 + for cmd in cmds.iter() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/server/device/protocol/nintendo_joycon.rs:115:47 [INFO] [stdout] | [INFO] [stdout] 115 | send_sub_command_raw(device, packet_number, sub_command as u8, data).await [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `sub_command` [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: clamp-like pattern without using clamp function [INFO] [stdout] --> src/server/device/protocol/nintendo_joycon.rs:142:16 [INFO] [stdout] | [INFO] [stdout] 142 | let freq = if freq < 0.0 { [INFO] [stdout] | ________________^ [INFO] [stdout] 143 | | 0.0 [INFO] [stdout] 144 | | } else if freq > 1252.0 { [INFO] [stdout] 145 | | 1252.0 [INFO] [stdout] 146 | | } else { [INFO] [stdout] 147 | | freq [INFO] [stdout] 148 | | }; [INFO] [stdout] | |_____^ help: replace with clamp: `freq.clamp(0.0, 1252.0)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min, min.is_nan(), or max.is_nan() [INFO] [stdout] = note: clamp returns NaN if the input is NaN [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> src/server/device/protocol/nintendo_joycon.rs:150:15 [INFO] [stdout] | [INFO] [stdout] 150 | let amp = if amp < 0.0 { [INFO] [stdout] | _______________^ [INFO] [stdout] 151 | | 0.0 [INFO] [stdout] 152 | | } else if amp > 1.799 { [INFO] [stdout] 153 | | 1.799 [INFO] [stdout] 154 | | } else { [INFO] [stdout] 155 | | amp [INFO] [stdout] 156 | | }; [INFO] [stdout] | |_____^ help: replace with clamp: `amp.clamp(0.0, 1.799)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min, min.is_nan(), or max.is_nan() [INFO] [stdout] = note: clamp returns NaN if the input is NaN [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: an implementation of `From` is preferred since it gives you `Into<_>` for free where the reverse isn't true [INFO] [stdout] --> src/server/device/protocol/nintendo_joycon.rs:178:1 [INFO] [stdout] | [INFO] [stdout] 178 | impl Into<[u8; 4]> for Rumble { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: `impl From for Foreign` is allowed by the orphan rules, for more information see [INFO] [stdout] https://doc.rust-lang.org/reference/items/implementations.html#trait-implementation-coherence [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#from_over_into [INFO] [stdout] = note: `#[warn(clippy::from_over_into)]` on by default [INFO] [stdout] help: replace the `Into` implementation with `From` [INFO] [stdout] | [INFO] [stdout] 178 ~ impl From for [u8; 4] { [INFO] [stdout] 179 ~ fn from(val: Rumble) -> Self { [INFO] [stdout] 180 ~ let encoded_hex_freq = f32::round(f32::log2(val.frequency / 10.0) * 32.0) as u8; [INFO] [stdout] 181 | [INFO] [stdout] ... [INFO] [stdout] 184 | [INFO] [stdout] 185 ~ let encoded_hex_amp = if val.amplitude > 0.23 { [INFO] [stdout] 186 ~ f32::round(f32::log2(val.amplitude * 8.7) * 32.0) as u8 [INFO] [stdout] 187 ~ } else if val.amplitude > 0.12 { [INFO] [stdout] 188 ~ f32::round(f32::log2(val.amplitude * 17.0) * 16.0) as u8 [INFO] [stdout] 189 | } else { [INFO] [stdout] 190 ~ f32::round(((f32::log2(val.amplitude) * 32.0) - 96.0) / (4.0 - 2.0 * val.amplitude)) as u8 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_err()` [INFO] [stdout] --> src/server/device/protocol/nintendo_joycon.rs:274:16 [INFO] [stdout] | [INFO] [stdout] 274 | if let Err(_) = [INFO] [stdout] | _________- ^^^^^^ [INFO] [stdout] 275 | | send_command_raw(hardware.clone(), 1, 16, 0, &[], Some(rumble), Some(rumble)).await [INFO] [stdout] | |_____________________________________________________________________________________________- help: try: `if send_command_raw(hardware.clone(), 1, 16, 0, &[], Some(rumble), Some(rumble)).await.is_err()` [INFO] [stdout] | [INFO] [stdout] = note: this will change drop order of the result, as well as all temporaries [INFO] [stdout] = note: add `#[allow(clippy::redundant_pattern_matching)]` if this is important [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> src/server/device/protocol/sensee_v2.rs:44:5 [INFO] [stdout] | [INFO] [stdout] 44 | / protocol.device_type = if res.data().len() >= 6 { [INFO] [stdout] 45 | | res.data()[6] [INFO] [stdout] 46 | | } else { [INFO] [stdout] 47 | | 0x66 [INFO] [stdout] 48 | | }; [INFO] [stdout] | |______^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `server::device::protocol::sensee_v2::SenseeV2 { device_type: if res.data().len() >= 6 { [INFO] [stdout] res.data()[6] [INFO] [stdout] } else { [INFO] [stdout] 0x66 [INFO] [stdout] }, vibe_count: device_definition [INFO] [stdout] .features() [INFO] [stdout] .iter() [INFO] [stdout] .filter(|x| [FeatureType::Vibrate].contains(x.feature_type())) [INFO] [stdout] .count(), thrust_count: device_definition [INFO] [stdout] .features() [INFO] [stdout] .iter() [INFO] [stdout] .filter(|x| [FeatureType::Oscillate].contains(x.feature_type())) [INFO] [stdout] .count(), suck_count: device_definition [INFO] [stdout] .features() [INFO] [stdout] .iter() [INFO] [stdout] .filter(|x| [FeatureType::Constrict].contains(x.feature_type())) [INFO] [stdout] .count() }` and removing relevant reassignments [INFO] [stdout] --> src/server/device/protocol/sensee_v2.rs:43:5 [INFO] [stdout] | [INFO] [stdout] 43 | let mut protocol = SenseeV2::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `vibes` [INFO] [stdout] --> src/server/device/protocol/sensee_v2.rs:131:16 [INFO] [stdout] | [INFO] [stdout] 131 | for i in 0..self.vibe_count { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 131 - for i in 0..self.vibe_count { [INFO] [stdout] 131 + for (i, ) in vibes.iter().enumerate().take(self.vibe_count) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `thrusts` [INFO] [stdout] --> src/server/device/protocol/sensee_v2.rs:139:16 [INFO] [stdout] | [INFO] [stdout] 139 | for i in 0..self.thrust_count { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 139 - for i in 0..self.thrust_count { [INFO] [stdout] 139 + for (i, ) in thrusts.iter().enumerate().take(self.thrust_count) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `sucks` [INFO] [stdout] --> src/server/device/protocol/sensee_v2.rs:147:16 [INFO] [stdout] | [INFO] [stdout] 147 | for i in 0..self.suck_count { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 147 - for i in 0..self.suck_count { [INFO] [stdout] 147 + for (i, ) in sucks.iter().enumerate().take(self.suck_count) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/server/device/protocol/svakom_avaneo.rs:49:32 [INFO] [stdout] | [INFO] [stdout] 49 | [0x55, mode, 0x00, 0x00, scalar as u8, 0xff].to_vec(), [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `{ scalar }` [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: called `unwrap` on `hcmd` after checking its variant with `is_some` [INFO] [stdout] --> src/server/device/protocol/svakom_avaneo.rs:96:17 [INFO] [stdout] | [INFO] [stdout] 95 | return if hcmd.is_some() { [INFO] [stdout] | ----------------- help: try: `if let Some() = hcmd` [INFO] [stdout] 96 | Ok(vec![hcmd.unwrap().into()]) [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 `hcmd` after checking its variant with `is_some` [INFO] [stdout] --> src/server/device/protocol/svakom_avaneo.rs:124:15 [INFO] [stdout] | [INFO] [stdout] 123 | return if hcmd.is_some() { [INFO] [stdout] | ----------------- help: try: `if let Some() = hcmd` [INFO] [stdout] 124 | Ok(vec![hcmd.unwrap().into()]) [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: unneeded `return` statement [INFO] [stdout] --> src/server/device/protocol/svakom_avaneo.rs:123:5 [INFO] [stdout] | [INFO] [stdout] 123 | / return if hcmd.is_some() { [INFO] [stdout] 124 | | Ok(vec![hcmd.unwrap().into()]) [INFO] [stdout] 125 | | } else { [INFO] [stdout] 126 | | Ok(vec![]) [INFO] [stdout] 127 | | }; [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] 123 ~ if hcmd.is_some() { [INFO] [stdout] 124 + Ok(vec![hcmd.unwrap().into()]) [INFO] [stdout] 125 + } else { [INFO] [stdout] 126 + Ok(vec![]) [INFO] [stdout] 127 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server/device/protocol/svakom_avaneo.rs:72:8 [INFO] [stdout] | [INFO] [stdout] 72 | if cmds.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `cmds.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: called `unwrap` on `hcmd` after checking its variant with `is_some` [INFO] [stdout] --> src/server/device/protocol/svakom_dt250a.rs:94:17 [INFO] [stdout] | [INFO] [stdout] 93 | return if hcmd.is_some() { [INFO] [stdout] | ----------------- help: try: `if let Some() = hcmd` [INFO] [stdout] 94 | Ok(vec![hcmd.unwrap().into()]) [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 `hcmd` after checking its variant with `is_some` [INFO] [stdout] --> src/server/device/protocol/svakom_dt250a.rs:126:17 [INFO] [stdout] | [INFO] [stdout] 125 | return if hcmd.is_some() { [INFO] [stdout] | ----------------- help: try: `if let Some() = hcmd` [INFO] [stdout] 126 | Ok(vec![hcmd.unwrap().into()]) [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 `hcmd` after checking its variant with `is_some` [INFO] [stdout] --> src/server/device/protocol/svakom_dt250a.rs:146:15 [INFO] [stdout] | [INFO] [stdout] 145 | return if hcmd.is_some() { [INFO] [stdout] | ----------------- help: try: `if let Some() = hcmd` [INFO] [stdout] 146 | Ok(vec![hcmd.unwrap().into()]) [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: unneeded `return` statement [INFO] [stdout] --> src/server/device/protocol/svakom_dt250a.rs:145:5 [INFO] [stdout] | [INFO] [stdout] 145 | / return if hcmd.is_some() { [INFO] [stdout] 146 | | Ok(vec![hcmd.unwrap().into()]) [INFO] [stdout] 147 | | } else { [INFO] [stdout] 148 | | Ok(vec![]) [INFO] [stdout] 149 | | }; [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] 145 ~ if hcmd.is_some() { [INFO] [stdout] 146 + Ok(vec![hcmd.unwrap().into()]) [INFO] [stdout] 147 + } else { [INFO] [stdout] 148 + Ok(vec![]) [INFO] [stdout] 149 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server/device/protocol/svakom_dt250a.rs:68:8 [INFO] [stdout] | [INFO] [stdout] 68 | if cmds.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `cmds.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: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/server/device/protocol/svakom_suitcase.rs:49:32 [INFO] [stdout] | [INFO] [stdout] 49 | [0x55, 0x09, 0x00, 0x00, scalar as u8, 0x00].to_vec(), [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `{ scalar }` [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: called `unwrap` on `hcmd` after checking its variant with `is_some` [INFO] [stdout] --> src/server/device/protocol/svakom_suitcase.rs:100:17 [INFO] [stdout] | [INFO] [stdout] 99 | return if hcmd.is_some() { [INFO] [stdout] | ----------------- help: try: `if let Some() = hcmd` [INFO] [stdout] 100 | Ok(vec![hcmd.unwrap().into()]) [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 `hcmd` after checking its variant with `is_some` [INFO] [stdout] --> src/server/device/protocol/svakom_suitcase.rs:124:15 [INFO] [stdout] | [INFO] [stdout] 123 | return if hcmd.is_some() { [INFO] [stdout] | ----------------- help: try: `if let Some() = hcmd` [INFO] [stdout] 124 | Ok(vec![hcmd.unwrap().into()]) [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: unneeded `return` statement [INFO] [stdout] --> src/server/device/protocol/svakom_suitcase.rs:123:5 [INFO] [stdout] | [INFO] [stdout] 123 | / return if hcmd.is_some() { [INFO] [stdout] 124 | | Ok(vec![hcmd.unwrap().into()]) [INFO] [stdout] 125 | | } else { [INFO] [stdout] 126 | | Ok(vec![]) [INFO] [stdout] 127 | | }; [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] 123 ~ if hcmd.is_some() { [INFO] [stdout] 124 + Ok(vec![hcmd.unwrap().into()]) [INFO] [stdout] 125 + } else { [INFO] [stdout] 126 + Ok(vec![]) [INFO] [stdout] 127 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server/device/protocol/svakom_suitcase.rs:72:8 [INFO] [stdout] | [INFO] [stdout] 72 | if cmds.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `cmds.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: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/server/device/protocol/svakom_tarax.rs:50:32 [INFO] [stdout] | [INFO] [stdout] 50 | [0x55, 0x09, 0x00, 0x00, scalar as u8, 0x00].to_vec(), [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `{ scalar }` [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: called `unwrap` on `hcmd` after checking its variant with `is_some` [INFO] [stdout] --> src/server/device/protocol/svakom_tarax.rs:97:17 [INFO] [stdout] | [INFO] [stdout] 96 | return if hcmd.is_some() { [INFO] [stdout] | ----------------- help: try: `if let Some() = hcmd` [INFO] [stdout] 97 | Ok(vec![hcmd.unwrap().into()]) [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 `hcmd` after checking its variant with `is_some` [INFO] [stdout] --> src/server/device/protocol/svakom_tarax.rs:121:15 [INFO] [stdout] | [INFO] [stdout] 120 | return if hcmd.is_some() { [INFO] [stdout] | ----------------- help: try: `if let Some() = hcmd` [INFO] [stdout] 121 | Ok(vec![hcmd.unwrap().into()]) [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: unneeded `return` statement [INFO] [stdout] --> src/server/device/protocol/svakom_tarax.rs:120:5 [INFO] [stdout] | [INFO] [stdout] 120 | / return if hcmd.is_some() { [INFO] [stdout] 121 | | Ok(vec![hcmd.unwrap().into()]) [INFO] [stdout] 122 | | } else { [INFO] [stdout] 123 | | Ok(vec![]) [INFO] [stdout] 124 | | }; [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] 120 ~ if hcmd.is_some() { [INFO] [stdout] 121 + Ok(vec![hcmd.unwrap().into()]) [INFO] [stdout] 122 + } else { [INFO] [stdout] 123 + Ok(vec![]) [INFO] [stdout] 124 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server/device/protocol/svakom_tarax.rs:73:8 [INFO] [stdout] | [INFO] [stdout] 73 | if cmds.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `cmds.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: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/server/device/protocol/svakom_v4.rs:56:9 [INFO] [stdout] | [INFO] [stdout] 56 | scalar as u8, [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `{ scalar }` [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: length comparison to zero [INFO] [stdout] --> src/server/device/protocol/svakom_v5.rs:79:8 [INFO] [stdout] | [INFO] [stdout] 79 | if vibes.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!vibes.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/device/protocol/svakom_v5.rs:132:8 [INFO] [stdout] | [INFO] [stdout] 132 | if oscs.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!oscs.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: `filter(..).map(..)` can be simplified as `filter_map(..)` [INFO] [stdout] --> src/server/device/protocol/svakom_v5.rs:153:8 [INFO] [stdout] | [INFO] [stdout] 153 | .filter(|c| c.is_some()) [INFO] [stdout] | ________^ [INFO] [stdout] 154 | | .map(|c| c.unwrap_or((Vibrate, 0))) [INFO] [stdout] | |_________________________________________^ help: try: `filter_map(|c| *c)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_filter_map [INFO] [stdout] = note: `#[warn(clippy::manual_filter_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/server/device/protocol/svakom_v6.rs:84:8 [INFO] [stdout] | [INFO] [stdout] 84 | if vibes.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!vibes.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: `filter(..).map(..)` can be simplified as `filter_map(..)` [INFO] [stdout] --> src/server/device/protocol/svakom_v6.rs:158:8 [INFO] [stdout] | [INFO] [stdout] 158 | .filter(|c| c.is_some()) [INFO] [stdout] | ________^ [INFO] [stdout] 159 | | .map(|c| c.unwrap_or((Vibrate, 0))) [INFO] [stdout] | |_________________________________________^ help: try: `filter_map(|c| *c)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_filter_map [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `cmds.get(0)` [INFO] [stdout] --> src/server/device/protocol/synchro.rs:30:45 [INFO] [stdout] | [INFO] [stdout] 30 | if let Some(Some((speed, clockwise))) = cmds.get(0) { [INFO] [stdout] | ^^^^^^^^^^^ help: try: `cmds.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u32` -> `u32`) [INFO] [stdout] --> src/server/device/protocol/thehandy/mod.rs:152:7 [INFO] [stdout] | [INFO] [stdout] 152 | fleshlight_launch_helper::calculate_duration(distance, message.speed() as f64 / 99f64) as u32; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `fleshlight_launch_helper::calculate_duration(distance, message.speed() as f64 / 99f64)` [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: length comparison to one [INFO] [stdout] --> src/server/device/protocol/tryfun_meta2.rs:61:8 [INFO] [stdout] | [INFO] [stdout] 61 | if commands.len() >= 1 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!commands.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/device/protocol/vibcrafter.rs:50:3 [INFO] [stdout] | [INFO] [stdout] 50 | return res; [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] 50 - return res; [INFO] [stdout] 50 + res [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/server/device/protocol/vibcrafter.rs:58:3 [INFO] [stdout] | [INFO] [stdout] 58 | return res; [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] 58 - return res; [INFO] [stdout] 58 + res [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: compiling a regex in a loop [INFO] [stdout] --> src/server/device/protocol/vibcrafter.rs:95:25 [INFO] [stdout] | [INFO] [stdout] 95 | let challenge = Regex::new(r"^[a-zA-Z0-9]{4}:([a-zA-Z0-9]+);$") [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: move the regex construction outside this loop [INFO] [stdout] --> src/server/device/protocol/vibcrafter.rs:87:5 [INFO] [stdout] | [INFO] [stdout] 87 | loop { [INFO] [stdout] | ^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#regex_creation_in_loops [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/server/device/protocol/vibcrafter.rs:102:27 [INFO] [stdout] | [INFO] [stdout] 102 | sha256.update(&to_hash.as_str().as_bytes()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `to_hash.as_str().as_bytes()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> src/server/device/protocol/vorze_sa.rs:111:3 [INFO] [stdout] | [INFO] [stdout] 111 | / if speed > 100f64 { [INFO] [stdout] 112 | | speed = 100f64; [INFO] [stdout] ... | [INFO] [stdout] 116 | | speed = 0f64; [INFO] [stdout] 117 | | } [INFO] [stdout] | |___^ help: replace with clamp: `speed = speed.clamp(0f64, 100f64);` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min, min.is_nan(), or max.is_nan() [INFO] [stdout] = note: clamp returns NaN if the input is NaN [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u8` -> `u8`) [INFO] [stdout] --> src/server/device/protocol/vorze_sa.rs:205:52 [INFO] [stdout] | [INFO] [stdout] 205 | vec![self.device_type as u8, position as u8, speed as u8], [INFO] [stdout] | ^^^^^^^^^^^ help: try: `speed` [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: useless conversion to the same type: `server::device::configuration::device_definitions::UserDeviceDefinition` [INFO] [stdout] --> src/server/device/server_device.rs:199:38 [INFO] [stdout] | [INFO] [stdout] 199 | .initialize(hardware.clone(), &attrs.clone().into()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `attrs.clone()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/server/device/server_device.rs:252:54 [INFO] [stdout] | [INFO] [stdout] 252 | if let Err(e) = hardware.write_value(&packet).await { [INFO] [stdout] | ^^^^^^^ help: change this to: `packet` [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/device/server_device.rs:259:56 [INFO] [stdout] | [INFO] [stdout] 259 | if let Err(e) = hardware.write_value(&packet).await { [INFO] [stdout] | ^^^^^^^ help: change this to: `packet` [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 async expression only awaits a single future [INFO] [stdout] --> src/server/device/server_device.rs:421:14 [INFO] [stdout] | [INFO] [stdout] 421 | return async move { fut.await }.boxed(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to: `fut` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_async_block [INFO] [stdout] = note: `#[warn(clippy::redundant_async_block)]` 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/device/server_device.rs:499:22 [INFO] [stdout] | [INFO] [stdout] 499 | .update_scalar(&msg, self.handler.needs_full_command_set()) [INFO] [stdout] | ^^^^ help: change this to: `msg` [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 async expression only awaits a single future [INFO] [stdout] --> src/server/device/server_device_manager.rs:245:9 [INFO] [stdout] | [INFO] [stdout] 245 | async move { fut.await }.boxed() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to: `fut` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_async_block [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/server/device/server_device_manager.rs:265:15 [INFO] [stdout] | [INFO] [stdout] 265 | &dev.definition().user_config().display_name(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `dev.definition().user_config().display_name()` [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/device/server_device_manager_event_loop.rs:287:11 [INFO] [stdout] | [INFO] [stdout] 287 | &device.definition().user_config().display_name(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `device.definition().user_config().display_name()` [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 async expression only awaits a single future [INFO] [stdout] --> src/server/ping_timer.rs:93:28 [INFO] [stdout] | [INFO] [stdout] 93 | async_manager::spawn(async move { fut.await }); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to: `fut` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_async_block [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/server/mod.rs:50:1 [INFO] [stdout] | [INFO] [stdout] 50 | mod server; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] = note: `#[warn(clippy::module_inception)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::message::error::ErrorV0` [INFO] [stdout] --> src/server/server_builder.rs:133:15 [INFO] [stdout] | [INFO] [stdout] 133 | message::ErrorV0::from(ButtplugError::from(ButtplugPingError::PingedOut)).into(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `message::ErrorV0::from(ButtplugError::from(ButtplugPingError::PingedOut))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/server/server_downgrade_wrapper.rs:156:23 [INFO] [stdout] | [INFO] [stdout] 156 | &&ButtplugServerMessageV4::from(ErrorV0::from(e)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `(&ButtplugServerMessageV4::from(ErrorV0::from(e)))` [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: useless conversion to the same type: `core::errors::ButtplugMessageError` [INFO] [stdout] --> src/server/server_message_conversion.rs:200:13 [INFO] [stdout] | [INFO] [stdout] 200 | ...rr(ButtplugMessageError::MessageConversionError("FleshlightLaunchFW12Cmd is not implemented. Please update the client software to use a newer command".to_owned()).into()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `ButtplugMessageError::MessageConversionError("FleshlightLaunchFW12Cmd is not implemented. Please update the client software to use a newer command".to_owned())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::errors::ButtplugMessageError` [INFO] [stdout] --> src/server/server_message_conversion.rs:206:11 [INFO] [stdout] | [INFO] [stdout] 206 | / ButtplugMessageError::MessageConversionError( [INFO] [stdout] 207 | | "RequestLog is no longer allowed by any version of Buttplug.".to_owned(), [INFO] [stdout] 208 | | ) [INFO] [stdout] 209 | | .into(), [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `.into()` [INFO] [stdout] | [INFO] [stdout] 206 ~ ButtplugMessageError::MessageConversionError( [INFO] [stdout] 207 + "RequestLog is no longer allowed by any version of Buttplug.".to_owned(), [INFO] [stdout] 208 ~ ), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::errors::ButtplugMessageError` [INFO] [stdout] --> src/server/server_message_conversion.rs:215:13 [INFO] [stdout] | [INFO] [stdout] 215 | ...rr(ButtplugMessageError::MessageConversionError("KiirooCmd is not implemented. Please update the client software to use a newer command".to_owned()).into()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `ButtplugMessageError::MessageConversionError("KiirooCmd is not implemented. Please update the client software to use a newer command".to_owned())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::errors::ButtplugMessageError` [INFO] [stdout] --> src/server/server_message_conversion.rs:220:13 [INFO] [stdout] | [INFO] [stdout] 220 | ...rr(ButtplugMessageError::MessageConversionError("LovenseCmd is not implemented. Please update the client software to use a newer command".to_owned()).into()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `ButtplugMessageError::MessageConversionError("LovenseCmd is not implemented. Please update the client software to use a newer command".to_owned())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> tests/util/device_test/client/client_v2/client.rs:99:5 [INFO] [stdout] | [INFO] [stdout] 99 | /// connection between the client and the server, like a network connection [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] 99 | /// connection between the client and the server, like a network connection [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> tests/util/device_test/client/client_v2/client.rs:100:5 [INFO] [stdout] | [INFO] [stdout] 100 | /// issue. [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] help: indent this line [INFO] [stdout] | [INFO] [stdout] 100 | /// issue. [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `core::message::server_info::ServerInfoV0` [INFO] [stdout] --> src/server/server_message_conversion.rs:346:85 [INFO] [stdout] | [INFO] [stdout] 346 | ButtplugServerMessageV1::ServerInfo(m) => ButtplugServerMessageV0::ServerInfo(m.into()), [INFO] [stdout] | ^^^^^^^^ help: consider removing `.into()`: `m` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `f64` which implements the `Copy` trait [INFO] [stdout] --> src/server/server_message_conversion.rs:667:11 [INFO] [stdout] | [INFO] [stdout] 667 | x.scalar().clone(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `x.scalar()` [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 `ActuatorType` which implements the `Copy` trait [INFO] [stdout] --> src/server/server_message_conversion.rs:668:11 [INFO] [stdout] | [INFO] [stdout] 668 | x.actuator_type().clone(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `x.actuator_type()` [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: doc list item without indentation [INFO] [stdout] --> tests/util/device_test/client/client_v2/client.rs:99:5 [INFO] [stdout] | [INFO] [stdout] 99 | /// connection between the client and the server, like a network connection [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] 99 | /// connection between the client and the server, like a network connection [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> tests/util/device_test/client/client_v2/client.rs:100:5 [INFO] [stdout] | [INFO] [stdout] 100 | /// issue. [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] help: indent this line [INFO] [stdout] | [INFO] [stdout] 100 | /// issue. [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this async expression only awaits a single future [INFO] [stdout] --> src/util/async_manager/tokio.rs:48:31 [INFO] [stdout] | [INFO] [stdout] 48 | futures::executor::block_on(async move { f.await }) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to: `f` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_async_block [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: found `.or(Some(…)).unwrap()` [INFO] [stdout] --> src/util/device_configuration.rs:123:18 [INFO] [stdout] | [INFO] [stdout] 123 | .or(Some( [INFO] [stdout] | __________________^ [INFO] [stdout] 124 | | defaults [INFO] [stdout] 125 | | .features [INFO] [stdout] 126 | | .as_ref() [INFO] [stdout] 127 | | .expect("Defaults always have features"), [INFO] [stdout] 128 | | )) [INFO] [stdout] 129 | | .unwrap(), [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_then_unwrap [INFO] [stdout] = note: `#[warn(clippy::or_then_unwrap)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 123 ~ .unwrap_or(defaults [INFO] [stdout] 124 + .features [INFO] [stdout] 125 + .as_ref() [INFO] [stdout] 126 ~ .expect("Defaults always have features")), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: large size difference between variants [INFO] [stdout] --> tests/util/device_test/client/client_v2/device.rs:64:1 [INFO] [stdout] | [INFO] [stdout] 64 | / pub enum ButtplugClientDeviceEvent { [INFO] [stdout] 65 | | /// Device has disconnected from server. [INFO] [stdout] 66 | | DeviceRemoved, [INFO] [stdout] | | ------------- the second-largest variant carries no data at all [INFO] [stdout] 67 | | /// Client has disconnected from server. [INFO] [stdout] ... | [INFO] [stdout] 70 | | Message(ButtplugServerMessageV2), [INFO] [stdout] | | -------------------------------- the largest variant contains at least 232 bytes [INFO] [stdout] 71 | | } [INFO] [stdout] | |_^ the entire enum is at least 232 bytes [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stdout] = note: `#[warn(clippy::large_enum_variant)]` on by default [INFO] [stdout] help: consider boxing the large fields or introducing indirection in some other way to reduce the total size of the enum [INFO] [stdout] | [INFO] [stdout] 70 - Message(ButtplugServerMessageV2), [INFO] [stdout] 70 + Message(Box), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/util/device_configuration.rs:288:5 [INFO] [stdout] | [INFO] [stdout] 288 | / &main_config_str [INFO] [stdout] 289 | | .as_ref() [INFO] [stdout] 290 | | .unwrap_or(&DEVICE_CONFIGURATION_JSON.to_owned()), [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: change this to [INFO] [stdout] | [INFO] [stdout] 288 ~ main_config_str [INFO] [stdout] 289 + .as_ref() [INFO] [stdout] 290 ~ .unwrap_or(&DEVICE_CONFIGURATION_JSON.to_owned()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/util/device_configuration.rs:339:54 [INFO] [stdout] | [INFO] [stdout] 339 | load_protocol_config_from_json::(&user_config_str, skip_version_check)?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: change this to: `user_config_str` [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: enclosing `Ok` and `?` operator are unneeded [INFO] [stdout] --> src/util/device_configuration.rs:408:3 [INFO] [stdout] | [INFO] [stdout] 408 | / Ok(serde_json::to_string(&user_config_file).map_err(|e| { [INFO] [stdout] 409 | | ButtplugError::from(ButtplugDeviceError::DeviceConfigurationError(format!( [INFO] [stdout] 410 | | "Cannot save device configuration file: {e:?}", [INFO] [stdout] 411 | | ))) [INFO] [stdout] 412 | | })?) [INFO] [stdout] | |______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] = note: `#[warn(clippy::needless_question_mark)]` on by default [INFO] [stdout] help: remove the enclosing `Ok` and `?` operator [INFO] [stdout] | [INFO] [stdout] 408 ~ serde_json::to_string(&user_config_file).map_err(|e| { [INFO] [stdout] 409 | ButtplugError::from(ButtplugDeviceError::DeviceConfigurationError(format!( [INFO] [stdout] 410 | "Cannot save device configuration file: {e:?}", [INFO] [stdout] 411 | ))) [INFO] [stdout] 412 ~ }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: large size difference between variants [INFO] [stdout] --> tests/util/device_test/client/client_v2/device.rs:64:1 [INFO] [stdout] | [INFO] [stdout] 64 | / pub enum ButtplugClientDeviceEvent { [INFO] [stdout] 65 | | /// Device has disconnected from server. [INFO] [stdout] 66 | | DeviceRemoved, [INFO] [stdout] | | ------------- the second-largest variant carries no data at all [INFO] [stdout] 67 | | /// Client has disconnected from server. [INFO] [stdout] ... | [INFO] [stdout] 70 | | Message(ButtplugServerMessageV2), [INFO] [stdout] | | -------------------------------- the largest variant contains at least 232 bytes [INFO] [stdout] 71 | | } [INFO] [stdout] | |_^ the entire enum is at least 232 bytes [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stdout] = note: `#[warn(clippy::large_enum_variant)]` on by default [INFO] [stdout] help: consider boxing the large fields or introducing indirection in some other way to reduce the total size of the enum [INFO] [stdout] | [INFO] [stdout] 70 - Message(ButtplugServerMessageV2), [INFO] [stdout] 70 + Message(Box), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/core/message/serializer/json_serializer.rs:532:34 [INFO] [stdout] | [INFO] [stdout] 532 | let _ = serializer.serialize(&vec![RequestServerInfoV1::new( [INFO] [stdout] | __________________________________^ [INFO] [stdout] 533 | | "test client", [INFO] [stdout] 534 | | BUTTPLUG_CURRENT_MESSAGE_SPEC_VERSION, [INFO] [stdout] 535 | | ) [INFO] [stdout] 536 | | .into()]); [INFO] [stdout] | |____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] help: you can use a slice directly [INFO] [stdout] | [INFO] [stdout] 532 ~ let _ = serializer.serialize(&[RequestServerInfoV1::new( [INFO] [stdout] 533 + "test client", [INFO] [stdout] 534 + BUTTPLUG_CURRENT_MESSAGE_SPEC_VERSION, [INFO] [stdout] 535 + ) [INFO] [stdout] 536 ~ .into()]); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/server/device/configuration/mod.rs:610:11 [INFO] [stdout] | [INFO] [stdout] 610 | / &vec![ [INFO] [stdout] 611 | | DeviceFeature::new( [INFO] [stdout] 612 | | "Edge Vibration 1", [INFO] [stdout] 613 | | FeatureType::Vibrate, [INFO] [stdout] ... | [INFO] [stdout] 630 | | ), [INFO] [stdout] 631 | | ], [INFO] [stdout] | |___________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] help: you can use a slice directly [INFO] [stdout] | [INFO] [stdout] 610 ~ &[DeviceFeature::new( [INFO] [stdout] 611 + "Edge Vibration 1", [INFO] [stdout] 612 + FeatureType::Vibrate, [INFO] [stdout] 613 + &Some(DeviceFeatureActuator::new( [INFO] [stdout] 614 + &RangeInclusive::new(0, 20), [INFO] [stdout] 615 + &RangeInclusive::new(0, 20), [INFO] [stdout] 616 + &HashSet::from_iter([ButtplugActuatorFeatureMessageType::ScalarCmd]), [INFO] [stdout] 617 + )), [INFO] [stdout] 618 + &None, [INFO] [stdout] 619 + ), [INFO] [stdout] 620 + DeviceFeature::new( [INFO] [stdout] 621 + "Edge Vibration 2", [INFO] [stdout] 622 + FeatureType::Vibrate, [INFO] [stdout] 623 + &Some(DeviceFeatureActuator::new( [INFO] [stdout] 624 + &RangeInclusive::new(0, 20), [INFO] [stdout] 625 + &RangeInclusive::new(0, 20), [INFO] [stdout] 626 + &HashSet::from_iter([ButtplugActuatorFeatureMessageType::ScalarCmd]), [INFO] [stdout] 627 + )), [INFO] [stdout] 628 + &None, [INFO] [stdout] 629 ~ )], [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/server/device/protocol/motorbunny.rs:68:32 [INFO] [stdout] | [INFO] [stdout] 68 | let mut rotate_command = vec![if rotate.1 { 0x2a } else { 0x29 }, rotate.0 as u8].repeat(7); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can use an array directly: `[if rotate.1 { 0x2a } else { 0x29 }, rotate.0 as u8]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this lifetime isn't used in the impl [INFO] [stdout] --> tests/util/device_test/client/client_v2/in_process_connector.rs:85:6 [INFO] [stdout] | [INFO] [stdout] 85 | impl<'a> ButtplugInProcessClientConnector { [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stdout] = note: `#[warn(clippy::extra_unused_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this lifetime isn't used in the impl [INFO] [stdout] --> tests/util/device_test/client/client_v2/in_process_connector.rs:85:6 [INFO] [stdout] | [INFO] [stdout] 85 | impl<'a> ButtplugInProcessClientConnector { [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stdout] = note: `#[warn(clippy::extra_unused_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/mod.rs:934:5 [INFO] [stdout] | [INFO] [stdout] 934 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 937 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 937 | ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/mod.rs:945:5 [INFO] [stdout] | [INFO] [stdout] 945 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 948 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 948 | ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/mod.rs:956:5 [INFO] [stdout] | [INFO] [stdout] 956 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 959 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 959 | ) -> BoxFuture<'_, Result> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/mod.rs:972:5 [INFO] [stdout] | [INFO] [stdout] 972 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 975 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 975 | ) -> BoxFuture<'_, Result> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/mod.rs:1004:5 [INFO] [stdout] | [INFO] [stdout] 1004 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 1007 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 1007 | ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/galaku.rs:196:5 [INFO] [stdout] | [INFO] [stdout] 196 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 199 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 199 | ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/galaku.rs:219:5 [INFO] [stdout] | [INFO] [stdout] 219 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 222 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 222 | ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/galaku.rs:242:5 [INFO] [stdout] | [INFO] [stdout] 242 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 245 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 245 | ) -> BoxFuture<'_, Result> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/kgoal_boost.rs:61:5 [INFO] [stdout] | [INFO] [stdout] 61 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 64 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 64 | ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/kgoal_boost.rs:147:5 [INFO] [stdout] | [INFO] [stdout] 147 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 150 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 150 | ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/kiiroo_prowand.rs:48:5 [INFO] [stdout] | [INFO] [stdout] 48 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 51 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 51 | ) -> BoxFuture<'_, Result> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/kiiroo_spot.rs:41:5 [INFO] [stdout] | [INFO] [stdout] 41 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 44 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 44 | ) -> BoxFuture<'_, Result> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/kiiroo_v21.rs:118:5 [INFO] [stdout] | [INFO] [stdout] 118 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 121 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 121 | ) -> BoxFuture<'_, Result> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/kiiroo_v21.rs:157:5 [INFO] [stdout] | [INFO] [stdout] 157 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 160 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 160 | ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/kiiroo_v21.rs:243:5 [INFO] [stdout] | [INFO] [stdout] 243 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 246 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 246 | ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/lovense.rs:383:5 [INFO] [stdout] | [INFO] [stdout] 383 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 386 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 386 | ) -> BoxFuture<'_, Result> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/lovense_connect_service.rs:293:5 [INFO] [stdout] | [INFO] [stdout] 293 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 296 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 296 | ) -> BoxFuture<'_, Result> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/device/protocol/xinput.rs:67:5 [INFO] [stdout] | [INFO] [stdout] 67 | &self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 70 | ) -> BoxFuture> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 70 | ) -> BoxFuture<'_, Result> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/server.rs:128:21 [INFO] [stdout] | [INFO] [stdout] 128 | pub fn disconnect(&self) -> BoxFuture> { [INFO] [stdout] | ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 128 | pub fn disconnect(&self) -> BoxFuture<'_, Result<(), message::ErrorV0>> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/server/server_downgrade_wrapper.rs:71:21 [INFO] [stdout] | [INFO] [stdout] 71 | pub fn disconnect(&self) -> BoxFuture> { [INFO] [stdout] | ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 71 | pub fn disconnect(&self) -> BoxFuture<'_, Result<(), message::ErrorV0>> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> tests/util/device_test/client/client_v2/client.rs:99:5 [INFO] [stdout] | [INFO] [stdout] 99 | /// connection between the client and the server, like a network connection [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] 99 | /// connection between the client and the server, like a network connection [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> tests/util/device_test/client/client_v2/client.rs:100:5 [INFO] [stdout] | [INFO] [stdout] 100 | /// issue. [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] help: indent this line [INFO] [stdout] | [INFO] [stdout] 100 | /// issue. [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `RSSI` contains a capitalized acronym [INFO] [stdout] --> tests/util/device_test/mod.rs:51:3 [INFO] [stdout] | [INFO] [stdout] 51 | RSSI, [INFO] [stdout] | ^^^^ help: consider making the acronym lowercase, except the initial letter (notice the capitalization): `Rssi` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] = note: `#[warn(clippy::upper_case_acronyms)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> tests/util/device_test/client/client_v2/client.rs:99:5 [INFO] [stdout] | [INFO] [stdout] 99 | /// connection between the client and the server, like a network connection [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] 99 | /// connection between the client and the server, like a network connection [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> tests/util/test_device_manager/test_device.rs:276:14 [INFO] [stdout] | [INFO] [stdout] 276 | if reads.lock().await.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!reads.lock().await.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: doc list item without indentation [INFO] [stdout] --> tests/util/device_test/client/client_v2/client.rs:100:5 [INFO] [stdout] | [INFO] [stdout] 100 | /// issue. [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] help: indent this line [INFO] [stdout] | [INFO] [stdout] 100 | /// issue. [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this assertion is always `false` [INFO] [stdout] --> tests/util/channel_transport.rs:191:9 [INFO] [stdout] | [INFO] [stdout] 191 | assert!(false, "Error connecting to client: {:?}", e); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: replace this with `panic!()` or `unreachable!()` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assertions_on_constants [INFO] [stdout] = note: `#[warn(clippy::assertions_on_constants)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/util/channel_transport.rs:258:42 [INFO] [stdout] | [INFO] [stdout] 258 | self.server_serializer.serialize(&vec![msg]), [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/util/channel_transport.rs:338:42 [INFO] [stdout] | [INFO] [stdout] 338 | self.server_serializer.serialize(&vec![msg]), [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `RSSI` contains a capitalized acronym [INFO] [stdout] --> tests/util/device_test/mod.rs:51:3 [INFO] [stdout] | [INFO] [stdout] 51 | RSSI, [INFO] [stdout] | ^^^^ help: consider making the acronym lowercase, except the initial letter (notice the capitalization): `Rssi` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] = note: `#[warn(clippy::upper_case_acronyms)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: large size difference between variants [INFO] [stdout] --> tests/util/device_test/client/client_v2/device.rs:64:1 [INFO] [stdout] | [INFO] [stdout] 64 | / pub enum ButtplugClientDeviceEvent { [INFO] [stdout] 65 | | /// Device has disconnected from server. [INFO] [stdout] 66 | | DeviceRemoved, [INFO] [stdout] | | ------------- the second-largest variant carries no data at all [INFO] [stdout] 67 | | /// Client has disconnected from server. [INFO] [stdout] ... | [INFO] [stdout] 70 | | Message(ButtplugServerMessageV2), [INFO] [stdout] | | -------------------------------- the largest variant contains at least 232 bytes [INFO] [stdout] 71 | | } [INFO] [stdout] | |_^ the entire enum is at least 232 bytes [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stdout] = note: `#[warn(clippy::large_enum_variant)]` on by default [INFO] [stdout] help: consider boxing the large fields or introducing indirection in some other way to reduce the total size of the enum [INFO] [stdout] | [INFO] [stdout] 70 - Message(ButtplugServerMessageV2), [INFO] [stdout] 70 + Message(Box), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this lifetime isn't used in the impl [INFO] [stdout] --> tests/util/device_test/client/client_v2/in_process_connector.rs:85:6 [INFO] [stdout] | [INFO] [stdout] 85 | impl<'a> ButtplugInProcessClientConnector { [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stdout] = note: `#[warn(clippy::extra_unused_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> tests/util/test_device_manager/test_device.rs:276:14 [INFO] [stdout] | [INFO] [stdout] 276 | if reads.lock().await.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!reads.lock().await.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: large size difference between variants [INFO] [stdout] --> tests/util/device_test/client/client_v2/device.rs:64:1 [INFO] [stdout] | [INFO] [stdout] 64 | / pub enum ButtplugClientDeviceEvent { [INFO] [stdout] 65 | | /// Device has disconnected from server. [INFO] [stdout] 66 | | DeviceRemoved, [INFO] [stdout] | | ------------- the second-largest variant carries no data at all [INFO] [stdout] 67 | | /// Client has disconnected from server. [INFO] [stdout] ... | [INFO] [stdout] 70 | | Message(ButtplugServerMessageV2), [INFO] [stdout] | | -------------------------------- the largest variant contains at least 232 bytes [INFO] [stdout] 71 | | } [INFO] [stdout] | |_^ the entire enum is at least 232 bytes [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stdout] = note: `#[warn(clippy::large_enum_variant)]` on by default [INFO] [stdout] help: consider boxing the large fields or introducing indirection in some other way to reduce the total size of the enum [INFO] [stdout] | [INFO] [stdout] 70 - Message(ButtplugServerMessageV2), [INFO] [stdout] 70 + Message(Box), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> tests/util/device_test/client/client_v2/client.rs:99:5 [INFO] [stdout] | [INFO] [stdout] 99 | /// connection between the client and the server, like a network connection [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] 99 | /// connection between the client and the server, like a network connection [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> tests/util/device_test/client/client_v2/client.rs:100:5 [INFO] [stdout] | [INFO] [stdout] 100 | /// issue. [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] help: indent this line [INFO] [stdout] | [INFO] [stdout] 100 | /// issue. [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this assertion is always `false` [INFO] [stdout] --> tests/util/channel_transport.rs:191:9 [INFO] [stdout] | [INFO] [stdout] 191 | assert!(false, "Error connecting to client: {:?}", e); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: replace this with `panic!()` or `unreachable!()` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assertions_on_constants [INFO] [stdout] = note: `#[warn(clippy::assertions_on_constants)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `RSSI` contains a capitalized acronym [INFO] [stdout] --> tests/util/device_test/mod.rs:51:3 [INFO] [stdout] | [INFO] [stdout] 51 | RSSI, [INFO] [stdout] | ^^^^ help: consider making the acronym lowercase, except the initial letter (notice the capitalization): `Rssi` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] = note: `#[warn(clippy::upper_case_acronyms)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this lifetime isn't used in the impl [INFO] [stdout] --> tests/util/device_test/client/client_v2/in_process_connector.rs:85:6 [INFO] [stdout] | [INFO] [stdout] 85 | impl<'a> ButtplugInProcessClientConnector { [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stdout] = note: `#[warn(clippy::extra_unused_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/util/channel_transport.rs:258:42 [INFO] [stdout] | [INFO] [stdout] 258 | self.server_serializer.serialize(&vec![msg]), [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/util/channel_transport.rs:338:42 [INFO] [stdout] | [INFO] [stdout] 338 | self.server_serializer.serialize(&vec![msg]), [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> tests/util/test_device_manager/test_device.rs:276:14 [INFO] [stdout] | [INFO] [stdout] 276 | if reads.lock().await.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!reads.lock().await.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: doc list item without indentation [INFO] [stdout] --> tests/util/device_test/client/client_v2/client.rs:99:5 [INFO] [stdout] | [INFO] [stdout] 99 | /// connection between the client and the server, like a network connection [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] 99 | /// connection between the client and the server, like a network connection [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> tests/util/device_test/client/client_v2/client.rs:100:5 [INFO] [stdout] | [INFO] [stdout] 100 | /// issue. [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] help: indent this line [INFO] [stdout] | [INFO] [stdout] 100 | /// issue. [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: large size difference between variants [INFO] [stdout] --> tests/util/device_test/client/client_v2/device.rs:64:1 [INFO] [stdout] | [INFO] [stdout] 64 | / pub enum ButtplugClientDeviceEvent { [INFO] [stdout] 65 | | /// Device has disconnected from server. [INFO] [stdout] 66 | | DeviceRemoved, [INFO] [stdout] | | ------------- the second-largest variant carries no data at all [INFO] [stdout] 67 | | /// Client has disconnected from server. [INFO] [stdout] ... | [INFO] [stdout] 70 | | Message(ButtplugServerMessageV2), [INFO] [stdout] | | -------------------------------- the largest variant contains at least 232 bytes [INFO] [stdout] 71 | | } [INFO] [stdout] | |_^ the entire enum is at least 232 bytes [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stdout] = note: `#[warn(clippy::large_enum_variant)]` on by default [INFO] [stdout] help: consider boxing the large fields or introducing indirection in some other way to reduce the total size of the enum [INFO] [stdout] | [INFO] [stdout] 70 - Message(ButtplugServerMessageV2), [INFO] [stdout] 70 + Message(Box), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this lifetime isn't used in the impl [INFO] [stdout] --> tests/util/device_test/client/client_v2/in_process_connector.rs:85:6 [INFO] [stdout] | [INFO] [stdout] 85 | impl<'a> ButtplugInProcessClientConnector { [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stdout] = note: `#[warn(clippy::extra_unused_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: large size difference between variants [INFO] [stdout] --> tests/util/device_test/client/client_v2/device.rs:64:1 [INFO] [stdout] | [INFO] [stdout] 64 | / pub enum ButtplugClientDeviceEvent { [INFO] [stdout] 65 | | /// Device has disconnected from server. [INFO] [stdout] 66 | | DeviceRemoved, [INFO] [stdout] | | ------------- the second-largest variant carries no data at all [INFO] [stdout] 67 | | /// Client has disconnected from server. [INFO] [stdout] ... | [INFO] [stdout] 70 | | Message(ButtplugServerMessageV2), [INFO] [stdout] | | -------------------------------- the largest variant contains at least 232 bytes [INFO] [stdout] 71 | | } [INFO] [stdout] | |_^ the entire enum is at least 232 bytes [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stdout] = note: `#[warn(clippy::large_enum_variant)]` on by default [INFO] [stdout] help: consider boxing the large fields or introducing indirection in some other way to reduce the total size of the enum [INFO] [stdout] | [INFO] [stdout] 70 - Message(ButtplugServerMessageV2), [INFO] [stdout] 70 + Message(Box), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this assertion is always `false` [INFO] [stdout] --> tests/util/channel_transport.rs:191:9 [INFO] [stdout] | [INFO] [stdout] 191 | assert!(false, "Error connecting to client: {:?}", e); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: replace this with `panic!()` or `unreachable!()` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assertions_on_constants [INFO] [stdout] = note: `#[warn(clippy::assertions_on_constants)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this lifetime isn't used in the impl [INFO] [stdout] --> tests/util/device_test/client/client_v2/in_process_connector.rs:85:6 [INFO] [stdout] | [INFO] [stdout] 85 | impl<'a> ButtplugInProcessClientConnector { [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stdout] = note: `#[warn(clippy::extra_unused_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `RSSI` contains a capitalized acronym [INFO] [stdout] --> tests/util/device_test/mod.rs:51:3 [INFO] [stdout] | [INFO] [stdout] 51 | RSSI, [INFO] [stdout] | ^^^^ help: consider making the acronym lowercase, except the initial letter (notice the capitalization): `Rssi` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] = note: `#[warn(clippy::upper_case_acronyms)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> tests/util/test_device_manager/test_device.rs:276:14 [INFO] [stdout] | [INFO] [stdout] 276 | if reads.lock().await.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!reads.lock().await.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: this assertion is always `false` [INFO] [stdout] --> tests/util/channel_transport.rs:191:9 [INFO] [stdout] | [INFO] [stdout] 191 | assert!(false, "Error connecting to client: {:?}", e); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: replace this with `panic!()` or `unreachable!()` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assertions_on_constants [INFO] [stdout] = note: `#[warn(clippy::assertions_on_constants)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `buttplug::core::message::PingV0` [INFO] [stdout] --> tests/test_server.rs:81:52 [INFO] [stdout] | [INFO] [stdout] 81 | let msg = message::ButtplugClientMessageV4::Ping(message::PingV0::default().into()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `message::PingV0::default()` [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: useless conversion to the same type: `buttplug::core::message::PingV0` [INFO] [stdout] --> tests/test_server.rs:95:52 [INFO] [stdout] | [INFO] [stdout] 95 | let msg = message::ButtplugClientMessageV3::Ping(message::PingV0::default().into()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `message::PingV0::default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of a fallible conversion when an infallible one could be used [INFO] [stdout] --> tests/test_server.rs:98:41 [INFO] [stdout] | [INFO] [stdout] 98 | let result = server.parse_message(msg.try_into().unwrap()).await; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: converting `ButtplugClientMessageV3` to `ButtplugClientMessageVariant` cannot fail [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fallible_conversions [INFO] [stdout] = note: `#[warn(clippy::unnecessary_fallible_conversions)]` on by default [INFO] [stdout] help: use [INFO] [stdout] | [INFO] [stdout] 98 - let result = server.parse_message(msg.try_into().unwrap()).await; [INFO] [stdout] 98 + let result = server.parse_message(msg.into()).await; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/test_message_downgrades.rs:44:44 [INFO] [stdout] | [INFO] [stdout] 44 | let incoming_json = serializer.serialize(&vec![incoming]); [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: you can use a slice directly: `&[incoming]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/test_message_downgrades.rs:65:44 [INFO] [stdout] | [INFO] [stdout] 65 | let incoming_json = serializer.serialize(&vec![incoming]); [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: you can use a slice directly: `&[incoming]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/test_message_downgrades.rs:89:30 [INFO] [stdout] | [INFO] [stdout] 89 | serializer.serialize(&vec!(output)), [INFO] [stdout] | ^^^^^^^^^^^^^ help: you can use a slice directly: `&[output]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/test_message_downgrades.rs:103:60 [INFO] [stdout] | [INFO] [stdout] 103 | assert!(possible_messages.contains(&serializer.serialize(&vec!(msg)))); [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/test_message_downgrades.rs:106:60 [INFO] [stdout] | [INFO] [stdout] 106 | assert!(possible_messages.contains(&serializer.serialize(&vec!(msg)))); [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/test_message_downgrades.rs:117:30 [INFO] [stdout] | [INFO] [stdout] 117 | serializer.serialize(&vec!(output)), [INFO] [stdout] | ^^^^^^^^^^^^^ help: you can use a slice directly: `&[output]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/test_message_downgrades.rs:139:30 [INFO] [stdout] | [INFO] [stdout] 139 | serializer.serialize(&vec!(output)), [INFO] [stdout] | ^^^^^^^^^^^^^ help: you can use a slice directly: `&[output]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/test_message_downgrades.rs:153:60 [INFO] [stdout] | [INFO] [stdout] 153 | assert!(possible_messages.contains(&serializer.serialize(&vec!(msg)))); [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/test_message_downgrades.rs:156:60 [INFO] [stdout] | [INFO] [stdout] 156 | assert!(possible_messages.contains(&serializer.serialize(&vec!(msg)))); [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `buttplug::core::message::PingV0` [INFO] [stdout] --> tests/test_server.rs:165:59 [INFO] [stdout] | [INFO] [stdout] 165 | .parse_message(message::ButtplugClientMessageV4::Ping(pingmsg.into())) [INFO] [stdout] | ^^^^^^^^^^^^^^ help: consider removing `.into()`: `pingmsg` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `RSSI` contains a capitalized acronym [INFO] [stdout] --> tests/util/device_test/mod.rs:51:3 [INFO] [stdout] | [INFO] [stdout] 51 | RSSI, [INFO] [stdout] | ^^^^ help: consider making the acronym lowercase, except the initial letter (notice the capitalization): `Rssi` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] = note: `#[warn(clippy::upper_case_acronyms)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/test_message_downgrades.rs:171:26 [INFO] [stdout] | [INFO] [stdout] 171 | serializer.serialize(&vec!(output2)), [INFO] [stdout] | ^^^^^^^^^^^^^^ help: you can use a slice directly: `&[output2]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/test_message_downgrades.rs:198:30 [INFO] [stdout] | [INFO] [stdout] 198 | serializer.serialize(&vec!(output)), [INFO] [stdout] | ^^^^^^^^^^^^^ help: you can use a slice directly: `&[output]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/test_message_downgrades.rs:210:39 [INFO] [stdout] | [INFO] [stdout] 210 | let mut smsg = serializer.serialize(&vec![msg]); [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/test_message_downgrades.rs:219:31 [INFO] [stdout] | [INFO] [stdout] 219 | smsg = serializer.serialize(&vec![msg]); [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/test_message_downgrades.rs:240:26 [INFO] [stdout] | [INFO] [stdout] 240 | serializer.serialize(&vec!(output2)), [INFO] [stdout] | ^^^^^^^^^^^^^^ help: you can use a slice directly: `&[output2]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/test_message_downgrades.rs:266:30 [INFO] [stdout] | [INFO] [stdout] 266 | serializer.serialize(&vec!(output)), [INFO] [stdout] | ^^^^^^^^^^^^^ help: you can use a slice directly: `&[output]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/test_message_downgrades.rs:278:39 [INFO] [stdout] | [INFO] [stdout] 278 | let mut smsg = serializer.serialize(&vec![msg]); [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/test_message_downgrades.rs:287:31 [INFO] [stdout] | [INFO] [stdout] 287 | smsg = serializer.serialize(&vec![msg]); [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/test_message_downgrades.rs:314:30 [INFO] [stdout] | [INFO] [stdout] 314 | serializer.serialize(&vec!(output)), [INFO] [stdout] | ^^^^^^^^^^^^^ help: you can use a slice directly: `&[output]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/test_message_downgrades.rs:326:39 [INFO] [stdout] | [INFO] [stdout] 326 | let mut smsg = serializer.serialize(&vec![msg]); [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/test_message_downgrades.rs:335:31 [INFO] [stdout] | [INFO] [stdout] 335 | smsg = serializer.serialize(&vec![msg]); [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/util/channel_transport.rs:258:42 [INFO] [stdout] | [INFO] [stdout] 258 | self.server_serializer.serialize(&vec![msg]), [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/util/channel_transport.rs:338:42 [INFO] [stdout] | [INFO] [stdout] 338 | self.server_serializer.serialize(&vec![msg]), [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/util/channel_transport.rs:258:42 [INFO] [stdout] | [INFO] [stdout] 258 | self.server_serializer.serialize(&vec![msg]), [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/util/channel_transport.rs:338:42 [INFO] [stdout] | [INFO] [stdout] 338 | self.server_serializer.serialize(&vec![msg]), [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `RSSI` contains a capitalized acronym [INFO] [stdout] --> tests/util/device_test/mod.rs:51:3 [INFO] [stdout] | [INFO] [stdout] 51 | RSSI, [INFO] [stdout] | ^^^^ help: consider making the acronym lowercase, except the initial letter (notice the capitalization): `Rssi` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] = note: `#[warn(clippy::upper_case_acronyms)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> tests/util/test_device_manager/test_device.rs:276:14 [INFO] [stdout] | [INFO] [stdout] 276 | if reads.lock().await.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!reads.lock().await.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: this assertion is always `false` [INFO] [stdout] --> tests/util/channel_transport.rs:191:9 [INFO] [stdout] | [INFO] [stdout] 191 | assert!(false, "Error connecting to client: {:?}", e); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: replace this with `panic!()` or `unreachable!()` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assertions_on_constants [INFO] [stdout] = note: `#[warn(clippy::assertions_on_constants)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/util/channel_transport.rs:258:42 [INFO] [stdout] | [INFO] [stdout] 258 | self.server_serializer.serialize(&vec![msg]), [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/util/channel_transport.rs:338:42 [INFO] [stdout] | [INFO] [stdout] 338 | self.server_serializer.serialize(&vec![msg]), [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> tests/util/test_device_manager/test_device.rs:276:14 [INFO] [stdout] | [INFO] [stdout] 276 | if reads.lock().await.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!reads.lock().await.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: this assertion is always `false` [INFO] [stdout] --> tests/util/channel_transport.rs:191:9 [INFO] [stdout] | [INFO] [stdout] 191 | assert!(false, "Error connecting to client: {:?}", e); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: replace this with `panic!()` or `unreachable!()` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assertions_on_constants [INFO] [stdout] = note: `#[warn(clippy::assertions_on_constants)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/util/channel_transport.rs:258:42 [INFO] [stdout] | [INFO] [stdout] 258 | self.server_serializer.serialize(&vec![msg]), [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/util/channel_transport.rs:338:42 [INFO] [stdout] | [INFO] [stdout] 338 | self.server_serializer.serialize(&vec![msg]), [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> tests/util/device_test/client/client_v2/client.rs:99:5 [INFO] [stdout] | [INFO] [stdout] 99 | /// connection between the client and the server, like a network connection [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] 99 | /// connection between the client and the server, like a network connection [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> tests/util/device_test/client/client_v2/client.rs:100:5 [INFO] [stdout] | [INFO] [stdout] 100 | /// issue. [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] help: indent this line [INFO] [stdout] | [INFO] [stdout] 100 | /// issue. [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> tests/util/device_test/client/client_v2/client.rs:99:5 [INFO] [stdout] | [INFO] [stdout] 99 | /// connection between the client and the server, like a network connection [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] 99 | /// connection between the client and the server, like a network connection [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> tests/util/device_test/client/client_v2/client.rs:100:5 [INFO] [stdout] | [INFO] [stdout] 100 | /// issue. [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] help: indent this line [INFO] [stdout] | [INFO] [stdout] 100 | /// issue. [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> tests/util/device_test/client/client_v2/client.rs:99:5 [INFO] [stdout] | [INFO] [stdout] 99 | /// connection between the client and the server, like a network connection [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] 99 | /// connection between the client and the server, like a network connection [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> tests/util/device_test/client/client_v2/client.rs:100:5 [INFO] [stdout] | [INFO] [stdout] 100 | /// issue. [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] help: indent this line [INFO] [stdout] | [INFO] [stdout] 100 | /// issue. [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: large size difference between variants [INFO] [stdout] --> tests/util/device_test/client/client_v2/device.rs:64:1 [INFO] [stdout] | [INFO] [stdout] 64 | / pub enum ButtplugClientDeviceEvent { [INFO] [stdout] 65 | | /// Device has disconnected from server. [INFO] [stdout] 66 | | DeviceRemoved, [INFO] [stdout] | | ------------- the second-largest variant carries no data at all [INFO] [stdout] 67 | | /// Client has disconnected from server. [INFO] [stdout] ... | [INFO] [stdout] 70 | | Message(ButtplugServerMessageV2), [INFO] [stdout] | | -------------------------------- the largest variant contains at least 232 bytes [INFO] [stdout] 71 | | } [INFO] [stdout] | |_^ the entire enum is at least 232 bytes [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stdout] = note: `#[warn(clippy::large_enum_variant)]` on by default [INFO] [stdout] help: consider boxing the large fields or introducing indirection in some other way to reduce the total size of the enum [INFO] [stdout] | [INFO] [stdout] 70 - Message(ButtplugServerMessageV2), [INFO] [stdout] 70 + Message(Box), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: large size difference between variants [INFO] [stdout] --> tests/util/device_test/client/client_v2/device.rs:64:1 [INFO] [stdout] | [INFO] [stdout] 64 | / pub enum ButtplugClientDeviceEvent { [INFO] [stdout] 65 | | /// Device has disconnected from server. [INFO] [stdout] 66 | | DeviceRemoved, [INFO] [stdout] | | ------------- the second-largest variant carries no data at all [INFO] [stdout] 67 | | /// Client has disconnected from server. [INFO] [stdout] ... | [INFO] [stdout] 70 | | Message(ButtplugServerMessageV2), [INFO] [stdout] | | -------------------------------- the largest variant contains at least 232 bytes [INFO] [stdout] 71 | | } [INFO] [stdout] | |_^ the entire enum is at least 232 bytes [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stdout] = note: `#[warn(clippy::large_enum_variant)]` on by default [INFO] [stdout] help: consider boxing the large fields or introducing indirection in some other way to reduce the total size of the enum [INFO] [stdout] | [INFO] [stdout] 70 - Message(ButtplugServerMessageV2), [INFO] [stdout] 70 + Message(Box), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this lifetime isn't used in the impl [INFO] [stdout] --> tests/util/device_test/client/client_v2/in_process_connector.rs:85:6 [INFO] [stdout] | [INFO] [stdout] 85 | impl<'a> ButtplugInProcessClientConnector { [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stdout] = note: `#[warn(clippy::extra_unused_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: large size difference between variants [INFO] [stdout] --> tests/util/device_test/client/client_v2/device.rs:64:1 [INFO] [stdout] | [INFO] [stdout] 64 | / pub enum ButtplugClientDeviceEvent { [INFO] [stdout] 65 | | /// Device has disconnected from server. [INFO] [stdout] 66 | | DeviceRemoved, [INFO] [stdout] | | ------------- the second-largest variant carries no data at all [INFO] [stdout] 67 | | /// Client has disconnected from server. [INFO] [stdout] ... | [INFO] [stdout] 70 | | Message(ButtplugServerMessageV2), [INFO] [stdout] | | -------------------------------- the largest variant contains at least 232 bytes [INFO] [stdout] 71 | | } [INFO] [stdout] | |_^ the entire enum is at least 232 bytes [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stdout] = note: `#[warn(clippy::large_enum_variant)]` on by default [INFO] [stdout] help: consider boxing the large fields or introducing indirection in some other way to reduce the total size of the enum [INFO] [stdout] | [INFO] [stdout] 70 - Message(ButtplugServerMessageV2), [INFO] [stdout] 70 + Message(Box), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this lifetime isn't used in the impl [INFO] [stdout] --> tests/util/device_test/client/client_v2/in_process_connector.rs:85:6 [INFO] [stdout] | [INFO] [stdout] 85 | impl<'a> ButtplugInProcessClientConnector { [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stdout] = note: `#[warn(clippy::extra_unused_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this lifetime isn't used in the impl [INFO] [stdout] --> tests/util/device_test/client/client_v2/in_process_connector.rs:85:6 [INFO] [stdout] | [INFO] [stdout] 85 | impl<'a> ButtplugInProcessClientConnector { [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stdout] = note: `#[warn(clippy::extra_unused_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `RSSI` contains a capitalized acronym [INFO] [stdout] --> tests/util/device_test/mod.rs:51:3 [INFO] [stdout] | [INFO] [stdout] 51 | RSSI, [INFO] [stdout] | ^^^^ help: consider making the acronym lowercase, except the initial letter (notice the capitalization): `Rssi` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] = note: `#[warn(clippy::upper_case_acronyms)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> tests/util/device_test/client/client_v2/client.rs:99:5 [INFO] [stdout] | [INFO] [stdout] 99 | /// connection between the client and the server, like a network connection [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] 99 | /// connection between the client and the server, like a network connection [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> tests/util/device_test/client/client_v2/client.rs:100:5 [INFO] [stdout] | [INFO] [stdout] 100 | /// issue. [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] help: indent this line [INFO] [stdout] | [INFO] [stdout] 100 | /// issue. [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `RSSI` contains a capitalized acronym [INFO] [stdout] --> tests/util/device_test/mod.rs:51:3 [INFO] [stdout] | [INFO] [stdout] 51 | RSSI, [INFO] [stdout] | ^^^^ help: consider making the acronym lowercase, except the initial letter (notice the capitalization): `Rssi` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] = note: `#[warn(clippy::upper_case_acronyms)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> tests/util/device_test/client/client_v2/client.rs:99:5 [INFO] [stdout] | [INFO] [stdout] 99 | /// connection between the client and the server, like a network connection [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] 99 | /// connection between the client and the server, like a network connection [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> tests/util/device_test/client/client_v2/client.rs:100:5 [INFO] [stdout] | [INFO] [stdout] 100 | /// issue. [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] help: indent this line [INFO] [stdout] | [INFO] [stdout] 100 | /// issue. [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `RSSI` contains a capitalized acronym [INFO] [stdout] --> tests/util/device_test/mod.rs:51:3 [INFO] [stdout] | [INFO] [stdout] 51 | RSSI, [INFO] [stdout] | ^^^^ help: consider making the acronym lowercase, except the initial letter (notice the capitalization): `Rssi` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] = note: `#[warn(clippy::upper_case_acronyms)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> tests/util/test_device_manager/test_device.rs:276:14 [INFO] [stdout] | [INFO] [stdout] 276 | if reads.lock().await.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!reads.lock().await.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] --> tests/util/test_device_manager/test_device.rs:276:14 [INFO] [stdout] | [INFO] [stdout] 276 | if reads.lock().await.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!reads.lock().await.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: large size difference between variants [INFO] [stdout] --> tests/util/device_test/client/client_v2/device.rs:64:1 [INFO] [stdout] | [INFO] [stdout] 64 | / pub enum ButtplugClientDeviceEvent { [INFO] [stdout] 65 | | /// Device has disconnected from server. [INFO] [stdout] 66 | | DeviceRemoved, [INFO] [stdout] | | ------------- the second-largest variant carries no data at all [INFO] [stdout] 67 | | /// Client has disconnected from server. [INFO] [stdout] ... | [INFO] [stdout] 70 | | Message(ButtplugServerMessageV2), [INFO] [stdout] | | -------------------------------- the largest variant contains at least 232 bytes [INFO] [stdout] 71 | | } [INFO] [stdout] | |_^ the entire enum is at least 232 bytes [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stdout] = note: `#[warn(clippy::large_enum_variant)]` on by default [INFO] [stdout] help: consider boxing the large fields or introducing indirection in some other way to reduce the total size of the enum [INFO] [stdout] | [INFO] [stdout] 70 - Message(ButtplugServerMessageV2), [INFO] [stdout] 70 + Message(Box), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> tests/util/test_device_manager/test_device.rs:276:14 [INFO] [stdout] | [INFO] [stdout] 276 | if reads.lock().await.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!reads.lock().await.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: this assertion is always `false` [INFO] [stdout] --> tests/util/channel_transport.rs:191:9 [INFO] [stdout] | [INFO] [stdout] 191 | assert!(false, "Error connecting to client: {:?}", e); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: replace this with `panic!()` or `unreachable!()` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assertions_on_constants [INFO] [stdout] = note: `#[warn(clippy::assertions_on_constants)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this assertion is always `false` [INFO] [stdout] --> tests/util/channel_transport.rs:191:9 [INFO] [stdout] | [INFO] [stdout] 191 | assert!(false, "Error connecting to client: {:?}", e); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: replace this with `panic!()` or `unreachable!()` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assertions_on_constants [INFO] [stdout] = note: `#[warn(clippy::assertions_on_constants)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this lifetime isn't used in the impl [INFO] [stdout] --> tests/util/device_test/client/client_v2/in_process_connector.rs:85:6 [INFO] [stdout] | [INFO] [stdout] 85 | impl<'a> ButtplugInProcessClientConnector { [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stdout] = note: `#[warn(clippy::extra_unused_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this assertion is always `false` [INFO] [stdout] --> tests/util/channel_transport.rs:191:9 [INFO] [stdout] | [INFO] [stdout] 191 | assert!(false, "Error connecting to client: {:?}", e); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: replace this with `panic!()` or `unreachable!()` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assertions_on_constants [INFO] [stdout] = note: `#[warn(clippy::assertions_on_constants)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/util/channel_transport.rs:258:42 [INFO] [stdout] | [INFO] [stdout] 258 | self.server_serializer.serialize(&vec![msg]), [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/util/channel_transport.rs:338:42 [INFO] [stdout] | [INFO] [stdout] 338 | self.server_serializer.serialize(&vec![msg]), [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: large size difference between variants [INFO] [stdout] --> tests/util/device_test/client/client_v2/device.rs:64:1 [INFO] [stdout] | [INFO] [stdout] 64 | / pub enum ButtplugClientDeviceEvent { [INFO] [stdout] 65 | | /// Device has disconnected from server. [INFO] [stdout] 66 | | DeviceRemoved, [INFO] [stdout] | | ------------- the second-largest variant carries no data at all [INFO] [stdout] 67 | | /// Client has disconnected from server. [INFO] [stdout] ... | [INFO] [stdout] 70 | | Message(ButtplugServerMessageV2), [INFO] [stdout] | | -------------------------------- the largest variant contains at least 232 bytes [INFO] [stdout] 71 | | } [INFO] [stdout] | |_^ the entire enum is at least 232 bytes [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stdout] = note: `#[warn(clippy::large_enum_variant)]` on by default [INFO] [stdout] help: consider boxing the large fields or introducing indirection in some other way to reduce the total size of the enum [INFO] [stdout] | [INFO] [stdout] 70 - Message(ButtplugServerMessageV2), [INFO] [stdout] 70 + Message(Box), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/util/channel_transport.rs:258:42 [INFO] [stdout] | [INFO] [stdout] 258 | self.server_serializer.serialize(&vec![msg]), [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/util/channel_transport.rs:338:42 [INFO] [stdout] | [INFO] [stdout] 338 | self.server_serializer.serialize(&vec![msg]), [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this lifetime isn't used in the impl [INFO] [stdout] --> tests/util/device_test/client/client_v2/in_process_connector.rs:85:6 [INFO] [stdout] | [INFO] [stdout] 85 | impl<'a> ButtplugInProcessClientConnector { [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stdout] = note: `#[warn(clippy::extra_unused_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `RSSI` contains a capitalized acronym [INFO] [stdout] --> tests/util/device_test/mod.rs:51:3 [INFO] [stdout] | [INFO] [stdout] 51 | RSSI, [INFO] [stdout] | ^^^^ help: consider making the acronym lowercase, except the initial letter (notice the capitalization): `Rssi` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] = note: `#[warn(clippy::upper_case_acronyms)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> tests/util/test_device_manager/test_device.rs:276:14 [INFO] [stdout] | [INFO] [stdout] 276 | if reads.lock().await.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!reads.lock().await.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: this assertion is always `false` [INFO] [stdout] --> tests/util/channel_transport.rs:191:9 [INFO] [stdout] | [INFO] [stdout] 191 | assert!(false, "Error connecting to client: {:?}", e); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: replace this with `panic!()` or `unreachable!()` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assertions_on_constants [INFO] [stdout] = note: `#[warn(clippy::assertions_on_constants)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `RSSI` contains a capitalized acronym [INFO] [stdout] --> tests/util/device_test/mod.rs:51:3 [INFO] [stdout] | [INFO] [stdout] 51 | RSSI, [INFO] [stdout] | ^^^^ help: consider making the acronym lowercase, except the initial letter (notice the capitalization): `Rssi` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] = note: `#[warn(clippy::upper_case_acronyms)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/util/channel_transport.rs:258:42 [INFO] [stdout] | [INFO] [stdout] 258 | self.server_serializer.serialize(&vec![msg]), [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/util/channel_transport.rs:338:42 [INFO] [stdout] | [INFO] [stdout] 338 | self.server_serializer.serialize(&vec![msg]), [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> tests/util/test_device_manager/test_device.rs:276:14 [INFO] [stdout] | [INFO] [stdout] 276 | if reads.lock().await.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!reads.lock().await.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: this assertion is always `false` [INFO] [stdout] --> tests/util/channel_transport.rs:191:9 [INFO] [stdout] | [INFO] [stdout] 191 | assert!(false, "Error connecting to client: {:?}", e); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: replace this with `panic!()` or `unreachable!()` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assertions_on_constants [INFO] [stdout] = note: `#[warn(clippy::assertions_on_constants)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/util/channel_transport.rs:258:42 [INFO] [stdout] | [INFO] [stdout] 258 | self.server_serializer.serialize(&vec![msg]), [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/util/channel_transport.rs:338:42 [INFO] [stdout] | [INFO] [stdout] 338 | self.server_serializer.serialize(&vec![msg]), [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/util/channel_transport.rs:258:42 [INFO] [stdout] | [INFO] [stdout] 258 | self.server_serializer.serialize(&vec![msg]), [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/util/channel_transport.rs:338:42 [INFO] [stdout] | [INFO] [stdout] 338 | self.server_serializer.serialize(&vec![msg]), [INFO] [stdout] | ^^^^^^^^^^ help: you can use a slice directly: `&[msg]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 2m 34s [INFO] running `Command { std: "docker" "inspect" "809d6f6d39d15f7031a0f4225477393f6be299e3b153de01e309886a58850507", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "809d6f6d39d15f7031a0f4225477393f6be299e3b153de01e309886a58850507", kill_on_drop: false }` [INFO] [stdout] 809d6f6d39d15f7031a0f4225477393f6be299e3b153de01e309886a58850507