[INFO] fetching crate arri_client 0.81.3... [INFO] linting arri_client-0.81.3 against nightly for clippy-nonminimal_bool-denied [INFO] extracting crate arri_client 0.81.3 into /workspace/builds/worker-4-tc1/source [INFO] started tweaking crates.io crate arri_client 0.81.3 [INFO] finished tweaking crates.io crate arri_client 0.81.3 [INFO] tweaked toml for crates.io crate arri_client 0.81.3 written to /workspace/builds/worker-4-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate arri_client 0.81.3 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 arri_client 0.81.3 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] Downloading crates ... [INFO] [stderr] Downloaded wasm-bindgen-futures v0.4.55 [INFO] [stderr] Downloaded wasm-bindgen-macro-support v0.2.105 [INFO] [stderr] Downloaded js-sys v0.3.82 [INFO] [stderr] Downloaded wasm-bindgen v0.2.105 [INFO] [stderr] Downloaded wasm-bindgen-macro v0.2.105 [INFO] [stderr] Downloaded wasm-bindgen-shared v0.2.105 [INFO] [stderr] Downloaded icu_properties v2.1.1 [INFO] [stderr] Downloaded rustls-pki-types v1.13.0 [INFO] [stderr] Downloaded rustls-webpki v0.103.8 [INFO] [stderr] Downloaded icu_properties_data v2.1.1 [INFO] [stderr] Downloaded rustls v0.23.35 [INFO] [stderr] Downloaded web-sys v0.3.82 [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] 55d7731fc4c093f9af5ba06542be4c4515b5aa96647a79900884c6aa4a36097c [INFO] running `Command { std: "docker" "start" "-a" "55d7731fc4c093f9af5ba06542be4c4515b5aa96647a79900884c6aa4a36097c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "55d7731fc4c093f9af5ba06542be4c4515b5aa96647a79900884c6aa4a36097c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "55d7731fc4c093f9af5ba06542be4c4515b5aa96647a79900884c6aa4a36097c", kill_on_drop: false }` [INFO] [stdout] 55d7731fc4c093f9af5ba06542be4c4515b5aa96647a79900884c6aa4a36097c [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] e35edcd6d0c251c8b35c93a069ba4364a81c5e6b73238c9c489ae97f689c3216 [INFO] running `Command { std: "docker" "start" "-a" "e35edcd6d0c251c8b35c93a069ba4364a81c5e6b73238c9c489ae97f689c3216", kill_on_drop: false }` [INFO] [stderr] Compiling proc-macro2 v1.0.103 [INFO] [stderr] Compiling quote v1.0.42 [INFO] [stderr] Compiling libc v0.2.177 [INFO] [stderr] Checking bytes v1.11.0 [INFO] [stderr] Checking itoa v1.0.15 [INFO] [stderr] Compiling find-msvc-tools v0.1.5 [INFO] [stderr] Compiling vcpkg v0.2.15 [INFO] [stderr] Compiling icu_properties_data v2.1.1 [INFO] [stderr] Checking tracing-core v0.1.34 [INFO] [stderr] Compiling openssl v0.10.75 [INFO] [stderr] Checking bitflags v2.10.0 [INFO] [stderr] Checking futures-task v0.3.31 [INFO] [stderr] Checking foreign-types-shared v0.1.1 [INFO] [stderr] Checking indexmap v2.12.1 [INFO] [stderr] Compiling native-tls v0.2.14 [INFO] [stderr] Checking slab v0.4.11 [INFO] [stderr] Checking futures-channel v0.3.31 [INFO] [stderr] Checking openssl-probe v0.1.6 [INFO] [stderr] Checking foreign-types v0.3.2 [INFO] [stderr] Checking log v0.4.28 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Checking ryu v1.0.20 [INFO] [stderr] Checking futures-util v0.3.31 [INFO] [stderr] Checking iri-string v0.7.9 [INFO] [stderr] Compiling serde_json v1.0.145 [INFO] [stderr] Checking encoding_rs v0.8.35 [INFO] [stderr] Checking rustls-pki-types v1.13.0 [INFO] [stderr] Compiling cc v1.2.46 [INFO] [stderr] Checking memchr v2.7.6 [INFO] [stderr] Checking iana-time-zone v0.1.64 [INFO] [stderr] Checking mime v0.3.17 [INFO] [stderr] Checking http v1.3.1 [INFO] [stderr] Checking tracing v0.1.41 [INFO] [stderr] Compiling syn v2.0.110 [INFO] [stderr] Checking chrono v0.4.42 [INFO] [stderr] Checking http-body v1.0.1 [INFO] [stderr] Checking http-body-util v0.1.3 [INFO] [stderr] Checking socket2 v0.6.1 [INFO] [stderr] Checking mio v1.1.0 [INFO] [stderr] Compiling openssl-sys v0.9.111 [INFO] [stderr] Checking tokio v1.48.0 [INFO] [stderr] Checking tokio-util v0.7.17 [INFO] [stderr] Checking tower v0.5.2 [INFO] [stderr] Compiling synstructure v0.13.2 [INFO] [stderr] Checking tower-http v0.6.6 [INFO] [stderr] Checking h2 v0.4.12 [INFO] [stderr] Compiling zerofrom-derive v0.1.6 [INFO] [stderr] Compiling yoke-derive v0.8.1 [INFO] [stderr] Compiling zerovec-derive v0.11.2 [INFO] [stderr] Compiling displaydoc v0.2.5 [INFO] [stderr] Compiling openssl-macros v0.1.1 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Checking zerofrom v0.1.6 [INFO] [stderr] Checking yoke v0.8.1 [INFO] [stderr] Checking zerotrie v0.2.3 [INFO] [stderr] Checking zerovec v0.11.5 [INFO] [stderr] Checking tinystr v0.8.2 [INFO] [stderr] Checking potential_utf v0.1.4 [INFO] [stderr] Checking icu_locale_core v2.1.1 [INFO] [stderr] Checking icu_collections v2.1.1 [INFO] [stderr] Checking icu_provider v2.1.1 [INFO] [stderr] Checking hyper v1.8.1 [INFO] [stderr] Checking icu_properties v2.1.1 [INFO] [stderr] Checking icu_normalizer v2.1.1 [INFO] [stderr] Checking serde v1.0.228 [INFO] [stderr] Checking serde_urlencoded v0.7.1 [INFO] [stderr] Checking tokio-native-tls v0.3.1 [INFO] [stderr] Checking hyper-util v0.1.18 [INFO] [stderr] Checking idna_adapter v1.2.1 [INFO] [stderr] Checking idna v1.1.0 [INFO] [stderr] Checking url v2.5.7 [INFO] [stderr] Checking hyper-tls v0.6.0 [INFO] [stderr] Checking reqwest v0.12.24 [INFO] [stderr] Checking arri_client v0.81.3 (/opt/rustwide/workdir) [INFO] [stdout] warning: bound is defined in more than one place [INFO] [stdout] --> src/sse.rs:45:42 [INFO] [stdout] | [INFO] [stdout] 45 | pub async fn parsed_arri_sse_request<'a, T: ArriModel, OnEvent>( [INFO] [stdout] | ^ [INFO] [stdout] ... [INFO] [stdout] 50 | T: ArriModel + std::marker::Send + std::marker::Sync, [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#multiple_bound_locations [INFO] [stdout] = note: `#[warn(clippy::multiple_bound_locations)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `SseController` [INFO] [stdout] --> src/sse.rs:37:5 [INFO] [stdout] | [INFO] [stdout] 37 | / pub fn new() -> Self { [INFO] [stdout] 38 | | Self { is_aborted: false } [INFO] [stdout] 39 | | } [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] 36 + impl Default for SseController { [INFO] [stdout] 37 + fn default() -> Self { [INFO] [stdout] 38 + Self::new() [INFO] [stdout] 39 + } [INFO] [stdout] 40 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/sse.rs:54:22 [INFO] [stdout] | [INFO] [stdout] 54 | http_client: &options.client, [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: change this to: `options.client` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/sse.rs:103:21 [INFO] [stdout] | [INFO] [stdout] 103 | / if &self.retry_count > max_retry_count { [INFO] [stdout] 104 | | return; [INFO] [stdout] 105 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 102 ~ Some(max_retry_count) [INFO] [stdout] 103 ~ if &self.retry_count > max_retry_count => { [INFO] [stdout] 104 | return; [INFO] [stdout] 105 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/sse.rs:101:13 [INFO] [stdout] | [INFO] [stdout] 101 | / match &self.max_retry_count { [INFO] [stdout] 102 | | Some(max_retry_count) => { [INFO] [stdout] 103 | | if &self.retry_count > max_retry_count { [INFO] [stdout] 104 | | return; [INFO] [stdout] ... | [INFO] [stdout] 107 | | None => {} [INFO] [stdout] 108 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 101 ~ if let Some(max_retry_count) = &self.max_retry_count { [INFO] [stdout] 102 + if &self.retry_count > max_retry_count { [INFO] [stdout] 103 + return; [INFO] [stdout] 104 + } [INFO] [stdout] 105 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `u64` which implements the `Copy` trait [INFO] [stdout] --> src/sse.rs:121:44 [INFO] [stdout] | [INFO] [stdout] 121 | wait(Duration::from_millis(self.retry_interval.clone())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.retry_interval` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/sse.rs:208:12 [INFO] [stdout] | [INFO] [stdout] 208 | if !response.is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `response.is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/sse.rs:287:9 [INFO] [stdout] | [INFO] [stdout] 287 | return SseAction::Retry; [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] 287 - return SseAction::Retry; [INFO] [stdout] 287 + SseAction::Retry [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `!Range::contains` implementation [INFO] [stdout] --> src/sse.rs:229:12 [INFO] [stdout] | [INFO] [stdout] 229 | if status < 200 || status >= 300 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `!(200..300).contains(&status)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] = note: `#[warn(clippy::manual_range_contains)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/sse.rs:248:13 [INFO] [stdout] | [INFO] [stdout] 248 | / match data { [INFO] [stdout] 249 | | Ok(text) => { [INFO] [stdout] 250 | | if !text.ends_with("\n\n") { [INFO] [stdout] 251 | | pending_data.push_str(text); [INFO] [stdout] ... | [INFO] [stdout] 281 | | _ => {} [INFO] [stdout] 282 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 248 ~ if let Ok(text) = data { [INFO] [stdout] 249 + if !text.ends_with("\n\n") { [INFO] [stdout] 250 + pending_data.push_str(text); [INFO] [stdout] 251 + continue; [INFO] [stdout] 252 + } [INFO] [stdout] 253 + let msg_text = format!("{}{}", pending_data, text); [INFO] [stdout] 254 + let (messages, left_over) = sse_message_list_from_string(msg_text, false); [INFO] [stdout] 255 + pending_data = left_over; [INFO] [stdout] 256 + for message in messages { [INFO] [stdout] 257 + let event = message.event.unwrap_or("".to_string()); [INFO] [stdout] 258 + match event.as_str() { [INFO] [stdout] 259 + "done" => { [INFO] [stdout] 260 + on_event(SseEvent::Close, &mut controller); [INFO] [stdout] 261 + return SseAction::Abort; [INFO] [stdout] 262 + } [INFO] [stdout] 263 + "message" => { [INFO] [stdout] 264 + on_event( [INFO] [stdout] 265 + SseEvent::Message(T::from_json_string(message.data)), [INFO] [stdout] 266 + &mut controller, [INFO] [stdout] 267 + ); [INFO] [stdout] 268 + if controller.is_aborted { [INFO] [stdout] 269 + return SseAction::Abort; [INFO] [stdout] 270 + } [INFO] [stdout] 271 + } [INFO] [stdout] 272 + "" => on_event( [INFO] [stdout] 273 + SseEvent::Message(T::from_json_string(message.data)), [INFO] [stdout] 274 + &mut controller, [INFO] [stdout] 275 + ), [INFO] [stdout] 276 + _ => {} [INFO] [stdout] 277 + } [INFO] [stdout] 278 + } [INFO] [stdout] 279 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `data` after checking its variant with `is_some` [INFO] [stdout] --> src/sse.rs:329:35 [INFO] [stdout] | [INFO] [stdout] 326 | if data.is_some() { [INFO] [stdout] | ----------------- help: try: `if let Some() = data` [INFO] [stdout] ... [INFO] [stdout] 329 | data: data.unwrap().clone(), [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: bound is defined in more than one place [INFO] [stdout] --> src/sse.rs:45:42 [INFO] [stdout] | [INFO] [stdout] 45 | pub async fn parsed_arri_sse_request<'a, T: ArriModel, OnEvent>( [INFO] [stdout] | ^ [INFO] [stdout] ... [INFO] [stdout] 50 | T: ArriModel + std::marker::Send + std::marker::Sync, [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#multiple_bound_locations [INFO] [stdout] = note: `#[warn(clippy::multiple_bound_locations)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `data` after checking its variant with `is_some` [INFO] [stdout] --> src/sse.rs:379:35 [INFO] [stdout] | [INFO] [stdout] 376 | if data.is_some() { [INFO] [stdout] | ----------------- help: try: `if let Some() = data` [INFO] [stdout] ... [INFO] [stdout] 379 | data: data.unwrap().clone(), [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/sse.rs:399:5 [INFO] [stdout] | [INFO] [stdout] 399 | return (messages, input[pending_index..].to_string()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 399 - return (messages, input[pending_index..].to_string()); [INFO] [stdout] 399 + (messages, input[pending_index..].to_string()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `bool` which implements the `Copy` trait [INFO] [stdout] --> src/sse.rs:308:67 [INFO] [stdout] | [INFO] [stdout] 308 | let parsed_result = parse_sse_line(line.as_str(), debug.clone()); [INFO] [stdout] | ^^^^^^^^^^^^^ help: try removing the `clone` call: `debug` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Option` which implements the `Copy` trait [INFO] [stdout] --> src/sse.rs:331:36 [INFO] [stdout] | [INFO] [stdout] 331 | ... retry: retry.clone(), [INFO] [stdout] | ^^^^^^^^^^^^^ help: try removing the `clone` call: `retry` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `bool` which implements the `Copy` trait [INFO] [stdout] --> src/sse.rs:358:67 [INFO] [stdout] | [INFO] [stdout] 358 | let parsed_result = parse_sse_line(line.as_str(), debug.clone()); [INFO] [stdout] | ^^^^^^^^^^^^^ help: try removing the `clone` call: `debug` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Option` which implements the `Copy` trait [INFO] [stdout] --> src/sse.rs:381:36 [INFO] [stdout] | [INFO] [stdout] 381 | ... retry: retry.clone(), [INFO] [stdout] | ^^^^^^^^^^^^^ help: try removing the `clone` call: `retry` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> src/sse.rs:407:41 [INFO] [stdout] | [INFO] [stdout] 407 | return ParseSseLineResult::Data(input[5..].trim().to_string()); [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> src/sse.rs:406:5 [INFO] [stdout] | [INFO] [stdout] 406 | if input.starts_with("data:") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] = note: `#[warn(clippy::manual_strip)]` on by default [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 406 ~ if let Some() = input.strip_prefix("data:") { [INFO] [stdout] 407 ~ return ParseSseLineResult::Data(.trim().to_string()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> src/sse.rs:410:39 [INFO] [stdout] | [INFO] [stdout] 410 | return ParseSseLineResult::Id(input[3..].trim().to_string()); [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> src/sse.rs:409:5 [INFO] [stdout] | [INFO] [stdout] 409 | if input.starts_with("id:") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 409 ~ if let Some() = input.strip_prefix("id:") { [INFO] [stdout] 410 ~ return ParseSseLineResult::Id(.trim().to_string()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> src/sse.rs:413:42 [INFO] [stdout] | [INFO] [stdout] 413 | return ParseSseLineResult::Event(input[6..].trim().to_string()); [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> src/sse.rs:412:5 [INFO] [stdout] | [INFO] [stdout] 412 | if input.starts_with("event:") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 412 ~ if let Some() = input.strip_prefix("event:") { [INFO] [stdout] 413 ~ return ParseSseLineResult::Event(.trim().to_string()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> src/sse.rs:416:19 [INFO] [stdout] | [INFO] [stdout] 416 | let val = input[6..].trim().parse::(); [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> src/sse.rs:415:5 [INFO] [stdout] | [INFO] [stdout] 415 | if input.starts_with("retry:") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 415 ~ if let Some() = input.strip_prefix("retry:") { [INFO] [stdout] 416 ~ let val = .trim().parse::(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/sse.rs:417:9 [INFO] [stdout] | [INFO] [stdout] 417 | / match val { [INFO] [stdout] 418 | | Ok(val) => { [INFO] [stdout] 419 | | return ParseSseLineResult::Retry(val); [INFO] [stdout] ... | [INFO] [stdout] 422 | | }; [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 417 ~ if let Ok(val) = val { [INFO] [stdout] 418 + return ParseSseLineResult::Retry(val); [INFO] [stdout] 419 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/lib.rs:111:28 [INFO] [stdout] | [INFO] [stdout] 111 | let data = match val.get("data") { [INFO] [stdout] | ____________________________^ [INFO] [stdout] 112 | | Some(data_val) => Some(data_val.to_owned()), [INFO] [stdout] 113 | | _ => None, [INFO] [stdout] 114 | | }; [INFO] [stdout] | |_________________^ help: try: `val.get("data").map(|data_val| data_val.to_owned())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_map [INFO] [stdout] = note: `#[warn(clippy::manual_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/lib.rs:146:9 [INFO] [stdout] | [INFO] [stdout] 146 | / match &self.stack { [INFO] [stdout] 147 | | Some(val) => { [INFO] [stdout] 148 | | result.push_str(",\"stack\":"); [INFO] [stdout] 149 | | result.push_str( [INFO] [stdout] ... | [INFO] [stdout] 153 | | _ => {} [INFO] [stdout] 154 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 146 ~ if let Some(val) = &self.stack { [INFO] [stdout] 147 + result.push_str(",\"stack\":"); [INFO] [stdout] 148 + result.push_str( [INFO] [stdout] 149 + format!("\"{}\"", val.replace("\n", "\\n").replace("\"", "\\\"")).as_str(), [INFO] [stdout] 150 + ); [INFO] [stdout] 151 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/lib.rs:155:9 [INFO] [stdout] | [INFO] [stdout] 155 | / match &self.data { [INFO] [stdout] 156 | | Some(val) => { [INFO] [stdout] 157 | | result.push_str(",\"data\":"); [INFO] [stdout] 158 | | result.push_str( [INFO] [stdout] ... | [INFO] [stdout] 164 | | _ => {} [INFO] [stdout] 165 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 155 ~ if let Some(val) = &self.data { [INFO] [stdout] 156 + result.push_str(",\"data\":"); [INFO] [stdout] 157 + result.push_str( [INFO] [stdout] 158 + serde_json::to_string(val) [INFO] [stdout] 159 + .unwrap_or("null".to_string()) [INFO] [stdout] 160 + .as_str(), [INFO] [stdout] 161 + ) [INFO] [stdout] 162 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/lib.rs:173:9 [INFO] [stdout] | [INFO] [stdout] 173 | / match &self.stack { [INFO] [stdout] 174 | | Some(stack) => { [INFO] [stdout] 175 | | query_parts.push(format!("stack={}", stack)); [INFO] [stdout] ... | [INFO] [stdout] 178 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 173 ~ if let Some(stack) = &self.stack { [INFO] [stdout] 174 + query_parts.push(format!("stack={}", stack)); [INFO] [stdout] 175 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/lib.rs:179:9 [INFO] [stdout] | [INFO] [stdout] 179 | / match &self.data { [INFO] [stdout] 180 | | Some(data) => { [INFO] [stdout] 181 | | query_parts.push(format!( [INFO] [stdout] 182 | | "data={}", [INFO] [stdout] ... | [INFO] [stdout] 186 | | _ => {} [INFO] [stdout] 187 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 179 ~ if let Some(data) = &self.data { [INFO] [stdout] 180 + query_parts.push(format!( [INFO] [stdout] 181 + "data={}", [INFO] [stdout] 182 + serde_json::to_string(data).unwrap_or("null".to_string()) [INFO] [stdout] 183 + )); [INFO] [stdout] 184 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lib.rs:303:20 [INFO] [stdout] | [INFO] [stdout] 303 | Ok(res) => return Ok(res), [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 303 - Ok(res) => return Ok(res), [INFO] [stdout] 303 + Ok(res) => Ok(res), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lib.rs:305:13 [INFO] [stdout] | [INFO] [stdout] 305 | / return Err(ArriError { [INFO] [stdout] 306 | | code: err.status().unwrap_or(StatusCode::default()).as_u16(), [INFO] [stdout] 307 | | message: format!("Error requesting \"{}\"", opts.url), [INFO] [stdout] 308 | | stack: None, [INFO] [stdout] 309 | | data: None, [INFO] [stdout] 310 | | }) [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 305 ~ Err(ArriError { [INFO] [stdout] 306 + code: err.status().unwrap_or(StatusCode::default()).as_u16(), [INFO] [stdout] 307 + message: format!("Error requesting \"{}\"", opts.url), [INFO] [stdout] 308 + stack: None, [INFO] [stdout] 309 + data: None, [INFO] [stdout] 310 + }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/lib.rs:233:13 [INFO] [stdout] | [INFO] [stdout] 233 | / match params { [INFO] [stdout] 234 | | Some(val) => final_url = format!("{final_url}?{}", val.to_query_params_string()), [INFO] [stdout] 235 | | None => {} [INFO] [stdout] 236 | | } [INFO] [stdout] | |_____________^ help: try: `if let Some(val) = params { final_url = format!("{final_url}?{}", val.to_query_params_string()) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap_err` on `result` after checking its variant with `is_err` [INFO] [stdout] --> src/lib.rs:373:20 [INFO] [stdout] | [INFO] [stdout] 372 | if result.is_err() { [INFO] [stdout] | ------------------ help: try: `if let Err() = result` [INFO] [stdout] 373 | return Err(result.unwrap_err()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lib.rs:385:21 [INFO] [stdout] | [INFO] [stdout] 385 | Ok(text) => return Ok(parser(text)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 385 - Ok(text) => return Ok(parser(text)), [INFO] [stdout] 385 + Ok(text) => Ok(parser(text)), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lib.rs:387:13 [INFO] [stdout] | [INFO] [stdout] 387 | / return Err(ArriError { [INFO] [stdout] 388 | | code: status, [INFO] [stdout] 389 | | message: "Expected server to return plaintext".to_string(), [INFO] [stdout] 390 | | stack: None, [INFO] [stdout] 391 | | data: Some(serde_json::Value::String(err.to_string())), [INFO] [stdout] 392 | | }) [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 387 ~ Err(ArriError { [INFO] [stdout] 388 + code: status, [INFO] [stdout] 389 + message: "Expected server to return plaintext".to_string(), [INFO] [stdout] 390 + stack: None, [INFO] [stdout] 391 + data: Some(serde_json::Value::String(err.to_string())), [INFO] [stdout] 392 + }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `!Range::contains` implementation [INFO] [stdout] --> src/lib.rs:378:8 [INFO] [stdout] | [INFO] [stdout] 378 | if status >= 300 || status < 200 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `!(200..300).contains(&status)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `SseController` [INFO] [stdout] --> src/sse.rs:37:5 [INFO] [stdout] | [INFO] [stdout] 37 | / pub fn new() -> Self { [INFO] [stdout] 38 | | Self { is_aborted: false } [INFO] [stdout] 39 | | } [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] 36 + impl Default for SseController { [INFO] [stdout] 37 + fn default() -> Self { [INFO] [stdout] 38 + Self::new() [INFO] [stdout] 39 + } [INFO] [stdout] 40 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/sse.rs:54:22 [INFO] [stdout] | [INFO] [stdout] 54 | http_client: &options.client, [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: change this to: `options.client` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/sse.rs:103:21 [INFO] [stdout] | [INFO] [stdout] 103 | / if &self.retry_count > max_retry_count { [INFO] [stdout] 104 | | return; [INFO] [stdout] 105 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 102 ~ Some(max_retry_count) [INFO] [stdout] 103 ~ if &self.retry_count > max_retry_count => { [INFO] [stdout] 104 | return; [INFO] [stdout] 105 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/sse.rs:101:13 [INFO] [stdout] | [INFO] [stdout] 101 | / match &self.max_retry_count { [INFO] [stdout] 102 | | Some(max_retry_count) => { [INFO] [stdout] 103 | | if &self.retry_count > max_retry_count { [INFO] [stdout] 104 | | return; [INFO] [stdout] ... | [INFO] [stdout] 107 | | None => {} [INFO] [stdout] 108 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 101 ~ if let Some(max_retry_count) = &self.max_retry_count { [INFO] [stdout] 102 + if &self.retry_count > max_retry_count { [INFO] [stdout] 103 + return; [INFO] [stdout] 104 + } [INFO] [stdout] 105 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `u64` which implements the `Copy` trait [INFO] [stdout] --> src/sse.rs:121:44 [INFO] [stdout] | [INFO] [stdout] 121 | wait(Duration::from_millis(self.retry_interval.clone())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.retry_interval` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/sse.rs:208:12 [INFO] [stdout] | [INFO] [stdout] 208 | if !response.is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `response.is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/sse.rs:287:9 [INFO] [stdout] | [INFO] [stdout] 287 | return SseAction::Retry; [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] 287 - return SseAction::Retry; [INFO] [stdout] 287 + SseAction::Retry [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `!Range::contains` implementation [INFO] [stdout] --> src/sse.rs:229:12 [INFO] [stdout] | [INFO] [stdout] 229 | if status < 200 || status >= 300 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `!(200..300).contains(&status)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] = note: `#[warn(clippy::manual_range_contains)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/sse.rs:248:13 [INFO] [stdout] | [INFO] [stdout] 248 | / match data { [INFO] [stdout] 249 | | Ok(text) => { [INFO] [stdout] 250 | | if !text.ends_with("\n\n") { [INFO] [stdout] 251 | | pending_data.push_str(text); [INFO] [stdout] ... | [INFO] [stdout] 281 | | _ => {} [INFO] [stdout] 282 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 248 ~ if let Ok(text) = data { [INFO] [stdout] 249 + if !text.ends_with("\n\n") { [INFO] [stdout] 250 + pending_data.push_str(text); [INFO] [stdout] 251 + continue; [INFO] [stdout] 252 + } [INFO] [stdout] 253 + let msg_text = format!("{}{}", pending_data, text); [INFO] [stdout] 254 + let (messages, left_over) = sse_message_list_from_string(msg_text, false); [INFO] [stdout] 255 + pending_data = left_over; [INFO] [stdout] 256 + for message in messages { [INFO] [stdout] 257 + let event = message.event.unwrap_or("".to_string()); [INFO] [stdout] 258 + match event.as_str() { [INFO] [stdout] 259 + "done" => { [INFO] [stdout] 260 + on_event(SseEvent::Close, &mut controller); [INFO] [stdout] 261 + return SseAction::Abort; [INFO] [stdout] 262 + } [INFO] [stdout] 263 + "message" => { [INFO] [stdout] 264 + on_event( [INFO] [stdout] 265 + SseEvent::Message(T::from_json_string(message.data)), [INFO] [stdout] 266 + &mut controller, [INFO] [stdout] 267 + ); [INFO] [stdout] 268 + if controller.is_aborted { [INFO] [stdout] 269 + return SseAction::Abort; [INFO] [stdout] 270 + } [INFO] [stdout] 271 + } [INFO] [stdout] 272 + "" => on_event( [INFO] [stdout] 273 + SseEvent::Message(T::from_json_string(message.data)), [INFO] [stdout] 274 + &mut controller, [INFO] [stdout] 275 + ), [INFO] [stdout] 276 + _ => {} [INFO] [stdout] 277 + } [INFO] [stdout] 278 + } [INFO] [stdout] 279 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `data` after checking its variant with `is_some` [INFO] [stdout] --> src/sse.rs:329:35 [INFO] [stdout] | [INFO] [stdout] 326 | if data.is_some() { [INFO] [stdout] | ----------------- help: try: `if let Some() = data` [INFO] [stdout] ... [INFO] [stdout] 329 | data: data.unwrap().clone(), [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `data` after checking its variant with `is_some` [INFO] [stdout] --> src/sse.rs:379:35 [INFO] [stdout] | [INFO] [stdout] 376 | if data.is_some() { [INFO] [stdout] | ----------------- help: try: `if let Some() = data` [INFO] [stdout] ... [INFO] [stdout] 379 | data: data.unwrap().clone(), [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/sse.rs:399:5 [INFO] [stdout] | [INFO] [stdout] 399 | return (messages, input[pending_index..].to_string()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 399 - return (messages, input[pending_index..].to_string()); [INFO] [stdout] 399 + (messages, input[pending_index..].to_string()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `bool` which implements the `Copy` trait [INFO] [stdout] --> src/sse.rs:308:67 [INFO] [stdout] | [INFO] [stdout] 308 | let parsed_result = parse_sse_line(line.as_str(), debug.clone()); [INFO] [stdout] | ^^^^^^^^^^^^^ help: try removing the `clone` call: `debug` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Option` which implements the `Copy` trait [INFO] [stdout] --> src/sse.rs:331:36 [INFO] [stdout] | [INFO] [stdout] 331 | ... retry: retry.clone(), [INFO] [stdout] | ^^^^^^^^^^^^^ help: try removing the `clone` call: `retry` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `bool` which implements the `Copy` trait [INFO] [stdout] --> src/sse.rs:358:67 [INFO] [stdout] | [INFO] [stdout] 358 | let parsed_result = parse_sse_line(line.as_str(), debug.clone()); [INFO] [stdout] | ^^^^^^^^^^^^^ help: try removing the `clone` call: `debug` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Option` which implements the `Copy` trait [INFO] [stdout] --> src/sse.rs:381:36 [INFO] [stdout] | [INFO] [stdout] 381 | ... retry: retry.clone(), [INFO] [stdout] | ^^^^^^^^^^^^^ help: try removing the `clone` call: `retry` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> src/sse.rs:407:41 [INFO] [stdout] | [INFO] [stdout] 407 | return ParseSseLineResult::Data(input[5..].trim().to_string()); [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> src/sse.rs:406:5 [INFO] [stdout] | [INFO] [stdout] 406 | if input.starts_with("data:") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] = note: `#[warn(clippy::manual_strip)]` on by default [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 406 ~ if let Some() = input.strip_prefix("data:") { [INFO] [stdout] 407 ~ return ParseSseLineResult::Data(.trim().to_string()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> src/sse.rs:410:39 [INFO] [stdout] | [INFO] [stdout] 410 | return ParseSseLineResult::Id(input[3..].trim().to_string()); [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> src/sse.rs:409:5 [INFO] [stdout] | [INFO] [stdout] 409 | if input.starts_with("id:") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 409 ~ if let Some() = input.strip_prefix("id:") { [INFO] [stdout] 410 ~ return ParseSseLineResult::Id(.trim().to_string()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> src/sse.rs:413:42 [INFO] [stdout] | [INFO] [stdout] 413 | return ParseSseLineResult::Event(input[6..].trim().to_string()); [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> src/sse.rs:412:5 [INFO] [stdout] | [INFO] [stdout] 412 | if input.starts_with("event:") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 412 ~ if let Some() = input.strip_prefix("event:") { [INFO] [stdout] 413 ~ return ParseSseLineResult::Event(.trim().to_string()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> src/sse.rs:416:19 [INFO] [stdout] | [INFO] [stdout] 416 | let val = input[6..].trim().parse::(); [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> src/sse.rs:415:5 [INFO] [stdout] | [INFO] [stdout] 415 | if input.starts_with("retry:") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 415 ~ if let Some() = input.strip_prefix("retry:") { [INFO] [stdout] 416 ~ let val = .trim().parse::(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/sse.rs:417:9 [INFO] [stdout] | [INFO] [stdout] 417 | / match val { [INFO] [stdout] 418 | | Ok(val) => { [INFO] [stdout] 419 | | return ParseSseLineResult::Retry(val); [INFO] [stdout] ... | [INFO] [stdout] 422 | | }; [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 417 ~ if let Ok(val) = val { [INFO] [stdout] 418 + return ParseSseLineResult::Retry(val); [INFO] [stdout] 419 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/lib.rs:111:28 [INFO] [stdout] | [INFO] [stdout] 111 | let data = match val.get("data") { [INFO] [stdout] | ____________________________^ [INFO] [stdout] 112 | | Some(data_val) => Some(data_val.to_owned()), [INFO] [stdout] 113 | | _ => None, [INFO] [stdout] 114 | | }; [INFO] [stdout] | |_________________^ help: try: `val.get("data").map(|data_val| data_val.to_owned())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_map [INFO] [stdout] = note: `#[warn(clippy::manual_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/lib.rs:146:9 [INFO] [stdout] | [INFO] [stdout] 146 | / match &self.stack { [INFO] [stdout] 147 | | Some(val) => { [INFO] [stdout] 148 | | result.push_str(",\"stack\":"); [INFO] [stdout] 149 | | result.push_str( [INFO] [stdout] ... | [INFO] [stdout] 153 | | _ => {} [INFO] [stdout] 154 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 146 ~ if let Some(val) = &self.stack { [INFO] [stdout] 147 + result.push_str(",\"stack\":"); [INFO] [stdout] 148 + result.push_str( [INFO] [stdout] 149 + format!("\"{}\"", val.replace("\n", "\\n").replace("\"", "\\\"")).as_str(), [INFO] [stdout] 150 + ); [INFO] [stdout] 151 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/lib.rs:155:9 [INFO] [stdout] | [INFO] [stdout] 155 | / match &self.data { [INFO] [stdout] 156 | | Some(val) => { [INFO] [stdout] 157 | | result.push_str(",\"data\":"); [INFO] [stdout] 158 | | result.push_str( [INFO] [stdout] ... | [INFO] [stdout] 164 | | _ => {} [INFO] [stdout] 165 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 155 ~ if let Some(val) = &self.data { [INFO] [stdout] 156 + result.push_str(",\"data\":"); [INFO] [stdout] 157 + result.push_str( [INFO] [stdout] 158 + serde_json::to_string(val) [INFO] [stdout] 159 + .unwrap_or("null".to_string()) [INFO] [stdout] 160 + .as_str(), [INFO] [stdout] 161 + ) [INFO] [stdout] 162 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/lib.rs:173:9 [INFO] [stdout] | [INFO] [stdout] 173 | / match &self.stack { [INFO] [stdout] 174 | | Some(stack) => { [INFO] [stdout] 175 | | query_parts.push(format!("stack={}", stack)); [INFO] [stdout] ... | [INFO] [stdout] 178 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 173 ~ if let Some(stack) = &self.stack { [INFO] [stdout] 174 + query_parts.push(format!("stack={}", stack)); [INFO] [stdout] 175 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/lib.rs:179:9 [INFO] [stdout] | [INFO] [stdout] 179 | / match &self.data { [INFO] [stdout] 180 | | Some(data) => { [INFO] [stdout] 181 | | query_parts.push(format!( [INFO] [stdout] 182 | | "data={}", [INFO] [stdout] ... | [INFO] [stdout] 186 | | _ => {} [INFO] [stdout] 187 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 179 ~ if let Some(data) = &self.data { [INFO] [stdout] 180 + query_parts.push(format!( [INFO] [stdout] 181 + "data={}", [INFO] [stdout] 182 + serde_json::to_string(data).unwrap_or("null".to_string()) [INFO] [stdout] 183 + )); [INFO] [stdout] 184 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lib.rs:303:20 [INFO] [stdout] | [INFO] [stdout] 303 | Ok(res) => return Ok(res), [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 303 - Ok(res) => return Ok(res), [INFO] [stdout] 303 + Ok(res) => Ok(res), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lib.rs:305:13 [INFO] [stdout] | [INFO] [stdout] 305 | / return Err(ArriError { [INFO] [stdout] 306 | | code: err.status().unwrap_or(StatusCode::default()).as_u16(), [INFO] [stdout] 307 | | message: format!("Error requesting \"{}\"", opts.url), [INFO] [stdout] 308 | | stack: None, [INFO] [stdout] 309 | | data: None, [INFO] [stdout] 310 | | }) [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 305 ~ Err(ArriError { [INFO] [stdout] 306 + code: err.status().unwrap_or(StatusCode::default()).as_u16(), [INFO] [stdout] 307 + message: format!("Error requesting \"{}\"", opts.url), [INFO] [stdout] 308 + stack: None, [INFO] [stdout] 309 + data: None, [INFO] [stdout] 310 + }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/lib.rs:233:13 [INFO] [stdout] | [INFO] [stdout] 233 | / match params { [INFO] [stdout] 234 | | Some(val) => final_url = format!("{final_url}?{}", val.to_query_params_string()), [INFO] [stdout] 235 | | None => {} [INFO] [stdout] 236 | | } [INFO] [stdout] | |_____________^ help: try: `if let Some(val) = params { final_url = format!("{final_url}?{}", val.to_query_params_string()) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap_err` on `result` after checking its variant with `is_err` [INFO] [stdout] --> src/lib.rs:373:20 [INFO] [stdout] | [INFO] [stdout] 372 | if result.is_err() { [INFO] [stdout] | ------------------ help: try: `if let Err() = result` [INFO] [stdout] 373 | return Err(result.unwrap_err()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lib.rs:385:21 [INFO] [stdout] | [INFO] [stdout] 385 | Ok(text) => return Ok(parser(text)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 385 - Ok(text) => return Ok(parser(text)), [INFO] [stdout] 385 + Ok(text) => Ok(parser(text)), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lib.rs:387:13 [INFO] [stdout] | [INFO] [stdout] 387 | / return Err(ArriError { [INFO] [stdout] 388 | | code: status, [INFO] [stdout] 389 | | message: "Expected server to return plaintext".to_string(), [INFO] [stdout] 390 | | stack: None, [INFO] [stdout] 391 | | data: Some(serde_json::Value::String(err.to_string())), [INFO] [stdout] 392 | | }) [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 387 ~ Err(ArriError { [INFO] [stdout] 388 + code: status, [INFO] [stdout] 389 + message: "Expected server to return plaintext".to_string(), [INFO] [stdout] 390 + stack: None, [INFO] [stdout] 391 + data: Some(serde_json::Value::String(err.to_string())), [INFO] [stdout] 392 + }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `!Range::contains` implementation [INFO] [stdout] --> src/lib.rs:378:8 [INFO] [stdout] | [INFO] [stdout] 378 | if status >= 300 || status < 200 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `!(200..300).contains(&status)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 28.24s [INFO] running `Command { std: "docker" "inspect" "e35edcd6d0c251c8b35c93a069ba4364a81c5e6b73238c9c489ae97f689c3216", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "e35edcd6d0c251c8b35c93a069ba4364a81c5e6b73238c9c489ae97f689c3216", kill_on_drop: false }` [INFO] [stdout] e35edcd6d0c251c8b35c93a069ba4364a81c5e6b73238c9c489ae97f689c3216