[INFO] cloning repository https://github.com/ftilde/kassette [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/ftilde/kassette" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fftilde%2Fkassette", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fftilde%2Fkassette'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 7c79410112ae09bf4b924a1c252167fce87c7aa4 [INFO] linting ftilde/kassette against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fftilde%2Fkassette" "/workspace/builds/worker-0-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-0-tc1/source'... [INFO] [stderr] done. [INFO] removed /workspace/builds/worker-0-tc1/source/.cargo/config [INFO] started tweaking git repo https://github.com/ftilde/kassette [INFO] finished tweaking git repo https://github.com/ftilde/kassette [INFO] tweaked toml for git repo https://github.com/ftilde/kassette written to /workspace/builds/worker-0-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/ftilde/kassette on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/ftilde/kassette already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded argh_shared v0.1.1 [INFO] [stderr] Downloaded spidev v0.4.0 [INFO] [stderr] Downloaded argh v0.1.3 [INFO] [stderr] Downloaded miniserde v0.1.13 [INFO] [stderr] Downloaded argh_derive v0.1.1 [INFO] [stderr] Downloaded ogg v0.7.0 [INFO] [stderr] Downloaded mini-internal v0.1.13 [INFO] [stderr] Downloaded alsa-sys v0.3.0 [INFO] [stderr] Downloaded alsa v0.4.2 [INFO] [stderr] Downloaded lewton v0.10.1 [INFO] [stderr] Downloaded rppal v0.11.3 [INFO] [stderr] Downloaded rfid-rs v0.1.1 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 25612f4f69719675b3392ba237e41d1b4d4a5e1979c5c22a5b3df64a11a01bff [INFO] running `Command { std: "docker" "start" "-a" "25612f4f69719675b3392ba237e41d1b4d4a5e1979c5c22a5b3df64a11a01bff", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "25612f4f69719675b3392ba237e41d1b4d4a5e1979c5c22a5b3df64a11a01bff", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "25612f4f69719675b3392ba237e41d1b4d4a5e1979c5c22a5b3df64a11a01bff", kill_on_drop: false }` [INFO] [stdout] 25612f4f69719675b3392ba237e41d1b4d4a5e1979c5c22a5b3df64a11a01bff [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 04c6af2d12a745ab0540031dadfff5a0914d75af861d515b2d0844fdd32c2061 [INFO] running `Command { std: "docker" "start" "-a" "04c6af2d12a745ab0540031dadfff5a0914d75af861d515b2d0844fdd32c2061", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.69 [INFO] [stderr] Compiling syn v1.0.33 [INFO] [stderr] Compiling pkg-config v0.3.17 [INFO] [stderr] Compiling nix v0.14.1 [INFO] [stderr] Compiling nix v0.15.0 [INFO] [stderr] Compiling argh_shared v0.1.1 [INFO] [stderr] Compiling nix v0.17.0 [INFO] [stderr] Compiling kassette v0.1.0 (/opt/rustwide/workdir) [INFO] [stderr] Checking ogg v0.7.0 [INFO] [stderr] Checking lewton v0.10.1 [INFO] [stderr] Compiling alsa-sys v0.3.0 [INFO] [stderr] Checking rppal v0.11.3 [INFO] [stderr] Compiling argh_derive v0.1.1 [INFO] [stderr] Compiling mini-internal v0.1.13 [INFO] [stderr] Checking spidev v0.4.0 [INFO] [stderr] Checking rfid-rs v0.1.1 [INFO] [stderr] Checking miniserde v0.1.13 [INFO] [stderr] Checking argh v0.1.3 [INFO] [stderr] Checking alsa v0.4.2 [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/rfid.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | use rfid_rs; [INFO] [stdout] | ^^^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] = note: `#[warn(clippy::single_component_path_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/rfid.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | use spidev; [INFO] [stdout] | ^^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: digits of hex, binary or octal literal not in groups of equal size [INFO] [stdout] --> src/rfid.rs:158:63 [INFO] [stdout] | [INFO] [stdout] 158 | .write_register(rfid_rs::Register::BitFramingReg, 0b1_000_0_111)?; [INFO] [stdout] | ^^^^^^^^^^^^^ help: consider: `0b1000_0111` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unusual_byte_groupings [INFO] [stdout] = note: `#[warn(clippy::unusual_byte_groupings)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/player.rs:80:12 [INFO] [stdout] | [INFO] [stdout] 80 | Vorbis(lewton::VorbisError), [INFO] [stdout] | ------ ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `AudioSourceError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 80 - Vorbis(lewton::VorbisError), [INFO] [stdout] 80 + Vorbis(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/player.rs:81:8 [INFO] [stdout] | [INFO] [stdout] 81 | Io(std::io::Error), [INFO] [stdout] | -- ^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `AudioSourceError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 81 - Io(std::io::Error), [INFO] [stdout] 81 + Io(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/rfid.rs:41:10 [INFO] [stdout] | [INFO] [stdout] 41 | Rfid(rfid_rs::Error), [INFO] [stdout] | ---- ^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `RfIdError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 41 - Rfid(rfid_rs::Error), [INFO] [stdout] 41 + Rfid(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/rfid.rs:42:8 [INFO] [stdout] | [INFO] [stdout] 42 | Io(std::io::Error), [INFO] [stdout] | -- ^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `RfIdError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 42 - Io(std::io::Error), [INFO] [stdout] 42 + Io(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/rfid.rs:43:10 [INFO] [stdout] | [INFO] [stdout] 43 | Gpio(rppal::gpio::Error), [INFO] [stdout] | ---- ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `RfIdError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 43 - Gpio(rppal::gpio::Error), [INFO] [stdout] 43 + Gpio(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this call to `from_str_radix` can be replaced with a call to `str::parse` [INFO] [stdout] --> src/media_definition.rs:11:14 [INFO] [stdout] | [INFO] [stdout] 11 | _ => u32::from_str_radix(s, 10), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `s.parse::()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#from_str_radix_10 [INFO] [stdout] = note: `#[warn(clippy::from_str_radix_10)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant slicing of the whole range [INFO] [stdout] --> src/media_definition.rs:89:13 [INFO] [stdout] | [INFO] [stdout] 89 | / &r" [INFO] [stdout] 90 | | 0x123 foo/bar [INFO] [stdout] 91 | | 456 /bla/ [INFO] [stdout] ... | [INFO] [stdout] 96 | | 0xcafe cafe.ogg [INFO] [stdout] 97 | | "[..], [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_slicing [INFO] [stdout] = note: `#[warn(clippy::redundant_slicing)]` on by default [INFO] [stdout] help: use the original value instead [INFO] [stdout] | [INFO] [stdout] 89 ~ r" [INFO] [stdout] 90 + 0x123 foo/bar [INFO] [stdout] 91 + 456 /bla/ [INFO] [stdout] 92 + [INFO] [stdout] 93 + #013 commented out [INFO] [stdout] 94 + [INFO] [stdout] 95 + # just some comment [INFO] [stdout] 96 + 0xcafe cafe.ogg [INFO] [stdout] 97 ~ ", [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `.is_multiple_of()` [INFO] [stdout] --> src/player.rs:26:13 [INFO] [stdout] | [INFO] [stdout] 26 | input.len() % self.n_channels == 0, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `input.len().is_multiple_of(self.n_channels)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_is_multiple_of [INFO] [stdout] = note: `#[warn(clippy::manual_is_multiple_of)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> src/player.rs:41:72 [INFO] [stdout] | [INFO] [stdout] 41 | let new_sink_sample_counter = self.source_sample_counter * self.sink_sample_rate as u64 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.sink_sample_rate` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> src/player.rs:42:19 [INFO] [stdout] | [INFO] [stdout] 42 | / self.source_sample_rate as u64; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.source_sample_rate` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `if let .. else` expression looks like `matches!` macro [INFO] [stdout] --> src/player.rs:268:9 [INFO] [stdout] | [INFO] [stdout] 268 | / if let PlayerState::Idle = self.state { [INFO] [stdout] 269 | | true [INFO] [stdout] 270 | | } else { [INFO] [stdout] 271 | | false [INFO] [stdout] 272 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] = note: `#[warn(clippy::match_like_matches_macro)]` on by default [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 268 - if let PlayerState::Idle = self.state { [INFO] [stdout] 269 - true [INFO] [stdout] 270 - } else { [INFO] [stdout] 271 - false [INFO] [stdout] 272 - } [INFO] [stdout] 268 + matches!(self.state, PlayerState::Idle) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> src/player.rs:275:9 [INFO] [stdout] | [INFO] [stdout] 275 | / match self.state { [INFO] [stdout] 276 | | PlayerState::FadeOut(_, _) | PlayerState::FadeIn(_, _) | PlayerState::Playing(_) => { [INFO] [stdout] 277 | | true [INFO] [stdout] ... | [INFO] [stdout] 280 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 275 - match self.state { [INFO] [stdout] 276 - PlayerState::FadeOut(_, _) | PlayerState::FadeIn(_, _) | PlayerState::Playing(_) => { [INFO] [stdout] 277 - true [INFO] [stdout] 278 - } [INFO] [stdout] 279 - _ => false, [INFO] [stdout] 280 - } [INFO] [stdout] 275 + matches!(self.state, PlayerState::FadeOut(_, _) | PlayerState::FadeIn(_, _) | PlayerState::Playing(_)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/player.rs:303:20 [INFO] [stdout] | [INFO] [stdout] 303 | if pck_samples.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!pck_samples.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/rfid.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | use rfid_rs; [INFO] [stdout] | ^^^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] = note: `#[warn(clippy::single_component_path_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/rfid.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | use spidev; [INFO] [stdout] | ^^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: digits of hex, binary or octal literal not in groups of equal size [INFO] [stdout] --> src/rfid.rs:158:63 [INFO] [stdout] | [INFO] [stdout] 158 | .write_register(rfid_rs::Register::BitFramingReg, 0b1_000_0_111)?; [INFO] [stdout] | ^^^^^^^^^^^^^ help: consider: `0b1000_0111` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unusual_byte_groupings [INFO] [stdout] = note: `#[warn(clippy::unusual_byte_groupings)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this operation has no effect [INFO] [stdout] --> src/rfid.rs:17:29 [INFO] [stdout] | [INFO] [stdout] 17 | write!(f, "{:02X}", (self.0 >> 0) & 0xff)?; [INFO] [stdout] | ^^^^^^^^^^^^^ help: consider reducing it to: `self.0` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stdout] = note: `#[warn(clippy::identity_op)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/rfid.rs:26:13 [INFO] [stdout] | [INFO] [stdout] 26 | val = val << 8; [INFO] [stdout] | ^^^^^^^^^^^^^^ help: replace it with: `val <<= 8` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] = note: `#[warn(clippy::assign_op_pattern)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/rfid.rs:77:23 [INFO] [stdout] | [INFO] [stdout] 77 | spi.configure(&options)?; [INFO] [stdout] | ^^^^^^^^ help: change this to: `options` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Uid` which implements the `Copy` trait [INFO] [stdout] --> src/rfid.rs:193:41 [INFO] [stdout] | [INFO] [stdout] 193 | previous = Some(uid.clone()); [INFO] [stdout] | ^^^^^^^^^^^ help: try removing the `clone` call: `uid` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression borrows a value the compiler would automatically borrow [INFO] [stdout] --> src/rotary_encoder.rs:68:13 [INFO] [stdout] | [INFO] [stdout] 68 | (&mut state.event_handler)(event); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `(state.event_handler)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> src/save_state.rs:47:27 [INFO] [stdout] | [INFO] [stdout] 47 | playback_pos: playback_pos.as_millis() as u64, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `playback_pos.as_millis()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant slicing of the whole range [INFO] [stdout] --> src/sound.rs:80:23 [INFO] [stdout] | [INFO] [stdout] 80 | io.writei(&buf[..]) [INFO] [stdout] | ^^^^^^^^ help: use the original value instead: `buf` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_slicing [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/main.rs:157:5 [INFO] [stdout] | [INFO] [stdout] 157 | &Path::new(data_root) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Path::new(data_root)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/main.rs:250:11 [INFO] [stdout] | [INFO] [stdout] 250 | while !(stopped && !player.playing()) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `!stopped || player.playing()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/player.rs:148:23 [INFO] [stdout] | [INFO] [stdout] 148 | #[derive(Copy, Clone, Serialize, Deserialize)] [INFO] [stdout] | ^-------- [INFO] [stdout] | | [INFO] [stdout] | `Serialize` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_MINISERIALIZE_FOR_Volume` [INFO] [stdout] 149 | pub struct Volume { [INFO] [stdout] | ------ `Volume` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Serialize` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Serialize` may come from an old version of the `mini_internal` crate, try updating your dependency with `cargo update -p mini_internal` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: `#[warn(non_local_definitions)]` on by default [INFO] [stdout] = note: this warning originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/player.rs:148:34 [INFO] [stdout] | [INFO] [stdout] 148 | #[derive(Copy, Clone, Serialize, Deserialize)] [INFO] [stdout] | ^---------- [INFO] [stdout] | | [INFO] [stdout] | `Deserialize` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_MINIDESERIALIZE_FOR_Volume` [INFO] [stdout] 149 | pub struct Volume { [INFO] [stdout] | ------ `Volume` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Deserialize` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Deserialize` may come from an old version of the `mini_internal` crate, try updating your dependency with `cargo update -p mini_internal` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/save_state.rs:9:10 [INFO] [stdout] | [INFO] [stdout] 9 | #[derive(Serialize, Deserialize)] [INFO] [stdout] | ^-------- [INFO] [stdout] | | [INFO] [stdout] | `Serialize` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_MINISERIALIZE_FOR_SerPlaybackState` [INFO] [stdout] 10 | struct SerPlaybackState { [INFO] [stdout] | ---------------- `SerPlaybackState` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Serialize` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Serialize` may come from an old version of the `mini_internal` crate, try updating your dependency with `cargo update -p mini_internal` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/save_state.rs:9:21 [INFO] [stdout] | [INFO] [stdout] 9 | #[derive(Serialize, Deserialize)] [INFO] [stdout] | ^---------- [INFO] [stdout] | | [INFO] [stdout] | `Deserialize` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_MINIDESERIALIZE_FOR_SerPlaybackState` [INFO] [stdout] 10 | struct SerPlaybackState { [INFO] [stdout] | ---------------- `SerPlaybackState` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Deserialize` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Deserialize` may come from an old version of the `mini_internal` crate, try updating your dependency with `cargo update -p mini_internal` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/save_state.rs:16:10 [INFO] [stdout] | [INFO] [stdout] 16 | #[derive(Serialize, Deserialize, Default)] [INFO] [stdout] | ^-------- [INFO] [stdout] | | [INFO] [stdout] | `Serialize` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_MINISERIALIZE_FOR_SaveState` [INFO] [stdout] 17 | pub struct SaveState { [INFO] [stdout] | --------- `SaveState` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Serialize` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Serialize` may come from an old version of the `mini_internal` crate, try updating your dependency with `cargo update -p mini_internal` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/save_state.rs:16:21 [INFO] [stdout] | [INFO] [stdout] 16 | #[derive(Serialize, Deserialize, Default)] [INFO] [stdout] | ^---------- [INFO] [stdout] | | [INFO] [stdout] | `Deserialize` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_MINIDESERIALIZE_FOR_SaveState` [INFO] [stdout] 17 | pub struct SaveState { [INFO] [stdout] | --------- `SaveState` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Deserialize` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Deserialize` may come from an old version of the `mini_internal` crate, try updating your dependency with `cargo update -p mini_internal` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/player.rs:80:12 [INFO] [stdout] | [INFO] [stdout] 80 | Vorbis(lewton::VorbisError), [INFO] [stdout] | ------ ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `AudioSourceError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 80 - Vorbis(lewton::VorbisError), [INFO] [stdout] 80 + Vorbis(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/player.rs:81:8 [INFO] [stdout] | [INFO] [stdout] 81 | Io(std::io::Error), [INFO] [stdout] | -- ^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `AudioSourceError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 81 - Io(std::io::Error), [INFO] [stdout] 81 + Io(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/rfid.rs:41:10 [INFO] [stdout] | [INFO] [stdout] 41 | Rfid(rfid_rs::Error), [INFO] [stdout] | ---- ^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `RfIdError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 41 - Rfid(rfid_rs::Error), [INFO] [stdout] 41 + Rfid(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/rfid.rs:42:8 [INFO] [stdout] | [INFO] [stdout] 42 | Io(std::io::Error), [INFO] [stdout] | -- ^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `RfIdError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 42 - Io(std::io::Error), [INFO] [stdout] 42 + Io(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/rfid.rs:43:10 [INFO] [stdout] | [INFO] [stdout] 43 | Gpio(rppal::gpio::Error), [INFO] [stdout] | ---- ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `RfIdError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 43 - Gpio(rppal::gpio::Error), [INFO] [stdout] 43 + Gpio(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this call to `from_str_radix` can be replaced with a call to `str::parse` [INFO] [stdout] --> src/media_definition.rs:11:14 [INFO] [stdout] | [INFO] [stdout] 11 | _ => u32::from_str_radix(s, 10), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `s.parse::()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#from_str_radix_10 [INFO] [stdout] = note: `#[warn(clippy::from_str_radix_10)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `.is_multiple_of()` [INFO] [stdout] --> src/player.rs:26:13 [INFO] [stdout] | [INFO] [stdout] 26 | input.len() % self.n_channels == 0, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `input.len().is_multiple_of(self.n_channels)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_is_multiple_of [INFO] [stdout] = note: `#[warn(clippy::manual_is_multiple_of)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> src/player.rs:41:72 [INFO] [stdout] | [INFO] [stdout] 41 | let new_sink_sample_counter = self.source_sample_counter * self.sink_sample_rate as u64 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.sink_sample_rate` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> src/player.rs:42:19 [INFO] [stdout] | [INFO] [stdout] 42 | / self.source_sample_rate as u64; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.source_sample_rate` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `if let .. else` expression looks like `matches!` macro [INFO] [stdout] --> src/player.rs:268:9 [INFO] [stdout] | [INFO] [stdout] 268 | / if let PlayerState::Idle = self.state { [INFO] [stdout] 269 | | true [INFO] [stdout] 270 | | } else { [INFO] [stdout] 271 | | false [INFO] [stdout] 272 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] = note: `#[warn(clippy::match_like_matches_macro)]` on by default [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 268 - if let PlayerState::Idle = self.state { [INFO] [stdout] 269 - true [INFO] [stdout] 270 - } else { [INFO] [stdout] 271 - false [INFO] [stdout] 272 - } [INFO] [stdout] 268 + matches!(self.state, PlayerState::Idle) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> src/player.rs:275:9 [INFO] [stdout] | [INFO] [stdout] 275 | / match self.state { [INFO] [stdout] 276 | | PlayerState::FadeOut(_, _) | PlayerState::FadeIn(_, _) | PlayerState::Playing(_) => { [INFO] [stdout] 277 | | true [INFO] [stdout] ... | [INFO] [stdout] 280 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 275 - match self.state { [INFO] [stdout] 276 - PlayerState::FadeOut(_, _) | PlayerState::FadeIn(_, _) | PlayerState::Playing(_) => { [INFO] [stdout] 277 - true [INFO] [stdout] 278 - } [INFO] [stdout] 279 - _ => false, [INFO] [stdout] 280 - } [INFO] [stdout] 275 + matches!(self.state, PlayerState::FadeOut(_, _) | PlayerState::FadeIn(_, _) | PlayerState::Playing(_)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/player.rs:303:20 [INFO] [stdout] | [INFO] [stdout] 303 | if pck_samples.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!pck_samples.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this operation has no effect [INFO] [stdout] --> src/rfid.rs:17:29 [INFO] [stdout] | [INFO] [stdout] 17 | write!(f, "{:02X}", (self.0 >> 0) & 0xff)?; [INFO] [stdout] | ^^^^^^^^^^^^^ help: consider reducing it to: `self.0` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stdout] = note: `#[warn(clippy::identity_op)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/rfid.rs:26:13 [INFO] [stdout] | [INFO] [stdout] 26 | val = val << 8; [INFO] [stdout] | ^^^^^^^^^^^^^^ help: replace it with: `val <<= 8` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] = note: `#[warn(clippy::assign_op_pattern)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/rfid.rs:77:23 [INFO] [stdout] | [INFO] [stdout] 77 | spi.configure(&options)?; [INFO] [stdout] | ^^^^^^^^ help: change this to: `options` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Uid` which implements the `Copy` trait [INFO] [stdout] --> src/rfid.rs:193:41 [INFO] [stdout] | [INFO] [stdout] 193 | previous = Some(uid.clone()); [INFO] [stdout] | ^^^^^^^^^^^ help: try removing the `clone` call: `uid` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression borrows a value the compiler would automatically borrow [INFO] [stdout] --> src/rotary_encoder.rs:68:13 [INFO] [stdout] | [INFO] [stdout] 68 | (&mut state.event_handler)(event); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `(state.event_handler)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> src/save_state.rs:47:27 [INFO] [stdout] | [INFO] [stdout] 47 | playback_pos: playback_pos.as_millis() as u64, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `playback_pos.as_millis()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant slicing of the whole range [INFO] [stdout] --> src/sound.rs:80:23 [INFO] [stdout] | [INFO] [stdout] 80 | io.writei(&buf[..]) [INFO] [stdout] | ^^^^^^^^ help: use the original value instead: `buf` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_slicing [INFO] [stdout] = note: `#[warn(clippy::redundant_slicing)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/main.rs:157:5 [INFO] [stdout] | [INFO] [stdout] 157 | &Path::new(data_root) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Path::new(data_root)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/main.rs:250:11 [INFO] [stdout] | [INFO] [stdout] 250 | while !(stopped && !player.playing()) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `!stopped || player.playing()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/player.rs:148:23 [INFO] [stdout] | [INFO] [stdout] 148 | #[derive(Copy, Clone, Serialize, Deserialize)] [INFO] [stdout] | ^-------- [INFO] [stdout] | | [INFO] [stdout] | `Serialize` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_MINISERIALIZE_FOR_Volume` [INFO] [stdout] 149 | pub struct Volume { [INFO] [stdout] | ------ `Volume` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Serialize` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Serialize` may come from an old version of the `mini_internal` crate, try updating your dependency with `cargo update -p mini_internal` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: `#[warn(non_local_definitions)]` on by default [INFO] [stdout] = note: this warning originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/player.rs:148:34 [INFO] [stdout] | [INFO] [stdout] 148 | #[derive(Copy, Clone, Serialize, Deserialize)] [INFO] [stdout] | ^---------- [INFO] [stdout] | | [INFO] [stdout] | `Deserialize` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_MINIDESERIALIZE_FOR_Volume` [INFO] [stdout] 149 | pub struct Volume { [INFO] [stdout] | ------ `Volume` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Deserialize` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Deserialize` may come from an old version of the `mini_internal` crate, try updating your dependency with `cargo update -p mini_internal` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/save_state.rs:9:10 [INFO] [stdout] | [INFO] [stdout] 9 | #[derive(Serialize, Deserialize)] [INFO] [stdout] | ^-------- [INFO] [stdout] | | [INFO] [stdout] | `Serialize` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_MINISERIALIZE_FOR_SerPlaybackState` [INFO] [stdout] 10 | struct SerPlaybackState { [INFO] [stdout] | ---------------- `SerPlaybackState` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Serialize` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Serialize` may come from an old version of the `mini_internal` crate, try updating your dependency with `cargo update -p mini_internal` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/save_state.rs:9:21 [INFO] [stdout] | [INFO] [stdout] 9 | #[derive(Serialize, Deserialize)] [INFO] [stdout] | ^---------- [INFO] [stdout] | | [INFO] [stdout] | `Deserialize` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_MINIDESERIALIZE_FOR_SerPlaybackState` [INFO] [stdout] 10 | struct SerPlaybackState { [INFO] [stdout] | ---------------- `SerPlaybackState` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Deserialize` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Deserialize` may come from an old version of the `mini_internal` crate, try updating your dependency with `cargo update -p mini_internal` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/save_state.rs:16:10 [INFO] [stdout] | [INFO] [stdout] 16 | #[derive(Serialize, Deserialize, Default)] [INFO] [stdout] | ^-------- [INFO] [stdout] | | [INFO] [stdout] | `Serialize` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_MINISERIALIZE_FOR_SaveState` [INFO] [stdout] 17 | pub struct SaveState { [INFO] [stdout] | --------- `SaveState` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Serialize` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Serialize` may come from an old version of the `mini_internal` crate, try updating your dependency with `cargo update -p mini_internal` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-local `impl` definition, `impl` blocks should be written at the same level as their item [INFO] [stdout] --> src/save_state.rs:16:21 [INFO] [stdout] | [INFO] [stdout] 16 | #[derive(Serialize, Deserialize, Default)] [INFO] [stdout] | ^---------- [INFO] [stdout] | | [INFO] [stdout] | `Deserialize` is not local [INFO] [stdout] | move the `impl` block outside of this constant `_IMPL_MINIDESERIALIZE_FOR_SaveState` [INFO] [stdout] 17 | pub struct SaveState { [INFO] [stdout] | --------- `SaveState` is not local [INFO] [stdout] | [INFO] [stdout] = note: the derive macro `Deserialize` defines the non-local `impl`, and may need to be changed [INFO] [stdout] = note: the derive macro `Deserialize` may come from an old version of the `mini_internal` crate, try updating your dependency with `cargo update -p mini_internal` [INFO] [stdout] = note: an `impl` is never scoped, even when it is nested inside an item, as it may impact type checking outside of that item, which can be the case if neither the trait or the self type are at the same nesting level as the `impl` [INFO] [stdout] = note: items in an anonymous const item (`const _: () = { ... }`) are treated as in the same scope as the anonymous const's declaration for the purpose of this lint [INFO] [stdout] = note: this warning originates in the derive macro `Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 9.94s [INFO] running `Command { std: "docker" "inspect" "04c6af2d12a745ab0540031dadfff5a0914d75af861d515b2d0844fdd32c2061", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "04c6af2d12a745ab0540031dadfff5a0914d75af861d515b2d0844fdd32c2061", kill_on_drop: false }` [INFO] [stdout] 04c6af2d12a745ab0540031dadfff5a0914d75af861d515b2d0844fdd32c2061