[INFO] fetching crate later 0.0.10... [INFO] linting later-0.0.10 against nightly for clippy-nonminimal_bool-denied [INFO] extracting crate later 0.0.10 into /workspace/builds/worker-4-tc1/source [INFO] started tweaking crates.io crate later 0.0.10 [INFO] finished tweaking crates.io crate later 0.0.10 [INFO] tweaked toml for crates.io crate later 0.0.10 written to /workspace/builds/worker-4-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate later 0.0.10 on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "generate-lockfile" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Locking 350 packages to latest compatible versions [INFO] [stderr] Adding cron v0.11.0 (available: v0.15.0) [INFO] [stderr] Adding generic-array v0.14.7 (available: v0.14.9) [INFO] [stderr] Adding lapin v2.5.5 (available: v4.3.0) [INFO] [stderr] Adding opentelemetry v0.17.0 (available: v0.31.0) [INFO] [stderr] Adding prometheus v0.13.4 (available: v0.14.0) [INFO] [stderr] Adding redis v0.21.7 (available: v1.0.5) [INFO] [stderr] Adding rusty_ulid v1.0.0 (available: v2.0.0) [INFO] [stderr] Adding sqlx v0.6.3 (available: v0.8.6) [INFO] [stderr] Adding test-case v2.2.2 (available: v3.3.1) [INFO] [stderr] Adding tracing-opentelemetry v0.17.4 (available: v0.32.1) [INFO] [stderr] Adding typed-builder v0.10.0 (available: v0.23.2) [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded test-case v2.2.2 [INFO] [stderr] Downloaded test-case-macros v2.2.2 [INFO] [stderr] Downloaded amq-protocol-uri v7.2.3 [INFO] [stderr] Downloaded amq-protocol-tcp v7.2.3 [INFO] [stderr] Downloaded atoi v1.0.0 [INFO] [stderr] Downloaded sqlx-rt v0.6.3 [INFO] [stderr] Downloaded async-mutex v1.4.1 [INFO] [stderr] Downloaded rustls-connector v0.20.2 [INFO] [stderr] Downloaded sqlx-macros v0.6.3 [INFO] [stderr] Downloaded p12-keystore v0.1.5 [INFO] [stderr] Downloaded rusty_ulid v1.0.0 [INFO] [stderr] Downloaded futures-intrusive v0.4.2 [INFO] [stderr] Downloaded pkcs12 v0.1.0 [INFO] [stderr] Downloaded opentelemetry v0.17.0 [INFO] [stderr] Downloaded sqlx v0.6.3 [INFO] [stderr] Downloaded lapin v2.5.5 [INFO] [stderr] Downloaded redis v0.21.7 [INFO] [stderr] Downloaded tracing-opentelemetry v0.17.4 [INFO] [stderr] Downloaded cms v0.2.3 [INFO] [stderr] Downloaded sqlx-core v0.6.3 [INFO] [stderr] Downloaded amq-protocol v7.2.3 [INFO] [stderr] Downloaded tcp-stream v0.28.0 [INFO] [stderr] Downloaded amq-protocol-types v7.2.3 [INFO] [stderr] Downloaded later-derive v0.0.6 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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] d72b2ef933d3fe7c85125b99ed0ecf2be337c5dad6a4b3c1d692c7e79f6f53c8 [INFO] running `Command { std: "docker" "start" "-a" "d72b2ef933d3fe7c85125b99ed0ecf2be337c5dad6a4b3c1d692c7e79f6f53c8", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "d72b2ef933d3fe7c85125b99ed0ecf2be337c5dad6a4b3c1d692c7e79f6f53c8", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "d72b2ef933d3fe7c85125b99ed0ecf2be337c5dad6a4b3c1d692c7e79f6f53c8", kill_on_drop: false }` [INFO] [stdout] d72b2ef933d3fe7c85125b99ed0ecf2be337c5dad6a4b3c1d692c7e79f6f53c8 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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] 4777092e80bedef5c4b18edefdca92d0a728d30730caa57a23b5c75103984a01 [INFO] running `Command { std: "docker" "start" "-a" "4777092e80bedef5c4b18edefdca92d0a728d30730caa57a23b5c75103984a01", kill_on_drop: false }` [INFO] [stderr] Compiling displaydoc v0.2.5 [INFO] [stderr] Compiling ring v0.17.14 [INFO] [stderr] Compiling zerofrom v0.1.6 [INFO] [stderr] Checking log v0.4.29 [INFO] [stderr] Compiling getrandom v0.2.17 [INFO] [stderr] Compiling ring v0.16.20 [INFO] [stderr] Checking serde v1.0.228 [INFO] [stderr] Checking cipher v0.4.4 [INFO] [stderr] Checking base64ct v1.8.3 [INFO] [stderr] Compiling ahash v0.8.12 [INFO] [stderr] Compiling der_derive v0.7.3 [INFO] [stderr] Checking flagset v0.4.7 [INFO] [stderr] Checking const-oid v0.9.6 [INFO] [stderr] Compiling rustls v0.20.9 [INFO] [stderr] Checking event-listener v5.4.1 [INFO] [stderr] Compiling asn1-rs-derive v0.6.0 [INFO] [stderr] Compiling zerocopy v0.8.42 [INFO] [stderr] Compiling asn1-rs-impl v0.2.0 [INFO] [stderr] Compiling rustix v1.1.4 [INFO] [stderr] Checking tokio v1.50.0 [INFO] [stderr] Compiling yoke v0.8.1 [INFO] [stderr] Compiling digest v0.10.7 [INFO] [stderr] Checking event-listener-strategy v0.5.4 [INFO] [stderr] Checking futures-lite v2.6.1 [INFO] [stderr] Compiling zerovec v0.11.5 [INFO] [stderr] Checking tracing-core v0.1.36 [INFO] [stderr] Checking pem-rfc7468 v0.7.0 [INFO] [stderr] Checking linux-raw-sys v0.12.1 [INFO] [stderr] Compiling pin-project-lite v0.2.17 [INFO] [stderr] Checking futures-util v0.3.32 [INFO] [stderr] Checking serde_json v1.0.149 [INFO] [stderr] Compiling potential_utf v0.1.4 [INFO] [stderr] Checking tinystr v0.8.2 [INFO] [stderr] Checking zerotrie v0.2.3 [INFO] [stderr] Checking icu_collections v2.1.1 [INFO] [stderr] Compiling icu_locale_core v2.1.1 [INFO] [stderr] Checking der v0.7.10 [INFO] [stderr] Checking salsa20 v0.10.2 [INFO] [stderr] Checking asn1-rs v0.7.1 [INFO] [stderr] Checking pbkdf2 v0.12.2 [INFO] [stderr] Compiling socket2 v0.6.3 [INFO] [stderr] Compiling mio v1.1.1 [INFO] [stderr] Compiling ahash v0.7.8 [INFO] [stderr] Compiling spin v0.5.2 [INFO] [stderr] Compiling untrusted v0.7.1 [INFO] [stderr] Compiling rustls v0.23.37 [INFO] [stderr] Checking piper v0.2.5 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Checking scrypt v0.11.0 [INFO] [stderr] Checking icu_provider v2.1.1 [INFO] [stderr] Checking async-channel v2.5.0 [INFO] [stderr] Checking cbc v0.1.2 [INFO] [stderr] Checking aes v0.8.4 [INFO] [stderr] Checking rustls-pemfile v2.2.0 [INFO] [stderr] Compiling serde_core v1.0.228 [INFO] [stderr] Compiling instant v0.1.13 [INFO] [stderr] Checking spki v0.7.3 [INFO] [stderr] Checking icu_normalizer v2.1.1 [INFO] [stderr] Checking icu_properties v2.1.2 [INFO] [stderr] Compiling tinyvec_macros v0.1.1 [INFO] [stderr] Compiling io-lifetimes v1.0.11 [INFO] [stderr] Checking x509-cert v0.2.5 [INFO] [stderr] Compiling crossbeam-utils v0.8.21 [INFO] [stderr] Checking rustls-native-certs v0.7.3 [INFO] [stderr] Checking oid-registry v0.8.1 [INFO] [stderr] Checking der-parser v10.0.0 [INFO] [stderr] Checking pkcs5 v0.7.1 [INFO] [stderr] Compiling tinyvec v1.11.0 [INFO] [stderr] Checking blocking v1.6.2 [INFO] [stderr] Compiling parking_lot_core v0.8.6 [INFO] [stderr] Checking cms v0.2.3 [INFO] [stderr] Checking tracing v0.1.44 [INFO] [stderr] Checking x509-parser v0.17.0 [INFO] [stderr] Checking async-executor v1.14.0 [INFO] [stderr] Checking idna_adapter v1.2.1 [INFO] [stderr] Checking async-lock v3.4.2 [INFO] [stderr] Checking pkcs12 v0.1.0 [INFO] [stderr] Checking rc2 v0.8.1 [INFO] [stderr] Checking idna v1.1.0 [INFO] [stderr] Checking des v0.8.1 [INFO] [stderr] Compiling rand_core v0.6.4 [INFO] [stderr] Checking url v2.5.8 [INFO] [stderr] Compiling rustix v0.37.28 [INFO] [stderr] Checking cookie-factory v0.3.3 [INFO] [stderr] Compiling nom v7.1.3 [INFO] [stderr] Compiling form_urlencoded v1.2.2 [INFO] [stderr] Checking chrono v0.4.44 [INFO] [stderr] Checking amq-protocol-types v7.2.3 [INFO] [stderr] Compiling unicode-normalization v0.1.25 [INFO] [stderr] Compiling ppv-lite86 v0.2.21 [INFO] [stderr] Compiling parking_lot v0.11.2 [INFO] [stderr] Checking webpki v0.22.4 [INFO] [stderr] Checking rustls-webpki v0.103.9 [INFO] [stderr] Checking sct v0.7.1 [INFO] [stderr] Compiling hashbrown v0.14.5 [INFO] [stderr] Checking p12-keystore v0.1.5 [INFO] [stderr] Compiling rand_chacha v0.3.1 [INFO] [stderr] Compiling hmac v0.12.1 [INFO] [stderr] Compiling dirs-sys v0.3.7 [INFO] [stderr] Compiling async-io v1.13.0 [INFO] [stderr] Compiling slab v0.4.12 [INFO] [stderr] Compiling unicode-bidi v0.3.18 [INFO] [stderr] Compiling base64 v0.21.7 [INFO] [stderr] Compiling unicode-properties v0.1.4 [INFO] [stderr] Compiling futures-task v0.3.32 [INFO] [stderr] Compiling unicode_categories v0.1.1 [INFO] [stderr] Checking linux-raw-sys v0.3.8 [INFO] [stderr] Checking futures-lite v1.13.0 [INFO] [stderr] Compiling sqlformat v0.2.6 [INFO] [stderr] Compiling dirs v4.0.0 [INFO] [stderr] Compiling rustls-pemfile v1.0.4 [INFO] [stderr] Compiling indexmap v1.9.3 [INFO] [stderr] Compiling webpki-roots v0.22.6 [INFO] [stderr] Compiling hkdf v0.12.4 [INFO] [stderr] Compiling crossbeam-queue v0.3.12 [INFO] [stderr] Compiling stringprep v0.1.5 [INFO] [stderr] Compiling rand v0.8.5 [INFO] [stderr] Compiling either v1.15.0 [INFO] [stderr] Compiling hashlink v0.8.4 [INFO] [stderr] Compiling futures-intrusive v0.4.2 [INFO] [stderr] Checking amq-protocol-uri v7.2.3 [INFO] [stderr] Checking polling v2.8.0 [INFO] [stderr] Compiling sha1 v0.10.6 [INFO] [stderr] Compiling sha2 v0.10.9 [INFO] [stderr] Checking tokio-rustls v0.23.4 [INFO] [stderr] Compiling atoi v1.0.0 [INFO] [stderr] Checking futures-executor v0.3.32 [INFO] [stderr] Compiling md-5 v0.10.6 [INFO] [stderr] Checking async-lock v2.8.0 [INFO] [stderr] Compiling thiserror v1.0.69 [INFO] [stderr] Checking socket2 v0.4.10 [INFO] [stderr] Compiling tokio-stream v0.1.18 [INFO] [stderr] Compiling pin-project-internal v1.1.11 [INFO] [stderr] Compiling whoami v1.6.1 [INFO] [stderr] Compiling event-listener v2.5.3 [INFO] [stderr] Checking polling v3.11.0 [INFO] [stderr] Compiling protobuf v2.28.0 [INFO] [stderr] Compiling byteorder v1.5.0 [INFO] [stderr] Compiling uuid v1.22.0 [INFO] [stderr] Compiling amq-protocol v7.2.3 [INFO] [stderr] Compiling bitflags v1.3.2 [INFO] [stderr] Checking async-io v2.6.0 [INFO] [stderr] Compiling base64 v0.13.1 [INFO] [stderr] Compiling heck v0.4.1 [INFO] [stderr] Checking sqlx-rt v0.6.3 [INFO] [stderr] Checking tokio-util v0.7.18 [INFO] [stderr] Checking reactor-trait v1.1.0 [INFO] [stderr] Checking executor-trait v2.1.2 [INFO] [stderr] Checking crossbeam-channel v0.5.15 [INFO] [stderr] Checking dotenvy v0.15.7 [INFO] [stderr] Compiling prometheus v0.13.4 [INFO] [stderr] Compiling lapin v2.5.5 [INFO] [stderr] Checking async-global-executor v3.1.0 [INFO] [stderr] Checking async-global-executor v2.4.1 [INFO] [stderr] Checking sha1 v0.6.1 [INFO] [stderr] Checking combine v4.6.7 [INFO] [stderr] Checking tracing-subscriber v0.3.23 [INFO] [stderr] Checking pinky-swear v6.2.1 [INFO] [stderr] Checking tracing-log v0.1.4 [INFO] [stderr] Checking async-global-executor-trait v2.2.0 [INFO] [stderr] Checking async-channel v1.9.0 [INFO] [stderr] Checking kv-log-macro v1.0.7 [INFO] [stderr] Checking rmp v0.8.15 [INFO] [stderr] Compiling later-derive v0.0.6 [INFO] [stderr] Compiling test-case-macros v2.2.2 [INFO] [stderr] Checking async-std v1.13.2 [INFO] [stderr] Checking futures v0.3.32 [INFO] [stderr] Checking rusty_ulid v1.0.0 [INFO] [stderr] Checking async-reactor-trait v1.1.0 [INFO] [stderr] Checking cron v0.11.0 [INFO] [stderr] Checking rmp-serde v1.3.1 [INFO] [stderr] Compiling typed-builder v0.10.0 [INFO] [stderr] Checking pin-project v1.1.11 [INFO] [stderr] Checking opentelemetry v0.17.0 [INFO] [stderr] Checking async-mutex v1.4.1 [INFO] [stderr] Checking tracing-opentelemetry v0.17.4 [INFO] [stderr] Checking test-case v2.2.2 [INFO] [stderr] Checking rustls-connector v0.20.2 [INFO] [stderr] Checking tcp-stream v0.28.0 [INFO] [stderr] Checking amq-protocol-tcp v7.2.3 [INFO] [stderr] Compiling sqlx-core v0.6.3 [INFO] [stderr] Checking redis v0.21.7 [INFO] [stderr] Compiling sqlx-macros v0.6.3 [INFO] [stderr] Checking sqlx v0.6.3 [INFO] [stderr] Checking later v0.0.10 (/opt/rustwide/workdir) [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/bg_job_server.rs:57:13 [INFO] [stdout] | [INFO] [stdout] 57 | handler: handler, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace it with: `handler` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/bg_job_server_publisher.rs:259:9 [INFO] [stdout] | [INFO] [stdout] 259 | recurring_job_id: recurring_job_id, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `recurring_job_id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded unit expression [INFO] [stdout] --> src/stats.rs:89:9 [INFO] [stdout] | [INFO] [stdout] 89 | () [INFO] [stdout] | ^^ help: remove the final `()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stdout] = note: `#[warn(clippy::unused_unit)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/bg_job_server.rs:57:13 [INFO] [stdout] | [INFO] [stdout] 57 | handler: handler, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace it with: `handler` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/bg_job_server_publisher.rs:259:9 [INFO] [stdout] | [INFO] [stdout] 259 | recurring_job_id: recurring_job_id, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `recurring_job_id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded unit expression [INFO] [stdout] --> src/stats.rs:89:9 [INFO] [stdout] | [INFO] [stdout] 89 | () [INFO] [stdout] | ^^ help: remove the final `()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stdout] = note: `#[warn(clippy::unused_unit)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `publisher` is never read [INFO] [stdout] --> src/stats.rs:49:5 [INFO] [stdout] | [INFO] [stdout] 48 | pub struct Stats { [INFO] [stdout] | ----- field in this struct [INFO] [stdout] 49 | publisher: Box, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `scan_range_reverse` is never used [INFO] [stdout] --> src/storage/storage_iter.rs:11:14 [INFO] [stdout] | [INFO] [stdout] 5 | pub trait StorageEx { [INFO] [stdout] | --------- method in this trait [INFO] [stdout] ... [INFO] [stdout] 11 | async fn scan_range_reverse(&self, key: &str) -> Box; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `del` and `count` are never used [INFO] [stdout] --> src/storage/storage_iter.rs:25:14 [INFO] [stdout] | [INFO] [stdout] 16 | pub trait StorageIter: Sync + Send { [INFO] [stdout] | ----------- methods in this trait [INFO] [stdout] ... [INFO] [stdout] 25 | async fn del(&mut self, storage: &Box); [INFO] [stdout] | ^^^ [INFO] [stdout] 26 | async fn count(&mut self, storage: &Box) -> usize; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bg_job_server.rs:181:66 [INFO] [stdout] | [INFO] [stdout] 181 | Ok(delivery) => match encoder::decode::(&delivery.data()) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: change this to: `delivery.data()` [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: enclosing `Ok` and `?` operator are unneeded [INFO] [stdout] --> src/bg_job_server_publisher.rs:49:9 [INFO] [stdout] | [INFO] [stdout] 49 | Ok(self.publisher.ensure_consumer().await?) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] = note: `#[warn(clippy::needless_question_mark)]` on by default [INFO] [stdout] help: remove the enclosing `Ok` and `?` operator [INFO] [stdout] | [INFO] [stdout] 49 - Ok(self.publisher.ensure_consumer().await?) [INFO] [stdout] 49 + self.publisher.ensure_consumer().await [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enclosing `Ok` and `?` operator are unneeded [INFO] [stdout] --> src/bg_job_server_publisher.rs:104:9 [INFO] [stdout] | [INFO] [stdout] 104 | Ok(self.enqueue_internal_job(job).await?) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] help: remove the enclosing `Ok` and `?` operator [INFO] [stdout] | [INFO] [stdout] 104 - Ok(self.enqueue_internal_job(job).await?) [INFO] [stdout] 104 + self.enqueue_internal_job(job).await [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bg_job_server_publisher.rs:111:46 [INFO] [stdout] | [INFO] [stdout] 111 | Event::NewJob((&job).into()).publish(&self).await; [INFO] [stdout] | ^^^^^ help: change this to: `self` [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: passing a unit value to a function [INFO] [stdout] --> src/commands.rs:39:5 [INFO] [stdout] | [INFO] [stdout] 39 | / Ok(match command { [INFO] [stdout] 40 | | AmqpCommand::PollDelayedJobs => { [INFO] [stdout] 41 | | tracing::debug!("[Worker#{}] amqp_command: PollDelayedJobs", worker_id); [INFO] [stdout] ... | [INFO] [stdout] 87 | | }) [INFO] [stdout] | |______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stdout] = note: `#[warn(clippy::unit_arg)]` on by default [INFO] [stdout] help: move the expression in front of the call and replace it with the unit literal `()` [INFO] [stdout] | [INFO] [stdout] 39 ~ let _: () = match command { [INFO] [stdout] 40 + AmqpCommand::PollDelayedJobs => { [INFO] [stdout] 41 + tracing::debug!("[Worker#{}] amqp_command: PollDelayedJobs", worker_id); [INFO] [stdout] 42 + [INFO] [stdout] 43 + let _ = handle_poll_delayed_job_command(handler.clone()).await; [INFO] [stdout] 44 + let _ = handler [INFO] [stdout] 45 + .get_publisher() [INFO] [stdout] 46 + .storage [INFO] [stdout] 47 + .config() [INFO] [stdout] 48 + .poll_delayed_jobs_last_run_set() [INFO] [stdout] 49 + .await; [INFO] [stdout] 50 + let _ = inproc_cmd_tx.send(ChannelCommand::PollDelayedJobs).await; [INFO] [stdout] 51 + } [INFO] [stdout] 52 + AmqpCommand::PollRequeuedJobs => { [INFO] [stdout] 53 + tracing::debug!("[Worker#{}] amqp_command: PollRequeuedJobs", worker_id); [INFO] [stdout] 54 + [INFO] [stdout] 55 + let _ = handle_poll_requeued_job_command(handler.clone()).await; [INFO] [stdout] 56 + let _ = handler [INFO] [stdout] 57 + .get_publisher() [INFO] [stdout] 58 + .storage [INFO] [stdout] 59 + .config() [INFO] [stdout] 60 + .poll_requeued_jobs_last_run_set() [INFO] [stdout] 61 + .await; [INFO] [stdout] 62 + let _ = inproc_cmd_tx.send(ChannelCommand::PollRequeuedJobs).await; [INFO] [stdout] 63 + } [INFO] [stdout] 64 + AmqpCommand::ExecuteJob(job) => { [INFO] [stdout] 65 + tracing::debug!("[Worker#{}] amqp_command: Job [Id: {}]", worker_id, job.id); [INFO] [stdout] 66 + [INFO] [stdout] 67 + if let Some(job) = handler.get_publisher().storage.get_job(job.id).await { [INFO] [stdout] 68 + // for recurring job - schedule next job first [INFO] [stdout] 69 + if let Some(rec_job_id) = &job.recurring_job_id { [INFO] [stdout] 70 + if let Some(rec_job) = handler [INFO] [stdout] 71 + .get_publisher() [INFO] [stdout] 72 + .storage [INFO] [stdout] 73 + .get_recurring_job(rec_job_id.clone()) [INFO] [stdout] 74 + .await [INFO] [stdout] 75 + { [INFO] [stdout] 76 + let delayed_job = rec_job.try_into()?; [INFO] [stdout] 77 + handler [INFO] [stdout] 78 + .get_publisher() [INFO] [stdout] 79 + .enqueue_internal_job(delayed_job) [INFO] [stdout] 80 + .await?; [INFO] [stdout] 81 + } [INFO] [stdout] 82 + } [INFO] [stdout] 83 + [INFO] [stdout] 84 + handle_job(job, handler.clone()).await?; [INFO] [stdout] 85 + } [INFO] [stdout] 86 + } [INFO] [stdout] 87 + }; [INFO] [stdout] 88 + Ok(()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_err()` [INFO] [stdout] --> src/commands.rs:109:28 [INFO] [stdout] | [INFO] [stdout] 109 | if let Err(_) = publisher.handle_job_enqueue_initial(job).await { [INFO] [stdout] | -------^^^^^^-------------------------------------------------- help: try: `if publisher.handle_job_enqueue_initial(job).await.is_err()` [INFO] [stdout] | [INFO] [stdout] = note: this will change drop order of the result, as well as all temporaries [INFO] [stdout] = note: add `#[allow(clippy::redundant_pattern_matching)]` if this is important [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_err()` [INFO] [stdout] --> src/commands.rs:151:24 [INFO] [stdout] | [INFO] [stdout] 151 | if let Err(_) = publisher.save(&enqueued).await { [INFO] [stdout] | -------^^^^^^---------------------------------- help: try: `if publisher.save(&enqueued).await.is_err()` [INFO] [stdout] | [INFO] [stdout] = note: this will change drop order of the result, as well as all temporaries [INFO] [stdout] = note: add `#[allow(clippy::redundant_pattern_matching)]` if this is important [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_err()` [INFO] [stdout] --> src/commands.rs:155:24 [INFO] [stdout] | [INFO] [stdout] 155 | if let Err(_) = publisher.handle_job_enqueue_initial(enqueued).await { [INFO] [stdout] | -------^^^^^^------------------------------------------------------- help: try: `if publisher.handle_job_enqueue_initial(enqueued).await.is_err()` [INFO] [stdout] | [INFO] [stdout] = note: this will change drop order of the result, as well as all temporaries [INFO] [stdout] = note: add `#[allow(clippy::redundant_pattern_matching)]` if this is important [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: implementation of inherent method `to_string(&self) -> String` for type `id::Id` [INFO] [stdout] --> src/id.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | / pub fn to_string(&self) -> String { [INFO] [stdout] 6 | | self.0.clone() [INFO] [stdout] 7 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: implement trait `Display` for type `id::Id` instead [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#inherent_to_string [INFO] [stdout] = note: `#[warn(clippy::inherent_to_string)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/models.rs:264:9 [INFO] [stdout] | [INFO] [stdout] 264 | / return Err(anyhow::anyhow!( [INFO] [stdout] 265 | | "Job is not in correct stage to transition to terminal state" [INFO] [stdout] 266 | | )); [INFO] [stdout] | |__________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 264 ~ Err(anyhow::anyhow!( [INFO] [stdout] 265 + "Job is not in correct stage to transition to terminal state" [INFO] [stdout] 266 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> src/models.rs:317:9 [INFO] [stdout] | [INFO] [stdout] 317 | / match self { [INFO] [stdout] 318 | | Stage::Delayed(_) | Stage::Requeued(_) => true, [INFO] [stdout] 319 | | _ => false, [INFO] [stdout] 320 | | } [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] 317 - match self { [INFO] [stdout] 318 - Stage::Delayed(_) | Stage::Requeued(_) => true, [INFO] [stdout] 319 - _ => false, [INFO] [stdout] 320 - } [INFO] [stdout] 317 + matches!(self, Stage::Delayed(_) | Stage::Requeued(_)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> src/models.rs:324:9 [INFO] [stdout] | [INFO] [stdout] 324 | / match self { [INFO] [stdout] 325 | | Stage::Requeued(_) => true, [INFO] [stdout] 326 | | _ => false, [INFO] [stdout] 327 | | } [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] 324 - match self { [INFO] [stdout] 325 - Stage::Requeued(_) => true, [INFO] [stdout] 326 - _ => false, [INFO] [stdout] 327 - } [INFO] [stdout] 324 + matches!(self, Stage::Requeued(_)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> src/models.rs:343:9 [INFO] [stdout] | [INFO] [stdout] 343 | / match self { [INFO] [stdout] 344 | | Stage::Success(_) => true, [INFO] [stdout] 345 | | [INFO] [stdout] 346 | | _ => false, [INFO] [stdout] 347 | | } [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] 343 - match self { [INFO] [stdout] 344 - Stage::Success(_) => true, [INFO] [stdout] 345 - [INFO] [stdout] 346 - _ => false, [INFO] [stdout] 347 - } [INFO] [stdout] 343 + matches!(self, Stage::Success(_)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Option` [INFO] [stdout] --> src/mq/amqp.rs:96:14 [INFO] [stdout] | [INFO] [stdout] 96 | .map(|v| std::str::from_utf8(v).ok()) [INFO] [stdout] | ______________^ [INFO] [stdout] 97 | | .flatten() [INFO] [stdout] | |______________________^ help: try replacing `map` with `and_then` and remove the `.flatten()`: `and_then(|v| std::str::from_utf8(v).ok())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] = note: `#[warn(clippy::map_flatten)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Option` [INFO] [stdout] --> src/mq/amqp.rs:93:14 [INFO] [stdout] | [INFO] [stdout] 93 | .map(|v| v.as_long_string()) [INFO] [stdout] | ______________^ [INFO] [stdout] 94 | | .flatten() [INFO] [stdout] | |______________________^ help: try replacing `map` with `and_then` and remove the `.flatten()`: `and_then(|v| v.as_long_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: iterating on a map's keys [INFO] [stdout] --> src/mq/amqp.rs:101:9 [INFO] [stdout] | [INFO] [stdout] 101 | self.0.inner().iter().map(|(k, _v)| k.as_str()).collect() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.0.inner().keys().map(|k| k.as_str())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_kv_map [INFO] [stdout] = note: `#[warn(clippy::iter_kv_map)]` 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/mq/amqp.rs:132:17 [INFO] [stdout] | [INFO] [stdout] 132 | &message_bytes, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: change this to: `message_bytes` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/persist.rs:16:12 [INFO] [stdout] | [INFO] [stdout] 16 | inner: &'s Box, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `&'s dyn Storage` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] = note: `#[warn(clippy::borrowed_box)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enclosing `Ok` and `?` operator are unneeded [INFO] [stdout] --> src/persist.rs:50:9 [INFO] [stdout] | [INFO] [stdout] 50 | Ok(self.inner.del(&id.to_string()).await?) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] help: remove the enclosing `Ok` and `?` operator [INFO] [stdout] | [INFO] [stdout] 50 - Ok(self.inner.del(&id.to_string()).await?) [INFO] [stdout] 50 + self.inner.del(&id.to_string()).await [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enclosing `Ok` and `?` operator are unneeded [INFO] [stdout] --> src/persist.rs:55:9 [INFO] [stdout] | [INFO] [stdout] 55 | Ok(self.inner.trim(range).await?) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] help: remove the enclosing `Ok` and `?` operator [INFO] [stdout] | [INFO] [stdout] 55 - Ok(self.inner.trim(range).await?) [INFO] [stdout] 55 + self.inner.trim(range).await [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/persist.rs:121:12 [INFO] [stdout] | [INFO] [stdout] 121 | if items.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!items.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 expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/persist.rs:134:65 [INFO] [stdout] | [INFO] [stdout] 134 | let key = IdOf::JobsInStagesId(stage.get_name()).get_id(&&self.key_prefix); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: change this to: `(&self.key_prefix)` [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: the borrowed expression implements the required traits [INFO] [stdout] --> src/persist.rs:137:54 [INFO] [stdout] | [INFO] [stdout] 137 | .push(&key.to_string(), &encoder::encode(&id)?) [INFO] [stdout] | ^^^ help: change this to: `id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/persist.rs:152:65 [INFO] [stdout] | [INFO] [stdout] 152 | let key = IdOf::JobsInStagesId(name.to_string()).get_id(&&self.key_prefix); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: change this to: `(&self.key_prefix)` [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: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/persist.rs:200:9 [INFO] [stdout] | [INFO] [stdout] 200 | / self.inner [INFO] [stdout] 201 | | .get(&key.to_string()) [INFO] [stdout] 202 | | .await [INFO] [stdout] 203 | | .map(|b| encoder::decode::(&b).ok()) [INFO] [stdout] 204 | | .flatten() [INFO] [stdout] 205 | | .unwrap_or_else(|| def) [INFO] [stdout] | |___________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] = note: `#[warn(clippy::unnecessary_lazy_evaluations)]` on by default [INFO] [stdout] help: use `unwrap_or` instead [INFO] [stdout] | [INFO] [stdout] 205 - .unwrap_or_else(|| def) [INFO] [stdout] 205 + .unwrap_or(def) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Option` [INFO] [stdout] --> src/persist.rs:203:14 [INFO] [stdout] | [INFO] [stdout] 203 | .map(|b| encoder::decode::(&b).ok()) [INFO] [stdout] | ______________^ [INFO] [stdout] 204 | | .flatten() [INFO] [stdout] | |______________________^ help: try replacing `map` with `and_then` and remove the `.flatten()`: `and_then(|b| encoder::decode::(&b).ok())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/stats.rs:56:20 [INFO] [stdout] | [INFO] [stdout] 56 | mq_client: &Box, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `&dyn MqClient` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/stats.rs:74:15 [INFO] [stdout] | [INFO] [stdout] 74 | while let Some(_) = consumer.next().await {} [INFO] [stdout] | ----------^^^^^^^------------------------ help: try: `while consumer.next().await.is_some()` [INFO] [stdout] | [INFO] [stdout] = note: this will change drop order of the result, as well as all temporaries [INFO] [stdout] = note: add `#[allow(clippy::redundant_pattern_matching)]` if this is important [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `MemoryStorage` [INFO] [stdout] --> src/storage/memory.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | / pub fn new() -> Self { [INFO] [stdout] 8 | | Self { [INFO] [stdout] 9 | | _storage: Default::default(), [INFO] [stdout] 10 | | } [INFO] [stdout] 11 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 6 + impl Default for MemoryStorage { [INFO] [stdout] 7 + fn default() -> Self { [INFO] [stdout] 8 + Self::new() [INFO] [stdout] 9 + } [INFO] [stdout] 10 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/storage/redis.rs:29:20 [INFO] [stdout] | [INFO] [stdout] 29 | if data.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `data.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/storage/storage_iter.rs:24:39 [INFO] [stdout] | [INFO] [stdout] 24 | async fn next(&mut self, storage: &Box) -> Option>; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `&'life1 dyn Storage` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/storage/storage_iter.rs:25:38 [INFO] [stdout] | [INFO] [stdout] 25 | async fn del(&mut self, storage: &Box); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `&'life1 dyn Storage` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/storage/storage_iter.rs:26:40 [INFO] [stdout] | [INFO] [stdout] 26 | async fn count(&mut self, storage: &Box) -> usize; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `&'life1 dyn Storage` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/storage/storage_iter.rs:50:21 [INFO] [stdout] | [INFO] [stdout] 50 | let count = self [INFO] [stdout] | _____________________^ [INFO] [stdout] 51 | | .get_of_type::(&count_key) [INFO] [stdout] 52 | | .await [INFO] [stdout] 53 | | .unwrap_or_else(|| 0); [INFO] [stdout] | |_________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] help: use `unwrap_or` instead [INFO] [stdout] | [INFO] [stdout] 53 - .unwrap_or_else(|| 0); [INFO] [stdout] 53 + .unwrap_or(0); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/storage/storage_iter.rs:102:30 [INFO] [stdout] | [INFO] [stdout] 102 | let start_from_idx = self [INFO] [stdout] | ______________________________^ [INFO] [stdout] 103 | | .get_of_type::(&start_key) [INFO] [stdout] 104 | | .await [INFO] [stdout] 105 | | .unwrap_or_else(|| 0); [INFO] [stdout] | |_________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] help: use `unwrap_or` instead [INFO] [stdout] | [INFO] [stdout] 105 - .unwrap_or_else(|| 0); [INFO] [stdout] 105 + .unwrap_or(0); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/storage/storage_iter.rs:106:29 [INFO] [stdout] | [INFO] [stdout] 106 | let item_in_range = self [INFO] [stdout] | _____________________________^ [INFO] [stdout] 107 | | .get_of_type::(&count_key) [INFO] [stdout] 108 | | .await [INFO] [stdout] 109 | | .unwrap_or_else(|| 0); [INFO] [stdout] | |_________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] help: use `unwrap_or` instead [INFO] [stdout] | [INFO] [stdout] 109 - .unwrap_or_else(|| 0); [INFO] [stdout] 109 + .unwrap_or(0); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/storage/storage_iter.rs:133:26 [INFO] [stdout] | [INFO] [stdout] 133 | let start_from_idx = storage [INFO] [stdout] | __________________________^ [INFO] [stdout] 134 | | .get_of_type::(&start_key) [INFO] [stdout] 135 | | .await [INFO] [stdout] 136 | | .unwrap_or_else(|| 0); [INFO] [stdout] | |_____________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] help: use `unwrap_or` instead [INFO] [stdout] | [INFO] [stdout] 136 - .unwrap_or_else(|| 0); [INFO] [stdout] 136 + .unwrap_or(0); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/storage/storage_iter.rs:137:25 [INFO] [stdout] | [INFO] [stdout] 137 | let item_in_range = storage [INFO] [stdout] | _________________________^ [INFO] [stdout] 138 | | .get_of_type::(&count_key) [INFO] [stdout] 139 | | .await [INFO] [stdout] 140 | | .unwrap_or_else(|| 0); [INFO] [stdout] | |_____________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] help: use `unwrap_or` instead [INFO] [stdout] | [INFO] [stdout] 140 - .unwrap_or_else(|| 0); [INFO] [stdout] 140 + .unwrap_or(0); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/persist.rs:28:19 [INFO] [stdout] | [INFO] [stdout] 28 | pub fn config(&self) -> Config { [INFO] [stdout] | ^^^^^ ^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 28 | pub fn config(&self) -> Config<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `publisher` is never read [INFO] [stdout] --> src/stats.rs:49:5 [INFO] [stdout] | [INFO] [stdout] 48 | pub struct Stats { [INFO] [stdout] | ----- field in this struct [INFO] [stdout] 49 | publisher: Box, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> tests/common.rs:48:32 [INFO] [stdout] | [INFO] [stdout] 48 | let job_ctx = AppContext { invc: invc }; [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `invc` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> tests/common.rs:48:32 [INFO] [stdout] | [INFO] [stdout] 48 | let job_ctx = AppContext { invc: invc }; [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `invc` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bg_job_server.rs:181:66 [INFO] [stdout] | [INFO] [stdout] 181 | Ok(delivery) => match encoder::decode::(&delivery.data()) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: change this to: `delivery.data()` [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: enclosing `Ok` and `?` operator are unneeded [INFO] [stdout] --> src/bg_job_server_publisher.rs:49:9 [INFO] [stdout] | [INFO] [stdout] 49 | Ok(self.publisher.ensure_consumer().await?) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] = note: `#[warn(clippy::needless_question_mark)]` on by default [INFO] [stdout] help: remove the enclosing `Ok` and `?` operator [INFO] [stdout] | [INFO] [stdout] 49 - Ok(self.publisher.ensure_consumer().await?) [INFO] [stdout] 49 + self.publisher.ensure_consumer().await [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enclosing `Ok` and `?` operator are unneeded [INFO] [stdout] --> src/bg_job_server_publisher.rs:104:9 [INFO] [stdout] | [INFO] [stdout] 104 | Ok(self.enqueue_internal_job(job).await?) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] help: remove the enclosing `Ok` and `?` operator [INFO] [stdout] | [INFO] [stdout] 104 - Ok(self.enqueue_internal_job(job).await?) [INFO] [stdout] 104 + self.enqueue_internal_job(job).await [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bg_job_server_publisher.rs:111:46 [INFO] [stdout] | [INFO] [stdout] 111 | Event::NewJob((&job).into()).publish(&self).await; [INFO] [stdout] | ^^^^^ help: change this to: `self` [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: passing a unit value to a function [INFO] [stdout] --> src/commands.rs:39:5 [INFO] [stdout] | [INFO] [stdout] 39 | / Ok(match command { [INFO] [stdout] 40 | | AmqpCommand::PollDelayedJobs => { [INFO] [stdout] 41 | | tracing::debug!("[Worker#{}] amqp_command: PollDelayedJobs", worker_id); [INFO] [stdout] ... | [INFO] [stdout] 87 | | }) [INFO] [stdout] | |______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stdout] = note: `#[warn(clippy::unit_arg)]` on by default [INFO] [stdout] help: move the expression in front of the call and replace it with the unit literal `()` [INFO] [stdout] | [INFO] [stdout] 39 ~ let _: () = match command { [INFO] [stdout] 40 + AmqpCommand::PollDelayedJobs => { [INFO] [stdout] 41 + tracing::debug!("[Worker#{}] amqp_command: PollDelayedJobs", worker_id); [INFO] [stdout] 42 + [INFO] [stdout] 43 + let _ = handle_poll_delayed_job_command(handler.clone()).await; [INFO] [stdout] 44 + let _ = handler [INFO] [stdout] 45 + .get_publisher() [INFO] [stdout] 46 + .storage [INFO] [stdout] 47 + .config() [INFO] [stdout] 48 + .poll_delayed_jobs_last_run_set() [INFO] [stdout] 49 + .await; [INFO] [stdout] 50 + let _ = inproc_cmd_tx.send(ChannelCommand::PollDelayedJobs).await; [INFO] [stdout] 51 + } [INFO] [stdout] 52 + AmqpCommand::PollRequeuedJobs => { [INFO] [stdout] 53 + tracing::debug!("[Worker#{}] amqp_command: PollRequeuedJobs", worker_id); [INFO] [stdout] 54 + [INFO] [stdout] 55 + let _ = handle_poll_requeued_job_command(handler.clone()).await; [INFO] [stdout] 56 + let _ = handler [INFO] [stdout] 57 + .get_publisher() [INFO] [stdout] 58 + .storage [INFO] [stdout] 59 + .config() [INFO] [stdout] 60 + .poll_requeued_jobs_last_run_set() [INFO] [stdout] 61 + .await; [INFO] [stdout] 62 + let _ = inproc_cmd_tx.send(ChannelCommand::PollRequeuedJobs).await; [INFO] [stdout] 63 + } [INFO] [stdout] 64 + AmqpCommand::ExecuteJob(job) => { [INFO] [stdout] 65 + tracing::debug!("[Worker#{}] amqp_command: Job [Id: {}]", worker_id, job.id); [INFO] [stdout] 66 + [INFO] [stdout] 67 + if let Some(job) = handler.get_publisher().storage.get_job(job.id).await { [INFO] [stdout] 68 + // for recurring job - schedule next job first [INFO] [stdout] 69 + if let Some(rec_job_id) = &job.recurring_job_id { [INFO] [stdout] 70 + if let Some(rec_job) = handler [INFO] [stdout] 71 + .get_publisher() [INFO] [stdout] 72 + .storage [INFO] [stdout] 73 + .get_recurring_job(rec_job_id.clone()) [INFO] [stdout] 74 + .await [INFO] [stdout] 75 + { [INFO] [stdout] 76 + let delayed_job = rec_job.try_into()?; [INFO] [stdout] 77 + handler [INFO] [stdout] 78 + .get_publisher() [INFO] [stdout] 79 + .enqueue_internal_job(delayed_job) [INFO] [stdout] 80 + .await?; [INFO] [stdout] 81 + } [INFO] [stdout] 82 + } [INFO] [stdout] 83 + [INFO] [stdout] 84 + handle_job(job, handler.clone()).await?; [INFO] [stdout] 85 + } [INFO] [stdout] 86 + } [INFO] [stdout] 87 + }; [INFO] [stdout] 88 + Ok(()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_err()` [INFO] [stdout] --> src/commands.rs:109:28 [INFO] [stdout] | [INFO] [stdout] 109 | if let Err(_) = publisher.handle_job_enqueue_initial(job).await { [INFO] [stdout] | -------^^^^^^-------------------------------------------------- help: try: `if publisher.handle_job_enqueue_initial(job).await.is_err()` [INFO] [stdout] | [INFO] [stdout] = note: this will change drop order of the result, as well as all temporaries [INFO] [stdout] = note: add `#[allow(clippy::redundant_pattern_matching)]` if this is important [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_err()` [INFO] [stdout] --> src/commands.rs:151:24 [INFO] [stdout] | [INFO] [stdout] 151 | if let Err(_) = publisher.save(&enqueued).await { [INFO] [stdout] | -------^^^^^^---------------------------------- help: try: `if publisher.save(&enqueued).await.is_err()` [INFO] [stdout] | [INFO] [stdout] = note: this will change drop order of the result, as well as all temporaries [INFO] [stdout] = note: add `#[allow(clippy::redundant_pattern_matching)]` if this is important [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_err()` [INFO] [stdout] --> src/commands.rs:155:24 [INFO] [stdout] | [INFO] [stdout] 155 | if let Err(_) = publisher.handle_job_enqueue_initial(enqueued).await { [INFO] [stdout] | -------^^^^^^------------------------------------------------------- help: try: `if publisher.handle_job_enqueue_initial(enqueued).await.is_err()` [INFO] [stdout] | [INFO] [stdout] = note: this will change drop order of the result, as well as all temporaries [INFO] [stdout] = note: add `#[allow(clippy::redundant_pattern_matching)]` if this is important [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: implementation of inherent method `to_string(&self) -> String` for type `id::Id` [INFO] [stdout] --> src/id.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | / pub fn to_string(&self) -> String { [INFO] [stdout] 6 | | self.0.clone() [INFO] [stdout] 7 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: implement trait `Display` for type `id::Id` instead [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#inherent_to_string [INFO] [stdout] = note: `#[warn(clippy::inherent_to_string)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/models.rs:264:9 [INFO] [stdout] | [INFO] [stdout] 264 | / return Err(anyhow::anyhow!( [INFO] [stdout] 265 | | "Job is not in correct stage to transition to terminal state" [INFO] [stdout] 266 | | )); [INFO] [stdout] | |__________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 264 ~ Err(anyhow::anyhow!( [INFO] [stdout] 265 + "Job is not in correct stage to transition to terminal state" [INFO] [stdout] 266 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> src/models.rs:317:9 [INFO] [stdout] | [INFO] [stdout] 317 | / match self { [INFO] [stdout] 318 | | Stage::Delayed(_) | Stage::Requeued(_) => true, [INFO] [stdout] 319 | | _ => false, [INFO] [stdout] 320 | | } [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] 317 - match self { [INFO] [stdout] 318 - Stage::Delayed(_) | Stage::Requeued(_) => true, [INFO] [stdout] 319 - _ => false, [INFO] [stdout] 320 - } [INFO] [stdout] 317 + matches!(self, Stage::Delayed(_) | Stage::Requeued(_)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> src/models.rs:324:9 [INFO] [stdout] | [INFO] [stdout] 324 | / match self { [INFO] [stdout] 325 | | Stage::Requeued(_) => true, [INFO] [stdout] 326 | | _ => false, [INFO] [stdout] 327 | | } [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] 324 - match self { [INFO] [stdout] 325 - Stage::Requeued(_) => true, [INFO] [stdout] 326 - _ => false, [INFO] [stdout] 327 - } [INFO] [stdout] 324 + matches!(self, Stage::Requeued(_)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> src/models.rs:343:9 [INFO] [stdout] | [INFO] [stdout] 343 | / match self { [INFO] [stdout] 344 | | Stage::Success(_) => true, [INFO] [stdout] 345 | | [INFO] [stdout] 346 | | _ => false, [INFO] [stdout] 347 | | } [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] 343 - match self { [INFO] [stdout] 344 - Stage::Success(_) => true, [INFO] [stdout] 345 - [INFO] [stdout] 346 - _ => false, [INFO] [stdout] 347 - } [INFO] [stdout] 343 + matches!(self, Stage::Success(_)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Option` [INFO] [stdout] --> src/mq/amqp.rs:96:14 [INFO] [stdout] | [INFO] [stdout] 96 | .map(|v| std::str::from_utf8(v).ok()) [INFO] [stdout] | ______________^ [INFO] [stdout] 97 | | .flatten() [INFO] [stdout] | |______________________^ help: try replacing `map` with `and_then` and remove the `.flatten()`: `and_then(|v| std::str::from_utf8(v).ok())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] = note: `#[warn(clippy::map_flatten)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Option` [INFO] [stdout] --> src/mq/amqp.rs:93:14 [INFO] [stdout] | [INFO] [stdout] 93 | .map(|v| v.as_long_string()) [INFO] [stdout] | ______________^ [INFO] [stdout] 94 | | .flatten() [INFO] [stdout] | |______________________^ help: try replacing `map` with `and_then` and remove the `.flatten()`: `and_then(|v| v.as_long_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: iterating on a map's keys [INFO] [stdout] --> src/mq/amqp.rs:101:9 [INFO] [stdout] | [INFO] [stdout] 101 | self.0.inner().iter().map(|(k, _v)| k.as_str()).collect() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.0.inner().keys().map(|k| k.as_str())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_kv_map [INFO] [stdout] = note: `#[warn(clippy::iter_kv_map)]` 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/mq/amqp.rs:132:17 [INFO] [stdout] | [INFO] [stdout] 132 | &message_bytes, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: change this to: `message_bytes` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/persist.rs:16:12 [INFO] [stdout] | [INFO] [stdout] 16 | inner: &'s Box, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `&'s dyn Storage` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] = note: `#[warn(clippy::borrowed_box)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enclosing `Ok` and `?` operator are unneeded [INFO] [stdout] --> src/persist.rs:50:9 [INFO] [stdout] | [INFO] [stdout] 50 | Ok(self.inner.del(&id.to_string()).await?) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] help: remove the enclosing `Ok` and `?` operator [INFO] [stdout] | [INFO] [stdout] 50 - Ok(self.inner.del(&id.to_string()).await?) [INFO] [stdout] 50 + self.inner.del(&id.to_string()).await [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enclosing `Ok` and `?` operator are unneeded [INFO] [stdout] --> src/persist.rs:55:9 [INFO] [stdout] | [INFO] [stdout] 55 | Ok(self.inner.trim(range).await?) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] help: remove the enclosing `Ok` and `?` operator [INFO] [stdout] | [INFO] [stdout] 55 - Ok(self.inner.trim(range).await?) [INFO] [stdout] 55 + self.inner.trim(range).await [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/persist.rs:121:12 [INFO] [stdout] | [INFO] [stdout] 121 | if items.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!items.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 expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/persist.rs:134:65 [INFO] [stdout] | [INFO] [stdout] 134 | let key = IdOf::JobsInStagesId(stage.get_name()).get_id(&&self.key_prefix); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: change this to: `(&self.key_prefix)` [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: the borrowed expression implements the required traits [INFO] [stdout] --> src/persist.rs:137:54 [INFO] [stdout] | [INFO] [stdout] 137 | .push(&key.to_string(), &encoder::encode(&id)?) [INFO] [stdout] | ^^^ help: change this to: `id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/persist.rs:152:65 [INFO] [stdout] | [INFO] [stdout] 152 | let key = IdOf::JobsInStagesId(name.to_string()).get_id(&&self.key_prefix); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: change this to: `(&self.key_prefix)` [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: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/persist.rs:200:9 [INFO] [stdout] | [INFO] [stdout] 200 | / self.inner [INFO] [stdout] 201 | | .get(&key.to_string()) [INFO] [stdout] 202 | | .await [INFO] [stdout] 203 | | .map(|b| encoder::decode::(&b).ok()) [INFO] [stdout] 204 | | .flatten() [INFO] [stdout] 205 | | .unwrap_or_else(|| def) [INFO] [stdout] | |___________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] = note: `#[warn(clippy::unnecessary_lazy_evaluations)]` on by default [INFO] [stdout] help: use `unwrap_or` instead [INFO] [stdout] | [INFO] [stdout] 205 - .unwrap_or_else(|| def) [INFO] [stdout] 205 + .unwrap_or(def) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Option` [INFO] [stdout] --> src/persist.rs:203:14 [INFO] [stdout] | [INFO] [stdout] 203 | .map(|b| encoder::decode::(&b).ok()) [INFO] [stdout] | ______________^ [INFO] [stdout] 204 | | .flatten() [INFO] [stdout] | |______________________^ help: try replacing `map` with `and_then` and remove the `.flatten()`: `and_then(|b| encoder::decode::(&b).ok())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `date` is never read [INFO] [stdout] --> tests/common.rs:10:5 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct Invocation { [INFO] [stdout] | ---------- field in this struct [INFO] [stdout] 10 | date: UtcDateTime, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/stats.rs:56:20 [INFO] [stdout] | [INFO] [stdout] 56 | mq_client: &Box, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `&dyn MqClient` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/stats.rs:74:15 [INFO] [stdout] | [INFO] [stdout] 74 | while let Some(_) = consumer.next().await {} [INFO] [stdout] | ----------^^^^^^^------------------------ help: try: `while consumer.next().await.is_some()` [INFO] [stdout] | [INFO] [stdout] = note: this will change drop order of the result, as well as all temporaries [INFO] [stdout] = note: add `#[allow(clippy::redundant_pattern_matching)]` if this is important [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `MemoryStorage` [INFO] [stdout] --> src/storage/memory.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | / pub fn new() -> Self { [INFO] [stdout] 8 | | Self { [INFO] [stdout] 9 | | _storage: Default::default(), [INFO] [stdout] 10 | | } [INFO] [stdout] 11 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 6 + impl Default for MemoryStorage { [INFO] [stdout] 7 + fn default() -> Self { [INFO] [stdout] 8 + Self::new() [INFO] [stdout] 9 + } [INFO] [stdout] 10 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enclosing `Ok` and `?` operator are unneeded [INFO] [stdout] --> tests/common.rs:39:1 [INFO] [stdout] | [INFO] [stdout] 39 | / later::background_job! { [INFO] [stdout] 40 | | struct JobServer { [INFO] [stdout] 41 | | test_command: TestCommand, [INFO] [stdout] 42 | | } [INFO] [stdout] 43 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] = note: `#[warn(clippy::needless_question_mark)]` on by default [INFO] [stdout] = note: this warning originates in the macro `later::background_job` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `&str` [INFO] [stdout] --> tests/common.rs:52:45 [INFO] [stdout] | [INFO] [stdout] 52 | let mq = later::mq::amqp::RabbitMq::new("amqp://guest:guest@localhost:5672".into()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `"amqp://guest:guest@localhost:5672"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> tests/common.rs:59:9 [INFO] [stdout] | [INFO] [stdout] 59 | later::generate_id()[16..].to_string() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use this: `&later::generate_id()[16..]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] = note: `#[warn(clippy::to_string_in_format_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `if let .. else` expression looks like `matches!` macro [INFO] [stdout] --> tests/common.rs:88:17 [INFO] [stdout] | [INFO] [stdout] 88 | / if let Outcome::Retry(_) = inv.command.outcome { [INFO] [stdout] 89 | | true [INFO] [stdout] 90 | | } else { [INFO] [stdout] 91 | | false [INFO] [stdout] 92 | | } [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] 88 - if let Outcome::Retry(_) = inv.command.outcome { [INFO] [stdout] 89 - true [INFO] [stdout] 90 - } else { [INFO] [stdout] 91 - false [INFO] [stdout] 92 - } [INFO] [stdout] 88 + matches!(inv.command.outcome, Outcome::Retry(_)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/storage/redis.rs:29:20 [INFO] [stdout] | [INFO] [stdout] 29 | if data.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `data.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `date` is never read [INFO] [stdout] --> tests/common.rs:10:5 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct Invocation { [INFO] [stdout] | ---------- field in this struct [INFO] [stdout] 10 | date: UtcDateTime, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/storage/storage_iter.rs:24:39 [INFO] [stdout] | [INFO] [stdout] 24 | async fn next(&mut self, storage: &Box) -> Option>; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `&'life1 dyn Storage` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/storage/storage_iter.rs:25:38 [INFO] [stdout] | [INFO] [stdout] 25 | async fn del(&mut self, storage: &Box); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `&'life1 dyn Storage` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/storage/storage_iter.rs:26:40 [INFO] [stdout] | [INFO] [stdout] 26 | async fn count(&mut self, storage: &Box) -> usize; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `&'life1 dyn Storage` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/storage/storage_iter.rs:50:21 [INFO] [stdout] | [INFO] [stdout] 50 | let count = self [INFO] [stdout] | _____________________^ [INFO] [stdout] 51 | | .get_of_type::(&count_key) [INFO] [stdout] 52 | | .await [INFO] [stdout] 53 | | .unwrap_or_else(|| 0); [INFO] [stdout] | |_________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] help: use `unwrap_or` instead [INFO] [stdout] | [INFO] [stdout] 53 - .unwrap_or_else(|| 0); [INFO] [stdout] 53 + .unwrap_or(0); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/storage/storage_iter.rs:102:30 [INFO] [stdout] | [INFO] [stdout] 102 | let start_from_idx = self [INFO] [stdout] | ______________________________^ [INFO] [stdout] 103 | | .get_of_type::(&start_key) [INFO] [stdout] 104 | | .await [INFO] [stdout] 105 | | .unwrap_or_else(|| 0); [INFO] [stdout] | |_________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] help: use `unwrap_or` instead [INFO] [stdout] | [INFO] [stdout] 105 - .unwrap_or_else(|| 0); [INFO] [stdout] 105 + .unwrap_or(0); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/storage/storage_iter.rs:106:29 [INFO] [stdout] | [INFO] [stdout] 106 | let item_in_range = self [INFO] [stdout] | _____________________________^ [INFO] [stdout] 107 | | .get_of_type::(&count_key) [INFO] [stdout] 108 | | .await [INFO] [stdout] 109 | | .unwrap_or_else(|| 0); [INFO] [stdout] | |_________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] help: use `unwrap_or` instead [INFO] [stdout] | [INFO] [stdout] 109 - .unwrap_or_else(|| 0); [INFO] [stdout] 109 + .unwrap_or(0); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/storage/storage_iter.rs:133:26 [INFO] [stdout] | [INFO] [stdout] 133 | let start_from_idx = storage [INFO] [stdout] | __________________________^ [INFO] [stdout] 134 | | .get_of_type::(&start_key) [INFO] [stdout] 135 | | .await [INFO] [stdout] 136 | | .unwrap_or_else(|| 0); [INFO] [stdout] | |_____________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] help: use `unwrap_or` instead [INFO] [stdout] | [INFO] [stdout] 136 - .unwrap_or_else(|| 0); [INFO] [stdout] 136 + .unwrap_or(0); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/storage/storage_iter.rs:137:25 [INFO] [stdout] | [INFO] [stdout] 137 | let item_in_range = storage [INFO] [stdout] | _________________________^ [INFO] [stdout] 138 | | .get_of_type::(&count_key) [INFO] [stdout] 139 | | .await [INFO] [stdout] 140 | | .unwrap_or_else(|| 0); [INFO] [stdout] | |_____________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] help: use `unwrap_or` instead [INFO] [stdout] | [INFO] [stdout] 140 - .unwrap_or_else(|| 0); [INFO] [stdout] 140 + .unwrap_or(0); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enclosing `Ok` and `?` operator are unneeded [INFO] [stdout] --> tests/common.rs:39:1 [INFO] [stdout] | [INFO] [stdout] 39 | / later::background_job! { [INFO] [stdout] 40 | | struct JobServer { [INFO] [stdout] 41 | | test_command: TestCommand, [INFO] [stdout] 42 | | } [INFO] [stdout] 43 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] = note: `#[warn(clippy::needless_question_mark)]` on by default [INFO] [stdout] = note: this warning originates in the macro `later::background_job` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `&str` [INFO] [stdout] --> tests/common.rs:52:45 [INFO] [stdout] | [INFO] [stdout] 52 | let mq = later::mq::amqp::RabbitMq::new("amqp://guest:guest@localhost:5672".into()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `"amqp://guest:guest@localhost:5672"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> tests/common.rs:59:9 [INFO] [stdout] | [INFO] [stdout] 59 | later::generate_id()[16..].to_string() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use this: `&later::generate_id()[16..]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] = note: `#[warn(clippy::to_string_in_format_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `if let .. else` expression looks like `matches!` macro [INFO] [stdout] --> tests/common.rs:88:17 [INFO] [stdout] | [INFO] [stdout] 88 | / if let Outcome::Retry(_) = inv.command.outcome { [INFO] [stdout] 89 | | true [INFO] [stdout] 90 | | } else { [INFO] [stdout] 91 | | false [INFO] [stdout] 92 | | } [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] 88 - if let Outcome::Retry(_) = inv.command.outcome { [INFO] [stdout] 89 - true [INFO] [stdout] 90 - } else { [INFO] [stdout] 91 - false [INFO] [stdout] 92 - } [INFO] [stdout] 88 + matches!(inv.command.outcome, Outcome::Retry(_)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/storage/tests.rs:300:14 [INFO] [stdout] | [INFO] [stdout] 300 | storage: &Box, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `&dyn Storage` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/persist.rs:28:19 [INFO] [stdout] | [INFO] [stdout] 28 | pub fn config(&self) -> Config { [INFO] [stdout] | ^^^^^ ^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 28 | pub fn config(&self) -> Config<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 27s [INFO] [stderr] warning: the following packages contain code that will be rejected by a future version of Rust: redis v0.21.7, sqlx-core v0.6.3 [INFO] [stderr] note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 2` [INFO] running `Command { std: "docker" "inspect" "4777092e80bedef5c4b18edefdca92d0a728d30730caa57a23b5c75103984a01", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "4777092e80bedef5c4b18edefdca92d0a728d30730caa57a23b5c75103984a01", kill_on_drop: false }` [INFO] [stdout] 4777092e80bedef5c4b18edefdca92d0a728d30730caa57a23b5c75103984a01