[INFO] crate rzw 0.1.0 is already in cache [INFO] extracting crate rzw 0.1.0 into work/ex/clippy-test-run/sources/stable/reg/rzw/0.1.0 [INFO] extracting crate rzw 0.1.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/rzw/0.1.0 [INFO] validating manifest of rzw-0.1.0 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of rzw-0.1.0 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing rzw-0.1.0 [INFO] finished frobbing rzw-0.1.0 [INFO] frobbed toml for rzw-0.1.0 written to work/ex/clippy-test-run/sources/stable/reg/rzw/0.1.0/Cargo.toml [INFO] started frobbing rzw-0.1.0 [INFO] finished frobbing rzw-0.1.0 [INFO] frobbed toml for rzw-0.1.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/rzw/0.1.0/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting rzw-0.1.0 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-4/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/rzw/0.1.0:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] e85ce95033454d6c4c8a1500762e93742677dc1309849825c590522acb86b509 [INFO] running `"docker" "start" "-a" "e85ce95033454d6c4c8a1500762e93742677dc1309849825c590522acb86b509"` [INFO] [stderr] warning: file found to be present in multiple build targets: /opt/crater/workdir/examples/01_basic.rs [INFO] [stderr] Checking mac v0.0.2 [INFO] [stderr] Checking ioctl-rs v0.1.6 [INFO] [stderr] Checking serial v0.3.4 [INFO] [stderr] Checking rzw v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/error.rs:47:13 [INFO] [stderr] | [INFO] [stderr] 47 | kind: kind, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `kind` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/driver/serial.rs:55:13 [INFO] [stderr] | [INFO] [stderr] 55 | port: port, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `port` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/driver/serial.rs:58:13 [INFO] [stderr] | [INFO] [stderr] 58 | path: path, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `path` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/driver/serial.rs:453:13 [INFO] [stderr] | [INFO] [stderr] 453 | typ: typ, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `typ` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/driver/serial.rs:454:13 [INFO] [stderr] | [INFO] [stderr] 454 | func: func, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `func` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/driver/serial.rs:455:13 [INFO] [stderr] | [INFO] [stderr] 455 | data: data, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `data` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/driver/serial.rs:462:13 [INFO] [stderr] | [INFO] [stderr] 462 | header: header, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `header` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cmds/mod.rs:202:13 [INFO] [stderr] | [INFO] [stderr] 202 | node_id: node_id, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `node_id` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cmds/mod.rs:203:13 [INFO] [stderr] | [INFO] [stderr] 203 | cmd_class: cmd_class, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `cmd_class` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cmds/mod.rs:204:13 [INFO] [stderr] | [INFO] [stderr] 204 | cmd: cmd, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `cmd` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cmds/mod.rs:205:13 [INFO] [stderr] | [INFO] [stderr] 205 | data: data, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `data` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cmds/mod.rs:219:13 [INFO] [stderr] | [INFO] [stderr] 219 | node_id: node_id, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `node_id` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cmds/mod.rs:220:13 [INFO] [stderr] | [INFO] [stderr] 220 | cmd_class: cmd_class, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `cmd_class` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cmds/mod.rs:221:13 [INFO] [stderr] | [INFO] [stderr] 221 | cmd: cmd, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `cmd` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cmds/mod.rs:222:13 [INFO] [stderr] | [INFO] [stderr] 222 | data: data, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `data` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cmds/mod.rs:223:13 [INFO] [stderr] | [INFO] [stderr] 223 | raw: raw, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `raw` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/basic/mod.rs:150:13 [INFO] [stderr] | [INFO] [stderr] 150 | driver: driver, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `driver` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/basic/mod.rs:151:13 [INFO] [stderr] | [INFO] [stderr] 151 | id: id, [INFO] [stderr] | ^^^^^^ help: replace it with: `id` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/error.rs:47:13 [INFO] [stderr] | [INFO] [stderr] 47 | kind: kind, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `kind` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/driver/serial.rs:55:13 [INFO] [stderr] | [INFO] [stderr] 55 | port: port, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `port` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/driver/serial.rs:58:13 [INFO] [stderr] | [INFO] [stderr] 58 | path: path, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `path` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/driver/serial.rs:453:13 [INFO] [stderr] | [INFO] [stderr] 453 | typ: typ, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `typ` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/driver/serial.rs:454:13 [INFO] [stderr] | [INFO] [stderr] 454 | func: func, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `func` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/driver/serial.rs:455:13 [INFO] [stderr] | [INFO] [stderr] 455 | data: data, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `data` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/driver/serial.rs:462:13 [INFO] [stderr] | [INFO] [stderr] 462 | header: header, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `header` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cmds/mod.rs:202:13 [INFO] [stderr] | [INFO] [stderr] 202 | node_id: node_id, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `node_id` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cmds/mod.rs:203:13 [INFO] [stderr] | [INFO] [stderr] 203 | cmd_class: cmd_class, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `cmd_class` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cmds/mod.rs:204:13 [INFO] [stderr] | [INFO] [stderr] 204 | cmd: cmd, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `cmd` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cmds/mod.rs:205:13 [INFO] [stderr] | [INFO] [stderr] 205 | data: data, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `data` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cmds/mod.rs:219:13 [INFO] [stderr] | [INFO] [stderr] 219 | node_id: node_id, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `node_id` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cmds/mod.rs:220:13 [INFO] [stderr] | [INFO] [stderr] 220 | cmd_class: cmd_class, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `cmd_class` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cmds/mod.rs:221:13 [INFO] [stderr] | [INFO] [stderr] 221 | cmd: cmd, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `cmd` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cmds/mod.rs:222:13 [INFO] [stderr] | [INFO] [stderr] 222 | data: data, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `data` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cmds/mod.rs:223:13 [INFO] [stderr] | [INFO] [stderr] 223 | raw: raw, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `raw` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/basic/mod.rs:150:13 [INFO] [stderr] | [INFO] [stderr] 150 | driver: driver, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `driver` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/basic/mod.rs:151:13 [INFO] [stderr] | [INFO] [stderr] 151 | id: id, [INFO] [stderr] | ^^^^^^ help: replace it with: `id` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/cmds/meter.rs:234:29 [INFO] [stderr] | [INFO] [stderr] 234 | ((input >> 3) & 0b00000011), [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0011` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/cmds/meter.rs:235:22 [INFO] [stderr] | [INFO] [stderr] 235 | (input & 0b00000111), [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0111` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/cmds/meter.rs:297:46 [INFO] [stderr] | [INFO] [stderr] 297 | let typ = MeterType::from_u8(input & 0b00011111).ok_or(Error::new( [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0001_1111` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/cmds/meter.rs:301:35 [INFO] [stderr] | [INFO] [stderr] 301 | let rate = (input >> 5) & 0b00000011; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0011` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/cmds/powerlevel.rs:163:9 [INFO] [stderr] | [INFO] [stderr] 163 | return [b1, b2] [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: remove `return` as shown: `[b1, b2]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/cmds/meter.rs:234:29 [INFO] [stderr] | [INFO] [stderr] 234 | ((input >> 3) & 0b00000011), [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0011` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/cmds/meter.rs:235:22 [INFO] [stderr] | [INFO] [stderr] 235 | (input & 0b00000111), [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0111` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/cmds/meter.rs:297:46 [INFO] [stderr] | [INFO] [stderr] 297 | let typ = MeterType::from_u8(input & 0b00011111).ok_or(Error::new( [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0001_1111` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/cmds/meter.rs:301:35 [INFO] [stderr] | [INFO] [stderr] 301 | let rate = (input >> 5) & 0b00000011; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0011` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/cmds/meter.rs:315:45 [INFO] [stderr] | [INFO] [stderr] 315 | Meter::get_precision_scale_size(0b00000000) [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/cmds/meter.rs:319:45 [INFO] [stderr] | [INFO] [stderr] 319 | Meter::get_precision_scale_size(0b11100000) [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b1110_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/cmds/meter.rs:323:45 [INFO] [stderr] | [INFO] [stderr] 323 | Meter::get_precision_scale_size(0b00111000) [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0011_1000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/cmds/meter.rs:327:45 [INFO] [stderr] | [INFO] [stderr] 327 | Meter::get_precision_scale_size(0b00101000) [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0010_1000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/cmds/meter.rs:331:45 [INFO] [stderr] | [INFO] [stderr] 331 | Meter::get_precision_scale_size(0b00101111) [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0010_1111` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/cmds/meter.rs:335:45 [INFO] [stderr] | [INFO] [stderr] 335 | Meter::get_precision_scale_size(0b00101001) [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0010_1001` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/cmds/meter.rs:349:20 [INFO] [stderr] | [INFO] [stderr] 349 | assert_eq!(2147483.647, Meter::calc_value(&[0x7F, 0xFF, 0xFF, 0xFF], 3)); [INFO] [stderr] | ^^^^^^^^^^^ help: consider: `2_147_483.647` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/cmds/meter.rs:351:14 [INFO] [stderr] | [INFO] [stderr] 351 | -21474836.48, [INFO] [stderr] | ^^^^^^^^^^^ help: consider: `21_474_836.48` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/cmds/powerlevel.rs:163:9 [INFO] [stderr] | [INFO] [stderr] 163 | return [b1, b2] [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: remove `return` as shown: `[b1, b2]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] error: handle read amount returned or use `Read::read_exact` instead [INFO] [stderr] --> src/driver/serial.rs:88:9 [INFO] [stderr] | [INFO] [stderr] 88 | self.port.read(&mut buf)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::unused_io_amount)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] error: handle read amount returned or use `Read::read_exact` instead [INFO] [stderr] --> src/driver/serial.rs:96:13 [INFO] [stderr] | [INFO] [stderr] 96 | self.port.read(&mut buf)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] error: handle read amount returned or use `Read::read_exact` instead [INFO] [stderr] --> src/driver/serial.rs:105:17 [INFO] [stderr] | [INFO] [stderr] 105 | self.port.read(&mut buf)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/driver/serial.rs:115:17 [INFO] [stderr] | [INFO] [stderr] 115 | / self.port.write( [INFO] [stderr] 116 | | SerialMsg::new_header(SerialMsgHeader::ACK) [INFO] [stderr] 117 | | .get_command() [INFO] [stderr] 118 | | .as_slice(), [INFO] [stderr] 119 | | )?; [INFO] [stderr] | |__________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/driver/serial.rs:123:17 [INFO] [stderr] | [INFO] [stderr] 123 | / self.port.write( [INFO] [stderr] 124 | | SerialMsg::new_header(SerialMsgHeader::NAK) [INFO] [stderr] 125 | | .get_command() [INFO] [stderr] 126 | | .as_slice(), [INFO] [stderr] 127 | | )?; [INFO] [stderr] | |__________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/driver/serial.rs:154:46 [INFO] [stderr] | [INFO] [stderr] 154 | fn read_single_msg_rty(&mut self, tries: &i32) -> Result { [INFO] [stderr] | ^^^^ help: consider passing by value instead: `i32` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/driver/serial.rs:156:32 [INFO] [stderr] | [INFO] [stderr] 156 | let mut counter: i32 = tries.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^ help: try dereferencing it: `*tries` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: length comparison to one [INFO] [stderr] --> src/driver/serial.rs:209:60 [INFO] [stderr] | [INFO] [stderr] 209 | if m.header == SerialMsgHeader::SOF && m.data.len() >= 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!m.data.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/driver/serial.rs:257:9 [INFO] [stderr] | [INFO] [stderr] 257 | self.port.write(msg.get_command().as_slice())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: length comparison to one [INFO] [stderr] --> src/driver/serial.rs:308:12 [INFO] [stderr] | [INFO] [stderr] 308 | if self.messages.len() < 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.messages.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/driver/serial.rs:331:9 [INFO] [stderr] | [INFO] [stderr] 331 | self.port.write(msg.get_command().as_slice())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `data` [INFO] [stderr] --> src/driver/serial.rs:366:18 [INFO] [stderr] | [INFO] [stderr] 366 | for i in 3..31 { [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 366 | for (i, ) in data.iter().enumerate().take(31).skip(3) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/driver/serial.rs:398:9 [INFO] [stderr] | [INFO] [stderr] 398 | self.port.write(msg.get_command().as_slice())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/driver/serial.rs:522:9 [INFO] [stderr] | [INFO] [stderr] 522 | / let msg_data: &[u8]; [INFO] [stderr] 523 | | // when there is data extract it [INFO] [stderr] 524 | | if data.len() > 5 { [INFO] [stderr] 525 | | msg_data = &data[4..(data.len() - 1)]; [INFO] [stderr] ... | [INFO] [stderr] 529 | | msg_data = &[0; 0]; [INFO] [stderr] 530 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let msg_data = if data.len() > 5 { &data[4..(data.len() - 1)] } else { &[0; 0] };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: length comparison to one [INFO] [stderr] --> src/driver/serial.rs:472:12 [INFO] [stderr] | [INFO] [stderr] 472 | if data.len() < 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `data.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/driver/serial.rs:480:56 [INFO] [stderr] | [INFO] [stderr] 480 | let header = SerialMsgHeader::from_u8(data[0]).ok_or(Error::new( [INFO] [stderr] | ________________________________________________________^ [INFO] [stderr] 481 | | ErrorKind::UnknownZWave, [INFO] [stderr] 482 | | "Unknown ZWave header detected", [INFO] [stderr] 483 | | ))?; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 480 | let header = SerialMsgHeader::from_u8(data[0]).ok_or_else(|| Error::new( [INFO] [stderr] 481 | ErrorKind::UnknownZWave, [INFO] [stderr] 482 | "Unknown ZWave header detected", [INFO] [stderr] 483 | ))?; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/driver/serial.rs:513:14 [INFO] [stderr] | [INFO] [stderr] 513 | .ok_or(Error::new(ErrorKind::UnknownZWave, "Unknown message type"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| Error::new(ErrorKind::UnknownZWave, "Unknown message type"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/driver/serial.rs:516:60 [INFO] [stderr] | [INFO] [stderr] 516 | let function = SerialMsgFunction::from_u8(data[3]).ok_or(Error::new( [INFO] [stderr] | ____________________________________________________________^ [INFO] [stderr] 517 | | ErrorKind::UnknownZWave, [INFO] [stderr] 518 | | "Unknown ZWave function detected", [INFO] [stderr] 519 | | ))?; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 516 | let function = SerialMsgFunction::from_u8(data[3]).ok_or_else(|| Error::new( [INFO] [stderr] 517 | ErrorKind::UnknownZWave, [INFO] [stderr] 518 | "Unknown ZWave function detected", [INFO] [stderr] 519 | ))?; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/driver/serial.rs:562:25 [INFO] [stderr] | [INFO] [stderr] 562 | pub fn to_hex(data: &Vec) -> String { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/driver/serial.rs:562:19 [INFO] [stderr] | [INFO] [stderr] 562 | pub fn to_hex(data: &Vec) -> String { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `data`. [INFO] [stderr] --> src/driver/serial.rs:565:18 [INFO] [stderr] | [INFO] [stderr] 565 | for i in 0..data.len() { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 565 | for in &data { [INFO] [stderr] | ^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `data`. [INFO] [stderr] --> src/driver/serial.rs:581:18 [INFO] [stderr] | [INFO] [stderr] 581 | for i in 1..data.len() { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 581 | for in data.iter().skip(1) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/cmds/info.rs:29:45 [INFO] [stderr] | [INFO] [stderr] 29 | let m = msg.get(i as usize).ok_or(Error::new(ErrorKind::UnknownZWave, "Message is to short"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| Error::new(ErrorKind::UnknownZWave, "Message is to short"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/cmds/info.rs:30:25 [INFO] [stderr] | [INFO] [stderr] 30 | let m = m.clone(); [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*m` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/cmds/info.rs:53:45 [INFO] [stderr] | [INFO] [stderr] 53 | let m = msg.get(i as usize).ok_or(Error::new(ErrorKind::UnknownZWave, "Message is to short"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| Error::new(ErrorKind::UnknownZWave, "Message is to short"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/cmds/info.rs:54:25 [INFO] [stderr] | [INFO] [stderr] 54 | let m = m.clone(); [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*m` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/cmds/info.rs:57:49 [INFO] [stderr] | [INFO] [stderr] 57 | let cmd = CommandClass::from_u8(m.clone()).unwrap_or(CommandClass::NO_OPERATION); [INFO] [stderr] | ^^^^^^^^^ help: try removing the `clone` call: `m` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/cmds/meter.rs:129:46 [INFO] [stderr] | [INFO] [stderr] 129 | let typ = MeterType::from_u8(msg[5]).ok_or(Error::new( [INFO] [stderr] | ______________________________________________^ [INFO] [stderr] 130 | | ErrorKind::UnknownZWave, [INFO] [stderr] 131 | | "Answer contained wrong meter type", [INFO] [stderr] 132 | | ))?; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 129 | let typ = MeterType::from_u8(msg[5]).ok_or_else(|| Error::new( [INFO] [stderr] 130 | ErrorKind::UnknownZWave, [INFO] [stderr] 131 | "Answer contained wrong meter type", [INFO] [stderr] 132 | ))?; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/cmds/meter.rs:212:9 [INFO] [stderr] | [INFO] [stderr] 212 | / let pre_value; [INFO] [stderr] 213 | | if time == 0x00 || msg.len() < 10 + (2 * size) as usize { [INFO] [stderr] 214 | | pre_value = 0.0; [INFO] [stderr] 215 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 219 | | ); [INFO] [stderr] 220 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] help: it is more idiomatic to write [INFO] [stderr] | [INFO] [stderr] 212 | let pre_value = if time == 0x00 || msg.len() < 10 + (2 * size) as usize { 0.0 } else { Meter::calc_value( [INFO] [stderr] 213 | &msg[10 + size as usize..10 + (2 * size) as usize], [INFO] [stderr] 214 | precision, [INFO] [stderr] 215 | ) }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cmds/meter.rs:209:21 [INFO] [stderr] | [INFO] [stderr] 209 | let time = ((msg[7 + size as usize] as u16) << 8) | msg[8 + size as usize] as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(msg[7 + size as usize])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cmds/meter.rs:209:61 [INFO] [stderr] | [INFO] [stderr] 209 | let time = ((msg[7 + size as usize] as u16) << 8) | msg[8 + size as usize] as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(msg[8 + size as usize])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting i32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/cmds/meter.rs:242:25 [INFO] [stderr] | [INFO] [stderr] 242 | let precision = (10.pow(precision as u32)) as f64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from((10.pow(precision as u32)))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/cmds/meter.rs:242:33 [INFO] [stderr] | [INFO] [stderr] 242 | let precision = (10.pow(precision as u32)) as f64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `u32::from(precision)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting i8 to f64 may become silently lossy if types change [INFO] [stderr] --> src/cmds/meter.rs:246:20 [INFO] [stderr] | [INFO] [stderr] 246 | return (bytes[0] as i8) as f64 / precision; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from((bytes[0] as i8))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting i16 to f64 may become silently lossy if types change [INFO] [stderr] --> src/cmds/meter.rs:251:20 [INFO] [stderr] | [INFO] [stderr] 251 | return (((bytes[0] as i16) << 8) | bytes[1] as i16) as f64 / precision; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(((bytes[0] as i16) << 8) | bytes[1] as i16)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i16 may become silently lossy if types change [INFO] [stderr] --> src/cmds/meter.rs:251:22 [INFO] [stderr] | [INFO] [stderr] 251 | return (((bytes[0] as i16) << 8) | bytes[1] as i16) as f64 / precision; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `i16::from(bytes[0])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i16 may become silently lossy if types change [INFO] [stderr] --> src/cmds/meter.rs:251:48 [INFO] [stderr] | [INFO] [stderr] 251 | return (((bytes[0] as i16) << 8) | bytes[1] as i16) as f64 / precision; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `i16::from(bytes[1])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting i32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/cmds/meter.rs:256:20 [INFO] [stderr] | [INFO] [stderr] 256 | return (((((bytes[0] as i32) << 24) | (bytes[1] as i32) << 16) | (bytes[2] as i32) << 8) [INFO] [stderr] | ____________________^ [INFO] [stderr] 257 | | | (bytes[3] as i32)) as f64 / precision; [INFO] [stderr] | |___________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 256 | return f64::from(((((bytes[0] as i32) << 24) | (bytes[1] as i32) << 16) | (bytes[2] as i32) << 8) [INFO] [stderr] 257 | | (bytes[3] as i32)) / precision; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/cmds/meter.rs:256:24 [INFO] [stderr] | [INFO] [stderr] 256 | return (((((bytes[0] as i32) << 24) | (bytes[1] as i32) << 16) | (bytes[2] as i32) << 8) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `i32::from(bytes[0])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/cmds/meter.rs:256:51 [INFO] [stderr] | [INFO] [stderr] 256 | return (((((bytes[0] as i32) << 24) | (bytes[1] as i32) << 16) | (bytes[2] as i32) << 8) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `i32::from(bytes[1])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/cmds/meter.rs:256:78 [INFO] [stderr] | [INFO] [stderr] 256 | return (((((bytes[0] as i32) << 24) | (bytes[1] as i32) << 16) | (bytes[2] as i32) << 8) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `i32::from(bytes[2])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/cmds/meter.rs:257:19 [INFO] [stderr] | [INFO] [stderr] 257 | | (bytes[3] as i32)) as f64 / precision; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `i32::from(bytes[3])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] error: handle read amount returned or use `Read::read_exact` instead [INFO] [stderr] --> src/driver/serial.rs:88:9 [INFO] [stderr] | [INFO] [stderr] 88 | self.port.read(&mut buf)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/cmds/meter.rs:264:22 [INFO] [stderr] | [INFO] [stderr] 264 | fn to_meter_data(data: f64, typ: MeterType, scale: u8) -> Result { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::unused_io_amount)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] error: handle read amount returned or use `Read::read_exact` instead [INFO] [stderr] --> src/driver/serial.rs:96:13 [INFO] [stderr] | [INFO] [stderr] 96 | self.port.read(&mut buf)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] error: handle read amount returned or use `Read::read_exact` instead [INFO] [stderr] --> src/driver/serial.rs:105:17 [INFO] [stderr] | [INFO] [stderr] 105 | self.port.read(&mut buf)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/driver/serial.rs:115:17 [INFO] [stderr] | [INFO] [stderr] 115 | / self.port.write( [INFO] [stderr] 116 | | SerialMsg::new_header(SerialMsgHeader::ACK) [INFO] [stderr] 117 | | .get_command() [INFO] [stderr] 118 | | .as_slice(), [INFO] [stderr] 119 | | )?; [INFO] [stderr] | |__________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/driver/serial.rs:123:17 [INFO] [stderr] | [INFO] [stderr] 123 | / self.port.write( [INFO] [stderr] 124 | | SerialMsg::new_header(SerialMsgHeader::NAK) [INFO] [stderr] 125 | | .get_command() [INFO] [stderr] 126 | | .as_slice(), [INFO] [stderr] 127 | | )?; [INFO] [stderr] | |__________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/driver/serial.rs:154:46 [INFO] [stderr] | [INFO] [stderr] 154 | fn read_single_msg_rty(&mut self, tries: &i32) -> Result { [INFO] [stderr] | ^^^^ help: consider passing by value instead: `i32` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/driver/serial.rs:156:32 [INFO] [stderr] | [INFO] [stderr] 156 | let mut counter: i32 = tries.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^ help: try dereferencing it: `*tries` [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/cmds/meter.rs:297:58 [INFO] [stderr] | [INFO] [stderr] 297 | let typ = MeterType::from_u8(input & 0b00011111).ok_or(Error::new( [INFO] [stderr] | __________________________________________________________^ [INFO] [stderr] 298 | | ErrorKind::UnknownZWave, [INFO] [stderr] 299 | | "Answer contained wrong meter type", [INFO] [stderr] 300 | | ))?; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 297 | let typ = MeterType::from_u8(input & 0b00011111).ok_or_else(|| Error::new( [INFO] [stderr] 298 | ErrorKind::UnknownZWave, [INFO] [stderr] 299 | "Answer contained wrong meter type", [INFO] [stderr] 300 | ))?; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: length comparison to one [INFO] [stderr] --> src/driver/serial.rs:209:60 [INFO] [stderr] | [INFO] [stderr] 209 | if m.header == SerialMsgHeader::SOF && m.data.len() >= 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!m.data.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/driver/serial.rs:257:9 [INFO] [stderr] | [INFO] [stderr] 257 | self.port.write(msg.get_command().as_slice())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: length comparison to one [INFO] [stderr] --> src/driver/serial.rs:308:12 [INFO] [stderr] | [INFO] [stderr] 308 | if self.messages.len() < 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.messages.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/driver/serial.rs:331:9 [INFO] [stderr] | [INFO] [stderr] 331 | self.port.write(msg.get_command().as_slice())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `data` [INFO] [stderr] --> src/driver/serial.rs:366:18 [INFO] [stderr] | [INFO] [stderr] 366 | for i in 3..31 { [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 366 | for (i, ) in data.iter().enumerate().take(31).skip(3) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/cmds/meter.rs:342:9 [INFO] [stderr] | [INFO] [stderr] 342 | assert_eq!(0.0, Meter::calc_value(&[0x00], 0)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::float_cmp)] on by default [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/cmds/meter.rs:342:9 [INFO] [stderr] | [INFO] [stderr] 342 | assert_eq!(0.0, Meter::calc_value(&[0x00], 0)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/driver/serial.rs:398:9 [INFO] [stderr] | [INFO] [stderr] 398 | self.port.write(msg.get_command().as_slice())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/cmds/meter.rs:343:9 [INFO] [stderr] | [INFO] [stderr] 343 | assert_eq!(1.27, Meter::calc_value(&[0x7F], 2)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/cmds/meter.rs:343:9 [INFO] [stderr] | [INFO] [stderr] 343 | assert_eq!(1.27, Meter::calc_value(&[0x7F], 2)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/cmds/meter.rs:344:9 [INFO] [stderr] | [INFO] [stderr] 344 | assert_eq!(-12.8, Meter::calc_value(&[0x80], 1)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/cmds/meter.rs:344:9 [INFO] [stderr] | [INFO] [stderr] 344 | assert_eq!(-12.8, Meter::calc_value(&[0x80], 1)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/cmds/meter.rs:345:9 [INFO] [stderr] | [INFO] [stderr] 345 | assert_eq!(0.00, Meter::calc_value(&[0x00, 0x00], 0)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/cmds/meter.rs:345:9 [INFO] [stderr] | [INFO] [stderr] 345 | assert_eq!(0.00, Meter::calc_value(&[0x00, 0x00], 0)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/cmds/meter.rs:346:9 [INFO] [stderr] | [INFO] [stderr] 346 | assert_eq!(32.767, Meter::calc_value(&[0x7F, 0xFF], 3)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/cmds/meter.rs:346:9 [INFO] [stderr] | [INFO] [stderr] 346 | assert_eq!(32.767, Meter::calc_value(&[0x7F, 0xFF], 3)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/cmds/meter.rs:347:9 [INFO] [stderr] | [INFO] [stderr] 347 | assert_eq!(-327.68, Meter::calc_value(&[0x80, 0x00], 2)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/cmds/meter.rs:347:9 [INFO] [stderr] | [INFO] [stderr] 347 | assert_eq!(-327.68, Meter::calc_value(&[0x80, 0x00], 2)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/cmds/meter.rs:348:9 [INFO] [stderr] | [INFO] [stderr] 348 | assert_eq!(0.00, Meter::calc_value(&[0x00, 0x00, 0x00, 0x00], 0)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/cmds/meter.rs:348:9 [INFO] [stderr] | [INFO] [stderr] 348 | assert_eq!(0.00, Meter::calc_value(&[0x00, 0x00, 0x00, 0x00], 0)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/cmds/meter.rs:349:9 [INFO] [stderr] | [INFO] [stderr] 349 | assert_eq!(2147483.647, Meter::calc_value(&[0x7F, 0xFF, 0xFF, 0xFF], 3)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/cmds/meter.rs:349:9 [INFO] [stderr] | [INFO] [stderr] 349 | assert_eq!(2147483.647, Meter::calc_value(&[0x7F, 0xFF, 0xFF, 0xFF], 3)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/cmds/meter.rs:350:9 [INFO] [stderr] | [INFO] [stderr] 350 | / assert_eq!( [INFO] [stderr] 351 | | -21474836.48, [INFO] [stderr] 352 | | Meter::calc_value(&[0x80, 0x00, 0x00, 0x00], 2) [INFO] [stderr] 353 | | ); [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/cmds/meter.rs:350:9 [INFO] [stderr] | [INFO] [stderr] 350 | / assert_eq!( [INFO] [stderr] 351 | | -21474836.48, [INFO] [stderr] 352 | | Meter::calc_value(&[0x80, 0x00, 0x00, 0x00], 2) [INFO] [stderr] 353 | | ); [INFO] [stderr] | |__________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/driver/serial.rs:522:9 [INFO] [stderr] | [INFO] [stderr] 522 | / let msg_data: &[u8]; [INFO] [stderr] 523 | | // when there is data extract it [INFO] [stderr] 524 | | if data.len() > 5 { [INFO] [stderr] 525 | | msg_data = &data[4..(data.len() - 1)]; [INFO] [stderr] ... | [INFO] [stderr] 529 | | msg_data = &[0; 0]; [INFO] [stderr] 530 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let msg_data = if data.len() > 5 { &data[4..(data.len() - 1)] } else { &[0; 0] };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: length comparison to one [INFO] [stderr] --> src/driver/serial.rs:472:12 [INFO] [stderr] | [INFO] [stderr] 472 | if data.len() < 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `data.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/driver/serial.rs:480:56 [INFO] [stderr] | [INFO] [stderr] 480 | let header = SerialMsgHeader::from_u8(data[0]).ok_or(Error::new( [INFO] [stderr] | ________________________________________________________^ [INFO] [stderr] 481 | | ErrorKind::UnknownZWave, [INFO] [stderr] 482 | | "Unknown ZWave header detected", [INFO] [stderr] 483 | | ))?; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 480 | let header = SerialMsgHeader::from_u8(data[0]).ok_or_else(|| Error::new( [INFO] [stderr] 481 | ErrorKind::UnknownZWave, [INFO] [stderr] 482 | "Unknown ZWave header detected", [INFO] [stderr] 483 | ))?; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/driver/serial.rs:513:14 [INFO] [stderr] | [INFO] [stderr] 513 | .ok_or(Error::new(ErrorKind::UnknownZWave, "Unknown message type"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| Error::new(ErrorKind::UnknownZWave, "Unknown message type"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/driver/serial.rs:516:60 [INFO] [stderr] | [INFO] [stderr] 516 | let function = SerialMsgFunction::from_u8(data[3]).ok_or(Error::new( [INFO] [stderr] | ____________________________________________________________^ [INFO] [stderr] 517 | | ErrorKind::UnknownZWave, [INFO] [stderr] 518 | | "Unknown ZWave function detected", [INFO] [stderr] 519 | | ))?; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 516 | let function = SerialMsgFunction::from_u8(data[3]).ok_or_else(|| Error::new( [INFO] [stderr] 517 | ErrorKind::UnknownZWave, [INFO] [stderr] 518 | "Unknown ZWave function detected", [INFO] [stderr] 519 | ))?; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/driver/serial.rs:562:25 [INFO] [stderr] | [INFO] [stderr] 562 | pub fn to_hex(data: &Vec) -> String { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/driver/serial.rs:562:19 [INFO] [stderr] | [INFO] [stderr] 562 | pub fn to_hex(data: &Vec) -> String { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `data`. [INFO] [stderr] --> src/driver/serial.rs:565:18 [INFO] [stderr] | [INFO] [stderr] 565 | for i in 0..data.len() { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 565 | for in &data { [INFO] [stderr] | ^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `data`. [INFO] [stderr] --> src/driver/serial.rs:581:18 [INFO] [stderr] | [INFO] [stderr] 581 | for i in 1..data.len() { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 581 | for in data.iter().skip(1) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/cmds/powerlevel.rs:90:55 [INFO] [stderr] | [INFO] [stderr] 90 | let level = PowerLevelStatus::from_u8(msg[5]).ok_or(Error::new(ErrorKind::UnknownZWave, "Answer contained wrong power level state"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| Error::new(ErrorKind::UnknownZWave, "Answer contained wrong power level state"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/cmds/powerlevel.rs:149:64 [INFO] [stderr] | [INFO] [stderr] 149 | let level = PowerLevelOperationStatus::from_u8(msg[6]).ok_or(Error::new(ErrorKind::UnknownZWave, "Answer contained wrong operation status"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| Error::new(ErrorKind::UnknownZWave, "Answer contained wrong operation status"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cmds/powerlevel.rs:168:19 [INFO] [stderr] | [INFO] [stderr] 168 | let msb = msb as u16; [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(msb)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cmds/powerlevel.rs:169:19 [INFO] [stderr] | [INFO] [stderr] 169 | let lsb = lsb as u16; [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(lsb)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/cmds/switch_binary.rs:47:19 [INFO] [stderr] | [INFO] [stderr] 47 | let val = if msg[5] < 0xFF {false} else {true}; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to: `!(msg[5] < 0xFF)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/cmds/info.rs:29:45 [INFO] [stderr] | [INFO] [stderr] 29 | let m = msg.get(i as usize).ok_or(Error::new(ErrorKind::UnknownZWave, "Message is to short"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| Error::new(ErrorKind::UnknownZWave, "Message is to short"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/cmds/info.rs:30:25 [INFO] [stderr] | [INFO] [stderr] 30 | let m = m.clone(); [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*m` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/cmds/info.rs:53:45 [INFO] [stderr] | [INFO] [stderr] 53 | let m = msg.get(i as usize).ok_or(Error::new(ErrorKind::UnknownZWave, "Message is to short"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| Error::new(ErrorKind::UnknownZWave, "Message is to short"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/cmds/info.rs:54:25 [INFO] [stderr] | [INFO] [stderr] 54 | let m = m.clone(); [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*m` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/cmds/info.rs:57:49 [INFO] [stderr] | [INFO] [stderr] 57 | let cmd = CommandClass::from_u8(m.clone()).unwrap_or(CommandClass::NO_OPERATION); [INFO] [stderr] | ^^^^^^^^^ help: try removing the `clone` call: `m` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/cmds/mod.rs:255:9 [INFO] [stderr] | [INFO] [stderr] 255 | / let msg_data: &[u8]; [INFO] [stderr] 256 | | [INFO] [stderr] 257 | | // when there is data extract it [INFO] [stderr] 258 | | if data.len() > 4 { [INFO] [stderr] ... | [INFO] [stderr] 263 | | msg_data = &[0; 0]; [INFO] [stderr] 264 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let msg_data = if data.len() > 4 { &data[4..(data.len())] } else { &[0; 0] };` [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] | [INFO] [stderr] --> src/cmds/meter.rs:129:46 [INFO] [stderr] | [INFO] [stderr] 129 | let typ = MeterType::from_u8(msg[5]).ok_or(Error::new( [INFO] [stderr] | ______________________________________________^ [INFO] [stderr] 130 | | ErrorKind::UnknownZWave, [INFO] [stderr] 131 | | "Answer contained wrong meter type", [INFO] [stderr] 132 | | ))?; [INFO] [stderr] | |__________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] warning: length comparison to one [INFO] [stderr] --> src/cmds/mod.rs:231:12 [INFO] [stderr] | [INFO] [stderr] 231 | if data.len() < 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `data.is_empty()` [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 129 | let typ = MeterType::from_u8(msg[5]).ok_or_else(|| Error::new( [INFO] [stderr] 130 | ErrorKind::UnknownZWave, [INFO] [stderr] 131 | "Answer contained wrong meter type", [INFO] [stderr] 132 | ))?; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `data`. [INFO] [stderr] --> src/cmds/mod.rs:302:18 [INFO] [stderr] | [INFO] [stderr] 302 | for i in 0..data.len() { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 302 | for in &data { [INFO] [stderr] | ^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/cmds/meter.rs:212:9 [INFO] [stderr] | [INFO] [stderr] 212 | / let pre_value; [INFO] [stderr] 213 | | if time == 0x00 || msg.len() < 10 + (2 * size) as usize { [INFO] [stderr] 214 | | pre_value = 0.0; [INFO] [stderr] 215 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 219 | | ); [INFO] [stderr] 220 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] help: it is more idiomatic to write [INFO] [stderr] | [INFO] [stderr] 212 | let pre_value = if time == 0x00 || msg.len() < 10 + (2 * size) as usize { 0.0 } else { Meter::calc_value( [INFO] [stderr] 213 | &msg[10 + size as usize..10 + (2 * size) as usize], [INFO] [stderr] 214 | precision, [INFO] [stderr] 215 | ) }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cmds/meter.rs:209:21 [INFO] [stderr] | [INFO] [stderr] 209 | let time = ((msg[7 + size as usize] as u16) << 8) | msg[8 + size as usize] as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(msg[7 + size as usize])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cmds/meter.rs:209:61 [INFO] [stderr] | [INFO] [stderr] 209 | let time = ((msg[7 + size as usize] as u16) << 8) | msg[8 + size as usize] as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(msg[8 + size as usize])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting i32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/cmds/meter.rs:242:25 [INFO] [stderr] | [INFO] [stderr] 242 | let precision = (10.pow(precision as u32)) as f64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from((10.pow(precision as u32)))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/cmds/meter.rs:242:33 [INFO] [stderr] | [INFO] [stderr] 242 | let precision = (10.pow(precision as u32)) as f64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `u32::from(precision)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting i8 to f64 may become silently lossy if types change [INFO] [stderr] --> src/cmds/meter.rs:246:20 [INFO] [stderr] | [INFO] [stderr] 246 | return (bytes[0] as i8) as f64 / precision; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from((bytes[0] as i8))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting i16 to f64 may become silently lossy if types change [INFO] [stderr] --> src/cmds/meter.rs:251:20 [INFO] [stderr] | [INFO] [stderr] 251 | return (((bytes[0] as i16) << 8) | bytes[1] as i16) as f64 / precision; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(((bytes[0] as i16) << 8) | bytes[1] as i16)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i16 may become silently lossy if types change [INFO] [stderr] --> src/cmds/meter.rs:251:22 [INFO] [stderr] | [INFO] [stderr] 251 | return (((bytes[0] as i16) << 8) | bytes[1] as i16) as f64 / precision; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `i16::from(bytes[0])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i16 may become silently lossy if types change [INFO] [stderr] --> src/cmds/meter.rs:251:48 [INFO] [stderr] | [INFO] [stderr] 251 | return (((bytes[0] as i16) << 8) | bytes[1] as i16) as f64 / precision; [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try: `i16::from(bytes[1])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting i32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/cmds/meter.rs:256:20 [INFO] [stderr] | [INFO] [stderr] 256 | return (((((bytes[0] as i32) << 24) | (bytes[1] as i32) << 16) | (bytes[2] as i32) << 8) [INFO] [stderr] | ____________________^ [INFO] [stderr] 257 | | | (bytes[3] as i32)) as f64 / precision; [INFO] [stderr] | |___________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 256 | return f64::from(((((bytes[0] as i32) << 24) | (bytes[1] as i32) << 16) | (bytes[2] as i32) << 8) [INFO] [stderr] 257 | | (bytes[3] as i32)) / precision; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/cmds/meter.rs:256:24 [INFO] [stderr] | [INFO] [stderr] 256 | return (((((bytes[0] as i32) << 24) | (bytes[1] as i32) << 16) | (bytes[2] as i32) << 8) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `i32::from(bytes[0])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/cmds/meter.rs:256:51 [INFO] [stderr] | [INFO] [stderr] 256 | return (((((bytes[0] as i32) << 24) | (bytes[1] as i32) << 16) | (bytes[2] as i32) << 8) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `i32::from(bytes[1])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/cmds/meter.rs:256:78 [INFO] [stderr] | [INFO] [stderr] 256 | return (((((bytes[0] as i32) << 24) | (bytes[1] as i32) << 16) | (bytes[2] as i32) << 8) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `i32::from(bytes[2])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/cmds/meter.rs:257:19 [INFO] [stderr] | [INFO] [stderr] 257 | | (bytes[3] as i32)) as f64 / precision; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `i32::from(bytes[3])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/cmds/meter.rs:264:22 [INFO] [stderr] | [INFO] [stderr] 264 | fn to_meter_data(data: f64, typ: MeterType, scale: u8) -> Result { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/cmds/meter.rs:297:58 [INFO] [stderr] | [INFO] [stderr] 297 | let typ = MeterType::from_u8(input & 0b00011111).ok_or(Error::new( [INFO] [stderr] | __________________________________________________________^ [INFO] [stderr] 298 | | ErrorKind::UnknownZWave, [INFO] [stderr] 299 | | "Answer contained wrong meter type", [INFO] [stderr] 300 | | ))?; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 297 | let typ = MeterType::from_u8(input & 0b00011111).ok_or_else(|| Error::new( [INFO] [stderr] 298 | ErrorKind::UnknownZWave, [INFO] [stderr] 299 | "Answer contained wrong meter type", [INFO] [stderr] 300 | ))?; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/basic/mod.rs:117:17 [INFO] [stderr] | [INFO] [stderr] 117 | / loop { [INFO] [stderr] 118 | | match m_driver.read() { [INFO] [stderr] 119 | | Ok(msg) => h(msg), [INFO] [stderr] 120 | | Err(_) => break, [INFO] [stderr] 121 | | } [INFO] [stderr] 122 | | } [INFO] [stderr] | |_________________^ help: try: `while let Ok(msg) = m_driver.read() { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/cmds/powerlevel.rs:90:55 [INFO] [stderr] | [INFO] [stderr] 90 | let level = PowerLevelStatus::from_u8(msg[5]).ok_or(Error::new(ErrorKind::UnknownZWave, "Answer contained wrong power level state"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| Error::new(ErrorKind::UnknownZWave, "Answer contained wrong power level state"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/cmds/powerlevel.rs:149:64 [INFO] [stderr] | [INFO] [stderr] 149 | let level = PowerLevelOperationStatus::from_u8(msg[6]).ok_or(Error::new(ErrorKind::UnknownZWave, "Answer contained wrong operation status"))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| Error::new(ErrorKind::UnknownZWave, "Answer contained wrong operation status"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cmds/powerlevel.rs:168:19 [INFO] [stderr] | [INFO] [stderr] 168 | let msb = msb as u16; [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(msb)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/cmds/powerlevel.rs:169:19 [INFO] [stderr] | [INFO] [stderr] 169 | let lsb = lsb as u16; [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(lsb)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/cmds/switch_binary.rs:47:19 [INFO] [stderr] | [INFO] [stderr] 47 | let val = if msg[5] < 0xFF {false} else {true}; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to: `!(msg[5] < 0xFF)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stderr] [INFO] [stderr] error: aborting due to 17 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `rzw`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/cmds/mod.rs:255:9 [INFO] [stderr] | [INFO] [stderr] 255 | / let msg_data: &[u8]; [INFO] [stderr] 256 | | [INFO] [stderr] 257 | | // when there is data extract it [INFO] [stderr] 258 | | if data.len() > 4 { [INFO] [stderr] ... | [INFO] [stderr] 263 | | msg_data = &[0; 0]; [INFO] [stderr] 264 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let msg_data = if data.len() > 4 { &data[4..(data.len())] } else { &[0; 0] };` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: length comparison to one [INFO] [stderr] --> src/cmds/mod.rs:231:12 [INFO] [stderr] | [INFO] [stderr] 231 | if data.len() < 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `data.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `data`. [INFO] [stderr] --> src/cmds/mod.rs:302:18 [INFO] [stderr] | [INFO] [stderr] 302 | for i in 0..data.len() { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 302 | for in &data { [INFO] [stderr] | ^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/basic/mod.rs:117:17 [INFO] [stderr] | [INFO] [stderr] 117 | / loop { [INFO] [stderr] 118 | | match m_driver.read() { [INFO] [stderr] 119 | | Ok(msg) => h(msg), [INFO] [stderr] 120 | | Err(_) => break, [INFO] [stderr] 121 | | } [INFO] [stderr] 122 | | } [INFO] [stderr] | |_________________^ help: try: `while let Ok(msg) = m_driver.read() { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] error: aborting due to 8 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `rzw`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "e85ce95033454d6c4c8a1500762e93742677dc1309849825c590522acb86b509"` [INFO] running `"docker" "rm" "-f" "e85ce95033454d6c4c8a1500762e93742677dc1309849825c590522acb86b509"` [INFO] [stdout] e85ce95033454d6c4c8a1500762e93742677dc1309849825c590522acb86b509