[INFO] fetching crate sentinel-agent-mqtt-gateway 0.1.0... [INFO] linting sentinel-agent-mqtt-gateway-0.1.0 against nightly for clippy-nonminimal_bool-denied [INFO] extracting crate sentinel-agent-mqtt-gateway 0.1.0 into /workspace/builds/worker-5-tc1/source [INFO] started tweaking crates.io crate sentinel-agent-mqtt-gateway 0.1.0 [INFO] removed 0 missing tests [INFO] finished tweaking crates.io crate sentinel-agent-mqtt-gateway 0.1.0 [INFO] tweaked toml for crates.io crate sentinel-agent-mqtt-gateway 0.1.0 written to /workspace/builds/worker-5-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate sentinel-agent-mqtt-gateway 0.1.0 on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate crates.io crate sentinel-agent-mqtt-gateway 0.1.0 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 bcrypt v0.15.1 [INFO] [stderr] Downloaded sentinel-common v0.3.1 [INFO] [stderr] Downloaded mqttrs v0.4.1 [INFO] [stderr] Downloaded jsonschema v0.18.3 [INFO] [stderr] Downloaded tonic-build v0.12.3 [INFO] [stderr] Downloaded sysinfo v0.31.4 [INFO] [stderr] Downloaded sentinel-agent-protocol v0.3.1 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 5eb95e647b8100579b14b8f071358c0842965b66689a393a6f6dc8a2ec15409f [INFO] running `Command { std: "docker" "start" "-a" "5eb95e647b8100579b14b8f071358c0842965b66689a393a6f6dc8a2ec15409f", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "5eb95e647b8100579b14b8f071358c0842965b66689a393a6f6dc8a2ec15409f", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "5eb95e647b8100579b14b8f071358c0842965b66689a393a6f6dc8a2ec15409f", kill_on_drop: false }` [INFO] [stdout] 5eb95e647b8100579b14b8f071358c0842965b66689a393a6f6dc8a2ec15409f [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] edee15608aea9cae39c2384326993e5c086a84b4e37f1be33ab5d418c3f0d4e2 [INFO] running `Command { std: "docker" "start" "-a" "edee15608aea9cae39c2384326993e5c086a84b4e37f1be33ab5d418c3f0d4e2", kill_on_drop: false }` [INFO] [stderr] Compiling find-msvc-tools v0.1.7 [INFO] [stderr] Checking getrandom v0.2.16 [INFO] [stderr] Checking tokio v1.49.0 [INFO] [stderr] Checking futures-util v0.3.31 [INFO] [stderr] Checking tracing v0.1.44 [INFO] [stderr] Compiling prost-derive v0.13.5 [INFO] [stderr] Compiling libc v0.2.180 [INFO] [stderr] Compiling rustls v0.23.36 [INFO] [stderr] Compiling bitflags v2.10.0 [INFO] [stderr] Compiling linux-raw-sys v0.11.0 [INFO] [stderr] Compiling regex-syntax v0.8.8 [INFO] [stderr] Compiling prettyplease v0.2.37 [INFO] [stderr] Checking ppv-lite86 v0.2.21 [INFO] [stderr] Compiling thiserror-impl v2.0.17 [INFO] [stderr] Compiling fixedbitset v0.5.7 [INFO] [stderr] Compiling protobuf v3.7.2 [INFO] [stderr] Checking rand_core v0.6.4 [INFO] [stderr] Compiling cc v1.2.52 [INFO] [stderr] Checking idna v1.1.0 [INFO] [stderr] Checking protobuf-support v3.7.2 [INFO] [stderr] Checking webpki-roots v1.0.5 [INFO] [stderr] Compiling petgraph v0.7.1 [INFO] [stderr] Compiling pin-project-internal v1.1.10 [INFO] [stderr] Compiling prometheus v0.14.0 [INFO] [stderr] Compiling heapless v0.7.17 [INFO] [stderr] Checking rand_chacha v0.3.1 [INFO] [stderr] Compiling rustix v1.1.3 [INFO] [stderr] Checking url v2.5.8 [INFO] [stderr] Checking inout v0.1.4 [INFO] [stderr] Checking crypto-common v0.1.7 [INFO] [stderr] Checking rand v0.8.5 [INFO] [stderr] Checking uuid v1.19.0 [INFO] [stderr] Checking matchers v0.2.0 [INFO] [stderr] Checking tracing-serde v0.2.0 [INFO] [stderr] Compiling async-stream-impl v0.3.6 [INFO] [stderr] Compiling portable-atomic v1.13.0 [INFO] [stderr] Checking bit-vec v0.6.3 [INFO] [stderr] Compiling getrandom v0.3.4 [INFO] [stderr] Checking chrono v0.4.42 [INFO] [stderr] Checking bit-set v0.5.3 [INFO] [stderr] Checking clap_builder v4.5.54 [INFO] [stderr] Checking tracing-subscriber v0.3.22 [INFO] [stderr] Checking num v0.4.3 [INFO] [stderr] Checking cipher v0.4.4 [INFO] [stderr] Checking sysinfo v0.31.4 [INFO] [stderr] Compiling regex-automata v0.4.13 [INFO] [stderr] Checking thiserror v2.0.17 [INFO] [stderr] Checking async-stream v0.3.6 [INFO] [stderr] Checking pin-project v1.1.10 [INFO] [stderr] Checking hash32 v0.2.1 [INFO] [stderr] Checking raw-cpuid v11.6.0 [INFO] [stderr] Checking rustls-pemfile v2.2.0 [INFO] [stderr] Checking socket2 v0.5.10 [INFO] [stderr] Compiling ring v0.17.14 [INFO] [stderr] Compiling prost v0.13.5 [INFO] [stderr] Checking nom v8.0.0 [INFO] [stderr] Compiling tempfile v3.24.0 [INFO] [stderr] Checking simple_asn1 v0.6.3 [INFO] [stderr] Compiling prost-types v0.13.5 [INFO] [stderr] Checking blowfish v0.9.1 [INFO] [stderr] Checking fraction v0.15.3 [INFO] [stderr] Checking ahash v0.8.12 [INFO] [stderr] Checking fancy-regex v0.13.0 [INFO] [stderr] Checking dashmap v5.5.3 [INFO] [stderr] Checking pem v3.0.6 [INFO] [stderr] Checking no-std-compat v0.4.1 [INFO] [stderr] Checking nonzero_ext v0.3.0 [INFO] [stderr] Checking mqttrs v0.4.1 [INFO] [stderr] Checking bcrypt v0.15.1 [INFO] [stderr] Checking dashmap v6.1.0 [INFO] [stderr] Checking futures-executor v0.3.31 [INFO] [stderr] Checking axum-core v0.4.5 [INFO] [stderr] Checking futures v0.3.31 [INFO] [stderr] Checking clap v4.5.54 [INFO] [stderr] Compiling regex v1.12.2 [INFO] [stderr] Checking quanta v0.12.6 [INFO] [stderr] Checking governor v0.6.3 [INFO] [stderr] Compiling prost-build v0.13.5 [INFO] [stderr] Compiling tonic-build v0.12.3 [INFO] [stderr] Checking tokio-util v0.7.18 [INFO] [stderr] Checking tower v0.5.2 [INFO] [stderr] Checking tokio-stream v0.1.18 [INFO] [stderr] Checking sentinel-common v0.3.1 [INFO] [stderr] Checking iso8601 v0.6.3 [INFO] [stderr] Checking tower-http v0.6.8 [INFO] [stderr] Checking h2 v0.4.13 [INFO] [stderr] Checking tower v0.4.13 [INFO] [stderr] Checking tokio-test v0.4.5 [INFO] [stderr] Checking axum v0.7.9 [INFO] [stderr] Compiling sentinel-agent-protocol v0.3.1 [INFO] [stderr] Checking hyper v1.8.1 [INFO] [stderr] Checking rustls-webpki v0.103.8 [INFO] [stderr] Checking jsonwebtoken v9.3.1 [INFO] [stderr] Checking hyper-util v0.1.19 [INFO] [stderr] Checking hyper-timeout v0.5.2 [INFO] [stderr] Checking tokio-rustls v0.26.4 [INFO] [stderr] Checking hyper-rustls v0.27.7 [INFO] [stderr] Checking tonic v0.12.3 [INFO] [stderr] Checking reqwest v0.12.28 [INFO] [stderr] Checking jsonschema v0.18.3 [INFO] [stderr] Checking sentinel-agent-mqtt-gateway v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: function `hash_password` is never used [INFO] [stdout] --> src/auth/credentials.rs:157:8 [INFO] [stdout] | [INFO] [stdout] 157 | pub fn hash_password(password: &str) -> Result { [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 `contains` is never used [INFO] [stdout] --> src/auth/jwt.rs:43:12 [INFO] [stdout] | [INFO] [stdout] 42 | impl StringOrVec { [INFO] [stdout] | ---------------- method in this implementation [INFO] [stdout] 43 | pub fn contains(&self, s: &str) -> bool { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/acl/evaluator.rs:39:9 [INFO] [stdout] | [INFO] [stdout] 39 | rules.sort_by(|a, b| b.priority.cmp(&a.priority)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] = note: `#[warn(clippy::unnecessary_sort_by)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 39 - rules.sort_by(|a, b| b.priority.cmp(&a.priority)); [INFO] [stdout] 39 + rules.sort_by_key(|b| std::cmp::Reverse(b.priority)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/acl/evaluator.rs:63:9 [INFO] [stdout] | [INFO] [stdout] 63 | new_rules.sort_by(|a, b| b.priority.cmp(&a.priority)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 63 - new_rules.sort_by(|a, b| b.priority.cmp(&a.priority)); [INFO] [stdout] 63 + new_rules.sort_by_key(|b| std::cmp::Reverse(b.priority)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/acl/evaluator.rs:86:9 [INFO] [stdout] | [INFO] [stdout] 86 | current.sort_by(|a, b| b.priority.cmp(&a.priority)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 86 - current.sort_by(|a, b| b.priority.cmp(&a.priority)); [INFO] [stdout] 86 + current.sort_by_key(|b| std::cmp::Reverse(b.priority)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `Result.or_else(|x| Err(y))`, which is more succinctly expressed as `map_err(|x| y)` [INFO] [stdout] --> src/auth/credentials.rs:144:9 [INFO] [stdout] | [INFO] [stdout] 144 | / serde_json::from_str(&contents) [INFO] [stdout] 145 | | .or_else(|_| { [INFO] [stdout] ... | [INFO] [stdout] 149 | | }) [INFO] [stdout] | |______________^ help: try: `serde_json::from_str(&contents).map_err(|_| anyhow::anyhow!("YAML parsing requires serde_yaml"))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bind_instead_of_map [INFO] [stdout] = note: `#[warn(clippy::bind_instead_of_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> src/auth/mod.rs:207:1 [INFO] [stdout] | [INFO] [stdout] 207 | / impl Default for Authenticator { [INFO] [stdout] 208 | | fn default() -> Self { [INFO] [stdout] 209 | | Self { [INFO] [stdout] 210 | | providers: Vec::new(), [INFO] [stdout] ... | [INFO] [stdout] 214 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] = note: `#[warn(clippy::derivable_impls)]` on by default [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 74 + #[derive(Default)] [INFO] [stdout] 75 | pub struct Authenticator { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `hash_password` is never used [INFO] [stdout] --> src/auth/credentials.rs:157:8 [INFO] [stdout] | [INFO] [stdout] 157 | pub fn hash_password(password: &str) -> Result { [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 `contains` is never used [INFO] [stdout] --> src/auth/jwt.rs:43:12 [INFO] [stdout] | [INFO] [stdout] 42 | impl StringOrVec { [INFO] [stdout] | ---------------- method in this implementation [INFO] [stdout] 43 | pub fn contains(&self, s: &str) -> bool { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/acl/evaluator.rs:39:9 [INFO] [stdout] | [INFO] [stdout] 39 | rules.sort_by(|a, b| b.priority.cmp(&a.priority)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] = note: `#[warn(clippy::unnecessary_sort_by)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 39 - rules.sort_by(|a, b| b.priority.cmp(&a.priority)); [INFO] [stdout] 39 + rules.sort_by_key(|b| std::cmp::Reverse(b.priority)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/acl/evaluator.rs:63:9 [INFO] [stdout] | [INFO] [stdout] 63 | new_rules.sort_by(|a, b| b.priority.cmp(&a.priority)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 63 - new_rules.sort_by(|a, b| b.priority.cmp(&a.priority)); [INFO] [stdout] 63 + new_rules.sort_by_key(|b| std::cmp::Reverse(b.priority)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/acl/evaluator.rs:86:9 [INFO] [stdout] | [INFO] [stdout] 86 | current.sort_by(|a, b| b.priority.cmp(&a.priority)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 86 - current.sort_by(|a, b| b.priority.cmp(&a.priority)); [INFO] [stdout] 86 + current.sort_by_key(|b| std::cmp::Reverse(b.priority)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> src/inspection/patterns.rs:149:1 [INFO] [stdout] | [INFO] [stdout] 149 | / impl Default for PatternInspector { [INFO] [stdout] 150 | | fn default() -> Self { [INFO] [stdout] 151 | | Self { patterns: Vec::new() } [INFO] [stdout] 152 | | } [INFO] [stdout] 153 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 36 + #[derive(Default)] [INFO] [stdout] 37 | pub struct PatternInspector { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> src/inspection/mod.rs:161:1 [INFO] [stdout] | [INFO] [stdout] 161 | / impl Default for PayloadInspector { [INFO] [stdout] 162 | | fn default() -> Self { [INFO] [stdout] 163 | | Self { [INFO] [stdout] 164 | | pattern_inspector: PatternInspector::default(), [INFO] [stdout] ... | [INFO] [stdout] 170 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 45 + #[derive(Default)] [INFO] [stdout] 46 | pub struct PayloadInspector { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/mqtt/topic.rs:99:13 [INFO] [stdout] | [INFO] [stdout] 99 | / if level.contains('#') { [INFO] [stdout] 100 | | if *level != "#" || i != levels.len() - 1 { [INFO] [stdout] 101 | | return false; [INFO] [stdout] 102 | | } [INFO] [stdout] 103 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 99 ~ if level.contains('#') [INFO] [stdout] 100 ~ && (*level != "#" || i != levels.len() - 1) { [INFO] [stdout] 101 | return false; [INFO] [stdout] 102 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/ratelimit/limiter.rs:70:57 [INFO] [stdout] | [INFO] [stdout] 70 | let global_limiter = config.global.as_ref().map(|limit| create_limiter_pair(limit)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `create_limiter_pair` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/ratelimit/limiter.rs:147:53 [INFO] [stdout] | [INFO] [stdout] 147 | let new_global = config.global.as_ref().map(|limit| create_limiter_pair(limit)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `create_limiter_pair` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `Result.or_else(|x| Err(y))`, which is more succinctly expressed as `map_err(|x| y)` [INFO] [stdout] --> src/auth/credentials.rs:144:9 [INFO] [stdout] | [INFO] [stdout] 144 | / serde_json::from_str(&contents) [INFO] [stdout] 145 | | .or_else(|_| { [INFO] [stdout] ... | [INFO] [stdout] 149 | | }) [INFO] [stdout] | |______________^ help: try: `serde_json::from_str(&contents).map_err(|_| anyhow::anyhow!("YAML parsing requires serde_yaml"))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bind_instead_of_map [INFO] [stdout] = note: `#[warn(clippy::bind_instead_of_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> src/auth/mod.rs:207:1 [INFO] [stdout] | [INFO] [stdout] 207 | / impl Default for Authenticator { [INFO] [stdout] 208 | | fn default() -> Self { [INFO] [stdout] 209 | | Self { [INFO] [stdout] 210 | | providers: Vec::new(), [INFO] [stdout] ... | [INFO] [stdout] 214 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] = note: `#[warn(clippy::derivable_impls)]` on by default [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 74 + #[derive(Default)] [INFO] [stdout] 75 | pub struct Authenticator { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> src/inspection/patterns.rs:149:1 [INFO] [stdout] | [INFO] [stdout] 149 | / impl Default for PatternInspector { [INFO] [stdout] 150 | | fn default() -> Self { [INFO] [stdout] 151 | | Self { patterns: Vec::new() } [INFO] [stdout] 152 | | } [INFO] [stdout] 153 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 36 + #[derive(Default)] [INFO] [stdout] 37 | pub struct PatternInspector { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> src/inspection/mod.rs:161:1 [INFO] [stdout] | [INFO] [stdout] 161 | / impl Default for PayloadInspector { [INFO] [stdout] 162 | | fn default() -> Self { [INFO] [stdout] 163 | | Self { [INFO] [stdout] 164 | | pattern_inspector: PatternInspector::default(), [INFO] [stdout] ... | [INFO] [stdout] 170 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 45 + #[derive(Default)] [INFO] [stdout] 46 | pub struct PayloadInspector { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/mqtt/topic.rs:99:13 [INFO] [stdout] | [INFO] [stdout] 99 | / if level.contains('#') { [INFO] [stdout] 100 | | if *level != "#" || i != levels.len() - 1 { [INFO] [stdout] 101 | | return false; [INFO] [stdout] 102 | | } [INFO] [stdout] 103 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 99 ~ if level.contains('#') [INFO] [stdout] 100 ~ && (*level != "#" || i != levels.len() - 1) { [INFO] [stdout] 101 | return false; [INFO] [stdout] 102 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/ratelimit/limiter.rs:70:57 [INFO] [stdout] | [INFO] [stdout] 70 | let global_limiter = config.global.as_ref().map(|limit| create_limiter_pair(limit)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `create_limiter_pair` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/ratelimit/limiter.rs:147:53 [INFO] [stdout] | [INFO] [stdout] 147 | let new_global = config.global.as_ref().map(|limit| create_limiter_pair(limit)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `create_limiter_pair` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 16.92s [INFO] running `Command { std: "docker" "inspect" "edee15608aea9cae39c2384326993e5c086a84b4e37f1be33ab5d418c3f0d4e2", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "edee15608aea9cae39c2384326993e5c086a84b4e37f1be33ab5d418c3f0d4e2", kill_on_drop: false }` [INFO] [stdout] edee15608aea9cae39c2384326993e5c086a84b4e37f1be33ab5d418c3f0d4e2