[INFO] cloning repository https://github.com/q231950/paper [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/q231950/paper" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fq231950%2Fpaper", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fq231950%2Fpaper'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] b4aafadb30ce921c09d5e581ae7e12c1138deef5 [INFO] linting q231950/paper against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fq231950%2Fpaper" "/workspace/builds/worker-1-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/q231950/paper [INFO] finished tweaking git repo https://github.com/q231950/paper [INFO] tweaked toml for git repo https://github.com/q231950/paper written to /workspace/builds/worker-1-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/q231950/paper on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/q231950/paper 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] warning: profiles for the non root package will be ignored, specify profiles at the workspace root: [INFO] [stderr] package: /workspace/builds/worker-1-tc1/source/paper/Cargo.toml [INFO] [stderr] workspace: /workspace/builds/worker-1-tc1/source/Cargo.toml [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded uniffi_pipeline v0.29.4 [INFO] [stderr] Downloaded fastrand v2.0.2 [INFO] [stderr] Downloaded uniffi_internal_macros v0.29.4 [INFO] [stderr] Downloaded async-compat v0.2.4 [INFO] [stderr] Downloaded uniffi v0.29.4 [INFO] [stderr] Downloaded uniffi_core v0.29.4 [INFO] [stderr] Downloaded uniffi_meta v0.29.4 [INFO] [stderr] Downloaded scroll_derive v0.12.0 [INFO] [stderr] Downloaded uniffi_macros v0.29.4 [INFO] [stderr] Downloaded async-convert v1.0.0 [INFO] [stderr] Downloaded ego-tree v0.6.2 [INFO] [stderr] Downloaded async-channel v2.2.1 [INFO] [stderr] Downloaded signal-hook v0.1.17 [INFO] [stderr] Downloaded async-openai v0.16.3 [INFO] [stderr] Downloaded polling v3.6.0 [INFO] [stderr] Downloaded clap v4.5.7 [INFO] [stderr] Downloaded async-io v2.3.2 [INFO] [stderr] Downloaded cc v1.2.28 [INFO] [stderr] Downloaded crossterm v0.19.0 [INFO] [stderr] Downloaded goblin v0.8.0 [INFO] [stderr] Downloaded comfy-table v2.1.0 [INFO] [stderr] Downloaded clap_builder v4.5.7 [INFO] [stderr] Downloaded uniffi_bindgen v0.29.4 [INFO] [stderr] Downloaded semver v1.0.22 [INFO] [stderr] Downloaded value-bag v1.8.1 [INFO] [stderr] Downloaded uniffi_udl v0.29.4 [INFO] [stderr] Downloaded indicatif v0.15.0 [INFO] [stderr] Downloaded scraper v0.19.0 [INFO] [stderr] Downloaded clap_derive v4.5.5 [INFO] [stderr] Downloaded cookies v0.0.1 [INFO] [stderr] Downloaded dialoguer v0.8.0 [INFO] [stderr] Downloaded rustix v0.38.32 [INFO] [stderr] Downloaded console v0.14.1 [INFO] [stderr] Downloaded cookie_store v0.20.0 [INFO] [stderr] Downloaded uniffi_build v0.29.4 [INFO] [stderr] Downloaded event-listener-strategy v0.5.1 [INFO] [stderr] Downloaded crossterm_winapi v0.7.0 [INFO] [stderr] Downloaded number_prefix v0.3.0 [INFO] [stderr] Downloaded security-framework-sys v2.10.0 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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] 0be397192a51f57f042abf1ad71d6a65abdbb1eee8fdfbb355f5377879468a60 [INFO] running `Command { std: "docker" "start" "-a" "0be397192a51f57f042abf1ad71d6a65abdbb1eee8fdfbb355f5377879468a60", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "0be397192a51f57f042abf1ad71d6a65abdbb1eee8fdfbb355f5377879468a60", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "0be397192a51f57f042abf1ad71d6a65abdbb1eee8fdfbb355f5377879468a60", kill_on_drop: false }` [INFO] [stdout] 0be397192a51f57f042abf1ad71d6a65abdbb1eee8fdfbb355f5377879468a60 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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] e8c8c398f3c224240aaad2bd518abd3162b3a7c96916c00b4c1cbe82c1eb77f5 [INFO] running `Command { std: "docker" "start" "-a" "e8c8c398f3c224240aaad2bd518abd3162b3a7c96916c00b4c1cbe82c1eb77f5", kill_on_drop: false }` [INFO] [stderr] warning: profiles for the non root package will be ignored, specify profiles at the workspace root: [INFO] [stderr] package: /opt/rustwide/workdir/paper/Cargo.toml [INFO] [stderr] workspace: /opt/rustwide/workdir/Cargo.toml [INFO] [stderr] Compiling proc-macro2 v1.0.101 [INFO] [stderr] Compiling libc v0.2.174 [INFO] [stderr] Compiling autocfg v1.2.0 [INFO] [stderr] Checking memchr v2.7.2 [INFO] [stderr] Checking value-bag v1.8.1 [INFO] [stderr] Compiling parking_lot_core v0.9.9 [INFO] [stderr] Checking futures-io v0.3.30 [INFO] [stderr] Compiling serde v1.0.203 [INFO] [stderr] Checking bitflags v2.5.0 [INFO] [stderr] Checking bytes v1.6.0 [INFO] [stderr] Compiling cc v1.2.28 [INFO] [stderr] Compiling hashbrown v0.14.3 [INFO] [stderr] Compiling ppv-lite86 v0.2.17 [INFO] [stderr] Checking fastrand v2.0.2 [INFO] [stderr] Compiling serde_json v1.0.143 [INFO] [stderr] Compiling crossbeam-utils v0.8.19 [INFO] [stderr] Compiling rustix v0.38.32 [INFO] [stderr] Compiling camino v1.1.6 [INFO] [stderr] Checking indexmap v2.5.0 [INFO] [stderr] Checking log v0.4.21 [INFO] [stderr] Checking parking v2.2.0 [INFO] [stderr] Checking linux-raw-sys v0.4.13 [INFO] [stderr] Compiling lock_api v0.4.11 [INFO] [stderr] Compiling slab v0.4.9 [INFO] [stderr] Compiling quote v1.0.36 [INFO] [stderr] Compiling fs-err v2.11.0 [INFO] [stderr] Compiling getrandom v0.2.14 [INFO] [stderr] Compiling semver v1.0.22 [INFO] [stderr] Checking concurrent-queue v2.4.0 [INFO] [stderr] Compiling thiserror v2.0.16 [INFO] [stderr] Checking ryu v1.0.17 [INFO] [stderr] Checking nom v7.1.3 [INFO] [stderr] Compiling syn v2.0.106 [INFO] [stderr] Compiling syn v1.0.109 [INFO] [stderr] Compiling rand_core v0.6.4 [INFO] [stderr] Checking http v0.2.12 [INFO] [stderr] Compiling openssl v0.10.64 [INFO] [stderr] Checking heck v0.5.0 [INFO] [stderr] Compiling smawk v0.3.2 [INFO] [stderr] Checking event-listener v4.0.3 [INFO] [stderr] Checking phf_shared v0.10.0 [INFO] [stderr] Compiling textwrap v0.16.1 [INFO] [stderr] Compiling cookie v0.17.0 [INFO] [stderr] Compiling plain v0.2.3 [INFO] [stderr] Compiling tokio v1.38.0 [INFO] [stderr] Checking event-listener-strategy v0.4.0 [INFO] [stderr] Compiling rand_chacha v0.3.1 [INFO] [stderr] Compiling mime_guess v2.0.4 [INFO] [stderr] Checking idna v0.3.0 [INFO] [stderr] Compiling rand v0.8.5 [INFO] [stderr] Checking signal-hook-registry v1.4.1 [INFO] [stderr] Checking socket2 v0.5.6 [INFO] [stderr] Checking mio v0.8.11 [INFO] [stderr] Checking parking_lot v0.12.1 [INFO] [stderr] Checking num_cpus v1.16.0 [INFO] [stderr] Checking idna v0.5.0 [INFO] [stderr] Checking event-listener v5.3.0 [INFO] [stderr] Checking aho-corasick v1.1.3 [INFO] [stderr] Checking futures-lite v2.3.0 [INFO] [stderr] Checking regex-syntax v0.8.3 [INFO] [stderr] Compiling phf_generator v0.10.0 [INFO] [stderr] Compiling phf_codegen v0.10.0 [INFO] [stderr] Checking http-body v0.4.6 [INFO] [stderr] Compiling string_cache_codegen v0.5.2 [INFO] [stderr] Compiling phf_generator v0.11.2 [INFO] [stderr] Checking anstyle v1.0.6 [INFO] [stderr] Compiling io-lifetimes v1.0.11 [INFO] [stderr] Compiling futures-core v0.3.30 [INFO] [stderr] Compiling ring v0.17.14 [INFO] [stderr] Compiling openssl-sys v0.9.102 [INFO] [stderr] Checking psl-types v2.0.11 [INFO] [stderr] Checking clap_lex v0.7.0 [INFO] [stderr] Checking publicsuffix v2.2.3 [INFO] [stderr] Checking clap_builder v4.5.7 [INFO] [stderr] Compiling async-compat v0.2.4 [INFO] [stderr] Checking futf v0.1.5 [INFO] [stderr] Compiling markup5ever v0.11.0 [INFO] [stderr] Compiling native-tls v0.2.11 [INFO] [stderr] Checking url v2.5.0 [INFO] [stderr] Compiling tempfile v3.10.1 [INFO] [stderr] Checking event-listener-strategy v0.5.1 [INFO] [stderr] Checking async-lock v3.3.0 [INFO] [stderr] Checking phf v0.10.1 [INFO] [stderr] Compiling polling v2.8.0 [INFO] [stderr] Checking phf_shared v0.11.2 [INFO] [stderr] Compiling rustix v0.37.27 [INFO] [stderr] Checking async-task v4.7.0 [INFO] [stderr] Checking glob v0.3.1 [INFO] [stderr] Checking weedle2 v5.0.0 [INFO] [stderr] Checking tendril v0.4.3 [INFO] [stderr] Checking piper v0.2.1 [INFO] [stderr] Checking dtoa-short v0.3.4 [INFO] [stderr] Checking async-channel v2.2.1 [INFO] [stderr] Checking parking_lot_core v0.8.6 [INFO] [stderr] Compiling selectors v0.25.0 [INFO] [stderr] Checking terminal_size v0.1.17 [INFO] [stderr] Checking mio v0.7.14 [INFO] [stderr] Compiling async-io v1.13.0 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Compiling ahash v0.8.11 [INFO] [stderr] Checking waker-fn v1.1.1 [INFO] [stderr] Checking linux-raw-sys v0.3.8 [INFO] [stderr] Compiling uniffi_core v0.29.4 [INFO] [stderr] Checking fastrand v1.9.0 [INFO] [stderr] Checking stable_deref_trait v1.2.0 [INFO] [stderr] Checking servo_arc v0.3.0 [INFO] [stderr] Checking parking_lot v0.11.2 [INFO] [stderr] Checking futures-lite v1.13.0 [INFO] [stderr] Checking async-executor v1.11.0 [INFO] [stderr] Checking eventsource-stream v0.2.3 [INFO] [stderr] Checking signal-hook v0.1.17 [INFO] [stderr] Checking socket2 v0.4.10 [INFO] [stderr] Checking zerocopy v0.7.32 [INFO] [stderr] Checking async-channel v1.9.0 [INFO] [stderr] Checking crossterm v0.19.0 [INFO] [stderr] Checking atty v0.2.14 [INFO] [stderr] Compiling darling_core v0.14.4 [INFO] [stderr] Checking getopts v0.2.21 [INFO] [stderr] Checking regex-automata v0.4.6 [INFO] [stderr] Checking textwrap v0.11.0 [INFO] [stderr] Checking kv-log-macro v1.0.7 [INFO] [stderr] Checking number_prefix v0.3.0 [INFO] [stderr] Checking strum v0.20.0 [INFO] [stderr] Checking ego-tree v0.6.2 [INFO] [stderr] Checking yaml-rust v0.3.5 [INFO] [stderr] Checking uuid v1.11.0 [INFO] [stderr] Checking cookies v0.0.1 [INFO] [stderr] Checking roxmltree v0.20.0 [INFO] [stderr] Checking xml-rs v0.8.20 [INFO] [stderr] Checking chrono v0.4.38 [INFO] [stderr] Checking clap v2.34.0 [INFO] [stderr] Compiling rustls v0.21.12 [INFO] [stderr] Compiling html5ever v0.26.0 [INFO] [stderr] Compiling derive_more v0.99.17 [INFO] [stderr] Compiling async-attributes v1.1.2 [INFO] [stderr] Compiling strum_macros v0.20.1 [INFO] [stderr] Compiling serde_derive v1.0.203 [INFO] [stderr] Compiling tokio-macros v2.3.0 [INFO] [stderr] Compiling uniffi_internal_macros v0.29.4 [INFO] [stderr] Compiling tracing-attributes v0.1.30 [INFO] [stderr] Compiling scroll_derive v0.12.0 [INFO] [stderr] Compiling thiserror-impl v2.0.16 [INFO] [stderr] Compiling futures-macro v0.3.30 [INFO] [stderr] Compiling openssl-macros v0.1.1 [INFO] [stderr] Compiling scroll v0.12.0 [INFO] [stderr] Compiling goblin v0.8.0 [INFO] [stderr] Compiling phf_macros v0.11.2 [INFO] [stderr] Compiling clap_derive v4.5.5 [INFO] [stderr] Checking regex v1.10.5 [INFO] [stderr] Compiling uniffi_pipeline v0.29.4 [INFO] [stderr] Checking futures-util v0.3.30 [INFO] [stderr] Compiling thiserror-impl v1.0.61 [INFO] [stderr] Compiling uniffi_meta v0.29.4 [INFO] [stderr] Compiling cssparser-macros v0.6.1 [INFO] [stderr] Checking console v0.14.1 [INFO] [stderr] Checking phf v0.11.2 [INFO] [stderr] Compiling darling_macro v0.14.4 [INFO] [stderr] Checking cssparser v0.31.2 [INFO] [stderr] Compiling async-trait v0.1.88 [INFO] [stderr] Checking tracing v0.1.40 [INFO] [stderr] Compiling darling v0.14.4 [INFO] [stderr] Checking rustls-webpki v0.101.7 [INFO] [stderr] Checking sct v0.7.1 [INFO] [stderr] Compiling derive_builder_core v0.12.0 [INFO] [stderr] Checking indicatif v0.15.0 [INFO] [stderr] Checking uniffi_udl v0.29.4 [INFO] [stderr] Checking polling v3.6.0 [INFO] [stderr] Checking blocking v1.5.1 [INFO] [stderr] Checking thiserror v1.0.61 [INFO] [stderr] Checking dialoguer v0.8.0 [INFO] [stderr] Checking async-io v2.3.2 [INFO] [stderr] Checking comfy-table v2.1.0 [INFO] [stderr] Compiling derive_builder_macro v0.12.0 [INFO] [stderr] Checking async-convert v1.0.0 [INFO] [stderr] Checking derive_builder v0.12.0 [INFO] [stderr] Checking clap v4.5.7 [INFO] [stderr] Checking tokio-util v0.7.10 [INFO] [stderr] Checking tokio-native-tls v0.3.1 [INFO] [stderr] Checking tokio-stream v0.1.17 [INFO] [stderr] Checking backoff v0.4.0 [INFO] [stderr] Checking async-global-executor v2.4.1 [INFO] [stderr] Checking async-std v1.12.0 [INFO] [stderr] Checking tokio-rustls v0.24.1 [INFO] [stderr] Compiling askama_parser v0.13.0 [INFO] [stderr] Compiling basic-toml v0.1.9 [INFO] [stderr] Compiling toml v0.5.11 [INFO] [stderr] Compiling cargo-platform v0.1.8 [INFO] [stderr] Checking h2 v0.3.26 [INFO] [stderr] Checking futures-executor v0.3.30 [INFO] [stderr] Checking futures v0.3.30 [INFO] [stderr] Compiling uniffi_macros v0.29.4 [INFO] [stderr] Checking string_cache v0.8.7 [INFO] [stderr] Checking serde_urlencoded v0.7.1 [INFO] [stderr] Checking secrecy v0.8.0 [INFO] [stderr] Compiling cargo_metadata v0.19.2 [INFO] [stderr] Checking cookie_store v0.20.0 [INFO] [stderr] Compiling askama_derive v0.13.1 [INFO] [stderr] Checking hyper v0.14.28 [INFO] [stderr] Checking scraper v0.19.0 [INFO] [stderr] Checking hyper-tls v0.5.0 [INFO] [stderr] Checking hyper-rustls v0.24.2 [INFO] [stderr] Checking reqwest v0.11.27 [INFO] [stderr] Compiling askama v0.13.1 [INFO] [stderr] Checking uniffi_bindgen v0.29.4 [INFO] [stderr] Checking reqwest-eventsource v0.4.0 [INFO] [stderr] Checking async-openai v0.16.3 [INFO] [stderr] Checking uniffi v0.29.4 [INFO] [stderr] Checking uniffi-bindgen v0.1.0 (/opt/rustwide/workdir/uniffi-bindgen) [INFO] [stderr] Compiling uniffi_build v0.29.4 [INFO] [stderr] Compiling paper v0.1.0 (/opt/rustwide/workdir/paper) [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> paper/src/scrapers/search_scraper.rs:18:13 [INFO] [stdout] | [INFO] [stdout] 18 | configuration: configuration, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `configuration` [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] --> paper/src/scrapers/search_detail_scraper.rs:22:13 [INFO] [stdout] | [INFO] [stdout] 22 | configuration: configuration, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `configuration` [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: redundant field names in struct initialization [INFO] [stdout] --> paper/src/scrapers/search_scraper.rs:18:13 [INFO] [stdout] | [INFO] [stdout] 18 | configuration: configuration, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `configuration` [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] --> paper/src/scrapers/search_detail_scraper.rs:22:13 [INFO] [stdout] | [INFO] [stdout] 22 | configuration: configuration, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `configuration` [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: unnecessary `if let` since only the `Some` variant of the iterator element is used [INFO] [stdout] --> paper/src/api/api_client.rs:37:9 [INFO] [stdout] | [INFO] [stdout] 37 | / for url in urls { [INFO] [stdout] 38 | | if let Some(url) = url { [INFO] [stdout] 39 | | if matches!(APIClient::ping_url(&url).await, Ok(200)) { [INFO] [stdout] 40 | | return Some(url); [INFO] [stdout] ... | [INFO] [stdout] 43 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> paper/src/api/api_client.rs:38:13 [INFO] [stdout] | [INFO] [stdout] 38 | / if let Some(url) = url { [INFO] [stdout] 39 | | if matches!(APIClient::ping_url(&url).await, Ok(200)) { [INFO] [stdout] 40 | | return Some(url); [INFO] [stdout] 41 | | } [INFO] [stdout] 42 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] = note: `#[warn(clippy::manual_flatten)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 37 ~ for url in urls.into_iter().flatten() { [INFO] [stdout] 38 + if matches!(APIClient::ping_url(&url).await, Ok(200)) { [INFO] [stdout] 39 + return Some(url); [INFO] [stdout] 40 + } [INFO] [stdout] 41 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `Recommender` [INFO] [stdout] --> paper/src/api/recommender.rs:48:5 [INFO] [stdout] | [INFO] [stdout] 48 | / pub fn new() -> Self { [INFO] [stdout] 49 | | Self {} [INFO] [stdout] 50 | | } [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] 46 + impl Default for Recommender { [INFO] [stdout] 47 + fn default() -> Self { [INFO] [stdout] 48 + Self::new() [INFO] [stdout] 49 + } [INFO] [stdout] 50 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/authenticators/scrape_authenticator.rs:25:17 [INFO] [stdout] | [INFO] [stdout] 25 | / return match result { [INFO] [stdout] 26 | | Ok(_) => Ok(ValidationStatus::Valid), [INFO] [stdout] 27 | | Err(err) => match err { [INFO] [stdout] 28 | | PaperError::IncorrectCredentials => Ok(ValidationStatus::Invalid), [INFO] [stdout] 29 | | _ => Ok(ValidationStatus::Error(err.to_string())), [INFO] [stdout] 30 | | }, [INFO] [stdout] 31 | | }; [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] 25 ~ match result { [INFO] [stdout] 26 + Ok(_) => Ok(ValidationStatus::Valid), [INFO] [stdout] 27 + Err(err) => match err { [INFO] [stdout] 28 + PaperError::IncorrectCredentials => Ok(ValidationStatus::Invalid), [INFO] [stdout] 29 + _ => Ok(ValidationStatus::Error(err.to_string())), [INFO] [stdout] 30 + }, [INFO] [stdout] 31 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/authenticators/scrape_authenticator.rs:39:17 [INFO] [stdout] | [INFO] [stdout] 39 | / return match result { [INFO] [stdout] 40 | | Ok(signed_in) => Ok(if signed_in { [INFO] [stdout] 41 | | ValidationStatus::Valid [INFO] [stdout] 42 | | } else { [INFO] [stdout] ... | [INFO] [stdout] 45 | | Err(err) => Ok(ValidationStatus::Error(err.to_string())), [INFO] [stdout] 46 | | }; [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] 39 ~ match result { [INFO] [stdout] 40 + Ok(signed_in) => Ok(if signed_in { [INFO] [stdout] 41 + ValidationStatus::Valid [INFO] [stdout] 42 + } else { [INFO] [stdout] 43 + ValidationStatus::Invalid [INFO] [stdout] 44 + }), [INFO] [stdout] 45 + Err(err) => Ok(ValidationStatus::Error(err.to_string())), [INFO] [stdout] 46 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/authenticators/opac_authenticator.rs:32:9 [INFO] [stdout] | [INFO] [stdout] 32 | return scraper.sign_in_account(html_string.as_str()); [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] 32 - return scraper.sign_in_account(html_string.as_str()); [INFO] [stdout] 32 + scraper.sign_in_account(html_string.as_str()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/authenticators/public_hamburg_authenticator.rs:61:13 [INFO] [stdout] | [INFO] [stdout] 61 | return LoginResult::from_public_hamburg_html(html); [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] 61 - return LoginResult::from_public_hamburg_html(html); [INFO] [stdout] 61 + LoginResult::from_public_hamburg_html(html) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/authenticators/public_hamburg_authenticator.rs:63:13 [INFO] [stdout] | [INFO] [stdout] 63 | return Err(PaperError::CredentialsBadInput); [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] 63 - return Err(PaperError::CredentialsBadInput); [INFO] [stdout] 63 + Err(PaperError::CredentialsBadInput) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> paper/src/authenticators/public_hamburg_authenticator.rs:33:16 [INFO] [stdout] | [INFO] [stdout] 33 | if username == "" || password == "" { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `username.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] = note: `#[warn(clippy::comparison_to_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> paper/src/authenticators/public_hamburg_authenticator.rs:33:34 [INFO] [stdout] | [INFO] [stdout] 33 | if username == "" || password == "" { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `password.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/authenticators/public_hamburg_authenticator.rs:80:9 [INFO] [stdout] | [INFO] [stdout] 80 | / return match login_result { [INFO] [stdout] 81 | | Ok(s) => LoansScraper::loans_from_html(s), [INFO] [stdout] 82 | | Err(error) => Err(error), [INFO] [stdout] 83 | | }; [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] 80 ~ match login_result { [INFO] [stdout] 81 + Ok(s) => LoansScraper::loans_from_html(s), [INFO] [stdout] 82 + Err(error) => Err(error), [INFO] [stdout] 83 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `if let` since only the `Some` variant of the iterator element is used [INFO] [stdout] --> paper/src/api/api_client.rs:37:9 [INFO] [stdout] | [INFO] [stdout] 37 | / for url in urls { [INFO] [stdout] 38 | | if let Some(url) = url { [INFO] [stdout] 39 | | if matches!(APIClient::ping_url(&url).await, Ok(200)) { [INFO] [stdout] 40 | | return Some(url); [INFO] [stdout] ... | [INFO] [stdout] 43 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> paper/src/api/api_client.rs:38:13 [INFO] [stdout] | [INFO] [stdout] 38 | / if let Some(url) = url { [INFO] [stdout] 39 | | if matches!(APIClient::ping_url(&url).await, Ok(200)) { [INFO] [stdout] 40 | | return Some(url); [INFO] [stdout] 41 | | } [INFO] [stdout] 42 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] = note: `#[warn(clippy::manual_flatten)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 37 ~ for url in urls.into_iter().flatten() { [INFO] [stdout] 38 + if matches!(APIClient::ping_url(&url).await, Ok(200)) { [INFO] [stdout] 39 + return Some(url); [INFO] [stdout] 40 + } [INFO] [stdout] 41 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> paper/src/authenticators/public_hamburg_authenticator.rs:75:53 [INFO] [stdout] | [INFO] [stdout] 75 | let token = token_scraper.get_request_token(&client).await?; [INFO] [stdout] | ^^^^^^^ help: change this to: `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 expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> paper/src/authenticators/public_hamburg_authenticator.rs:77:54 [INFO] [stdout] | [INFO] [stdout] 77 | .authenticate_public_hamburg_via_cookies(&client, token) [INFO] [stdout] | ^^^^^^^ help: change this to: `client` [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: unneeded `return` statement [INFO] [stdout] --> paper/src/authenticators/public_hamburg_authenticator.rs:101:9 [INFO] [stdout] | [INFO] [stdout] 101 | / return match result { [INFO] [stdout] 102 | | Ok(_) => Ok(request_token), [INFO] [stdout] 103 | | _ => Err(PaperError::GeneralError), [INFO] [stdout] 104 | | }; [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] 101 ~ match result { [INFO] [stdout] 102 + Ok(_) => Ok(request_token), [INFO] [stdout] 103 + _ => Err(PaperError::GeneralError), [INFO] [stdout] 104 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> paper/src/authenticators/public_hamburg_authenticator.rs:96:61 [INFO] [stdout] | [INFO] [stdout] 96 | let request_token = token_scraper.get_request_token(&client).await?; [INFO] [stdout] | ^^^^^^^ help: change this to: `client` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> paper/src/authenticators/public_hamburg_authenticator.rs:98:54 [INFO] [stdout] | [INFO] [stdout] 98 | .authenticate_public_hamburg_via_cookies(&client, request_token.clone()) [INFO] [stdout] | ^^^^^^^ help: change this to: `client` [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: unneeded `return` statement [INFO] [stdout] --> paper/src/authenticators/login_result.rs:27:9 [INFO] [stdout] | [INFO] [stdout] 27 | return Ok(html); [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] 27 - return Ok(html); [INFO] [stdout] 27 + Ok(html) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/html_resource.rs:15:9 [INFO] [stdout] | [INFO] [stdout] 15 | return Ok(response.text().await?); [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] 15 - return Ok(response.text().await?); [INFO] [stdout] 15 + Ok(response.text().await?) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `Recommender` [INFO] [stdout] --> paper/src/api/recommender.rs:48:5 [INFO] [stdout] | [INFO] [stdout] 48 | / pub fn new() -> Self { [INFO] [stdout] 49 | | Self {} [INFO] [stdout] 50 | | } [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] 46 + impl Default for Recommender { [INFO] [stdout] 47 + fn default() -> Self { [INFO] [stdout] 48 + Self::new() [INFO] [stdout] 49 + } [INFO] [stdout] 50 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/authenticators/scrape_authenticator.rs:25:17 [INFO] [stdout] | [INFO] [stdout] 25 | / return match result { [INFO] [stdout] 26 | | Ok(_) => Ok(ValidationStatus::Valid), [INFO] [stdout] 27 | | Err(err) => match err { [INFO] [stdout] 28 | | PaperError::IncorrectCredentials => Ok(ValidationStatus::Invalid), [INFO] [stdout] 29 | | _ => Ok(ValidationStatus::Error(err.to_string())), [INFO] [stdout] 30 | | }, [INFO] [stdout] 31 | | }; [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] 25 ~ match result { [INFO] [stdout] 26 + Ok(_) => Ok(ValidationStatus::Valid), [INFO] [stdout] 27 + Err(err) => match err { [INFO] [stdout] 28 + PaperError::IncorrectCredentials => Ok(ValidationStatus::Invalid), [INFO] [stdout] 29 + _ => Ok(ValidationStatus::Error(err.to_string())), [INFO] [stdout] 30 + }, [INFO] [stdout] 31 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/authenticators/scrape_authenticator.rs:39:17 [INFO] [stdout] | [INFO] [stdout] 39 | / return match result { [INFO] [stdout] 40 | | Ok(signed_in) => Ok(if signed_in { [INFO] [stdout] 41 | | ValidationStatus::Valid [INFO] [stdout] 42 | | } else { [INFO] [stdout] ... | [INFO] [stdout] 45 | | Err(err) => Ok(ValidationStatus::Error(err.to_string())), [INFO] [stdout] 46 | | }; [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] 39 ~ match result { [INFO] [stdout] 40 + Ok(signed_in) => Ok(if signed_in { [INFO] [stdout] 41 + ValidationStatus::Valid [INFO] [stdout] 42 + } else { [INFO] [stdout] 43 + ValidationStatus::Invalid [INFO] [stdout] 44 + }), [INFO] [stdout] 45 + Err(err) => Ok(ValidationStatus::Error(err.to_string())), [INFO] [stdout] 46 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/authenticators/opac_authenticator.rs:32:9 [INFO] [stdout] | [INFO] [stdout] 32 | return scraper.sign_in_account(html_string.as_str()); [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] 32 - return scraper.sign_in_account(html_string.as_str()); [INFO] [stdout] 32 + scraper.sign_in_account(html_string.as_str()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/authenticators/public_hamburg_authenticator.rs:61:13 [INFO] [stdout] | [INFO] [stdout] 61 | return LoginResult::from_public_hamburg_html(html); [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] 61 - return LoginResult::from_public_hamburg_html(html); [INFO] [stdout] 61 + LoginResult::from_public_hamburg_html(html) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/authenticators/public_hamburg_authenticator.rs:63:13 [INFO] [stdout] | [INFO] [stdout] 63 | return Err(PaperError::CredentialsBadInput); [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] 63 - return Err(PaperError::CredentialsBadInput); [INFO] [stdout] 63 + Err(PaperError::CredentialsBadInput) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> paper/src/authenticators/public_hamburg_authenticator.rs:33:16 [INFO] [stdout] | [INFO] [stdout] 33 | if username == "" || password == "" { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `username.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] = note: `#[warn(clippy::comparison_to_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> paper/src/authenticators/public_hamburg_authenticator.rs:33:34 [INFO] [stdout] | [INFO] [stdout] 33 | if username == "" || password == "" { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `password.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/authenticators/public_hamburg_authenticator.rs:80:9 [INFO] [stdout] | [INFO] [stdout] 80 | / return match login_result { [INFO] [stdout] 81 | | Ok(s) => LoansScraper::loans_from_html(s), [INFO] [stdout] 82 | | Err(error) => Err(error), [INFO] [stdout] 83 | | }; [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] 80 ~ match login_result { [INFO] [stdout] 81 + Ok(s) => LoansScraper::loans_from_html(s), [INFO] [stdout] 82 + Err(error) => Err(error), [INFO] [stdout] 83 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> paper/src/authenticators/public_hamburg_authenticator.rs:75:53 [INFO] [stdout] | [INFO] [stdout] 75 | let token = token_scraper.get_request_token(&client).await?; [INFO] [stdout] | ^^^^^^^ help: change this to: `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 expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> paper/src/authenticators/public_hamburg_authenticator.rs:77:54 [INFO] [stdout] | [INFO] [stdout] 77 | .authenticate_public_hamburg_via_cookies(&client, token) [INFO] [stdout] | ^^^^^^^ help: change this to: `client` [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: unneeded `return` statement [INFO] [stdout] --> paper/src/authenticators/public_hamburg_authenticator.rs:101:9 [INFO] [stdout] | [INFO] [stdout] 101 | / return match result { [INFO] [stdout] 102 | | Ok(_) => Ok(request_token), [INFO] [stdout] 103 | | _ => Err(PaperError::GeneralError), [INFO] [stdout] 104 | | }; [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] 101 ~ match result { [INFO] [stdout] 102 + Ok(_) => Ok(request_token), [INFO] [stdout] 103 + _ => Err(PaperError::GeneralError), [INFO] [stdout] 104 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> paper/src/authenticators/public_hamburg_authenticator.rs:96:61 [INFO] [stdout] | [INFO] [stdout] 96 | let request_token = token_scraper.get_request_token(&client).await?; [INFO] [stdout] | ^^^^^^^ help: change this to: `client` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> paper/src/authenticators/public_hamburg_authenticator.rs:98:54 [INFO] [stdout] | [INFO] [stdout] 98 | .authenticate_public_hamburg_via_cookies(&client, request_token.clone()) [INFO] [stdout] | ^^^^^^^ help: change this to: `client` [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: unneeded `return` statement [INFO] [stdout] --> paper/src/authenticators/login_result.rs:27:9 [INFO] [stdout] | [INFO] [stdout] 27 | return Ok(html); [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] 27 - return Ok(html); [INFO] [stdout] 27 + Ok(html) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `AccountInfo` [INFO] [stdout] --> paper/src/model/account_info.rs:36:5 [INFO] [stdout] | [INFO] [stdout] 36 | / pub fn new() -> AccountInfo { [INFO] [stdout] 37 | | AccountInfo { [INFO] [stdout] 38 | | readable_full_name: None, [INFO] [stdout] 39 | | category_name: None, [INFO] [stdout] ... | [INFO] [stdout] 63 | | } [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] help: try adding this [INFO] [stdout] | [INFO] [stdout] 35 + impl Default for AccountInfo { [INFO] [stdout] 36 + fn default() -> Self { [INFO] [stdout] 37 + Self::new() [INFO] [stdout] 38 + } [INFO] [stdout] 39 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/html_resource.rs:15:9 [INFO] [stdout] | [INFO] [stdout] 15 | return Ok(response.text().await?); [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] 15 - return Ok(response.text().await?); [INFO] [stdout] 15 + Ok(response.text().await?) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `ItemAvailability` [INFO] [stdout] --> paper/src/model/item_availability.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | / pub fn new() -> Self { [INFO] [stdout] 10 | | ItemAvailability { [INFO] [stdout] 11 | | availabilities: Vec::new(), [INFO] [stdout] 12 | | } [INFO] [stdout] 13 | | } [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] help: try adding this [INFO] [stdout] | [INFO] [stdout] 8 + impl Default for ItemAvailability { [INFO] [stdout] 9 + fn default() -> Self { [INFO] [stdout] 10 + Self::new() [INFO] [stdout] 11 + } [INFO] [stdout] 12 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `AccountInfo` [INFO] [stdout] --> paper/src/model/account_info.rs:36:5 [INFO] [stdout] | [INFO] [stdout] 36 | / pub fn new() -> AccountInfo { [INFO] [stdout] 37 | | AccountInfo { [INFO] [stdout] 38 | | readable_full_name: None, [INFO] [stdout] 39 | | category_name: None, [INFO] [stdout] ... | [INFO] [stdout] 63 | | } [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] help: try adding this [INFO] [stdout] | [INFO] [stdout] 35 + impl Default for AccountInfo { [INFO] [stdout] 36 + fn default() -> Self { [INFO] [stdout] 37 + Self::new() [INFO] [stdout] 38 + } [INFO] [stdout] 39 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `Loan` [INFO] [stdout] --> paper/src/model/loan.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 19 | / pub fn new() -> Self { [INFO] [stdout] 20 | | Loan { [INFO] [stdout] 21 | | title: "".to_string(), [INFO] [stdout] 22 | | author: "".to_string(), [INFO] [stdout] ... | [INFO] [stdout] 33 | | } [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] help: try adding this [INFO] [stdout] | [INFO] [stdout] 18 + impl Default for Loan { [INFO] [stdout] 19 + fn default() -> Self { [INFO] [stdout] 20 + Self::new() [INFO] [stdout] 21 + } [INFO] [stdout] 22 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `bool` which implements the `Copy` trait [INFO] [stdout] --> paper/src/model/loan.rs:39:24 [INFO] [stdout] | [INFO] [stdout] 39 | can_renew: self.can_renew.clone(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.can_renew` [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: you should consider adding a `Default` implementation for `Account` [INFO] [stdout] --> paper/src/model/account.rs:22:5 [INFO] [stdout] | [INFO] [stdout] 22 | / pub fn new() -> Account { [INFO] [stdout] 23 | | Account { [INFO] [stdout] 24 | | account_id: "".to_string(), [INFO] [stdout] 25 | | name: "".to_string(), [INFO] [stdout] ... | [INFO] [stdout] 34 | | } [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] help: try adding this [INFO] [stdout] | [INFO] [stdout] 21 + impl Default for Account { [INFO] [stdout] 22 + fn default() -> Self { [INFO] [stdout] 23 + Self::new() [INFO] [stdout] 24 + } [INFO] [stdout] 25 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `ItemAvailability` [INFO] [stdout] --> paper/src/model/item_availability.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | / pub fn new() -> Self { [INFO] [stdout] 10 | | ItemAvailability { [INFO] [stdout] 11 | | availabilities: Vec::new(), [INFO] [stdout] 12 | | } [INFO] [stdout] 13 | | } [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] help: try adding this [INFO] [stdout] | [INFO] [stdout] 8 + impl Default for ItemAvailability { [INFO] [stdout] 9 + fn default() -> Self { [INFO] [stdout] 10 + Self::new() [INFO] [stdout] 11 + } [INFO] [stdout] 12 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `SearchResultListItem` [INFO] [stdout] --> paper/src/model/search_result_list_item.rs:14:5 [INFO] [stdout] | [INFO] [stdout] 14 | / pub fn new() -> Self { [INFO] [stdout] 15 | | let identifier = Uuid::new_v4().to_string(); [INFO] [stdout] 16 | | let title = None; [INFO] [stdout] 17 | | let subtitle = None; [INFO] [stdout] ... | [INFO] [stdout] 30 | | } [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] help: try adding this [INFO] [stdout] | [INFO] [stdout] 13 + impl Default for SearchResultListItem { [INFO] [stdout] 14 + fn default() -> Self { [INFO] [stdout] 15 + Self::new() [INFO] [stdout] 16 + } [INFO] [stdout] 17 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `LoanBuilder` [INFO] [stdout] --> paper/src/model/loan_builder.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 15 | / pub fn new() -> LoanBuilder { [INFO] [stdout] 16 | | LoanBuilder { [INFO] [stdout] 17 | | title: None, [INFO] [stdout] 18 | | author: None, [INFO] [stdout] ... | [INFO] [stdout] 26 | | } [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] help: try adding this [INFO] [stdout] | [INFO] [stdout] 14 + impl Default for LoanBuilder { [INFO] [stdout] 15 + fn default() -> Self { [INFO] [stdout] 16 + Self::new() [INFO] [stdout] 17 + } [INFO] [stdout] 18 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `Loan` [INFO] [stdout] --> paper/src/model/loan.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 19 | / pub fn new() -> Self { [INFO] [stdout] 20 | | Loan { [INFO] [stdout] 21 | | title: "".to_string(), [INFO] [stdout] 22 | | author: "".to_string(), [INFO] [stdout] ... | [INFO] [stdout] 33 | | } [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] help: try adding this [INFO] [stdout] | [INFO] [stdout] 18 + impl Default for Loan { [INFO] [stdout] 19 + fn default() -> Self { [INFO] [stdout] 20 + Self::new() [INFO] [stdout] 21 + } [INFO] [stdout] 22 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `bool` which implements the `Copy` trait [INFO] [stdout] --> paper/src/model/loan.rs:39:24 [INFO] [stdout] | [INFO] [stdout] 39 | can_renew: self.can_renew.clone(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.can_renew` [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: you should consider adding a `Default` implementation for `Account` [INFO] [stdout] --> paper/src/model/account.rs:22:5 [INFO] [stdout] | [INFO] [stdout] 22 | / pub fn new() -> Account { [INFO] [stdout] 23 | | Account { [INFO] [stdout] 24 | | account_id: "".to_string(), [INFO] [stdout] 25 | | name: "".to_string(), [INFO] [stdout] ... | [INFO] [stdout] 34 | | } [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] help: try adding this [INFO] [stdout] | [INFO] [stdout] 21 + impl Default for Account { [INFO] [stdout] 22 + fn default() -> Self { [INFO] [stdout] 23 + Self::new() [INFO] [stdout] 24 + } [INFO] [stdout] 25 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> paper/src/scrapers/library_scraper.rs:75:56 [INFO] [stdout] | [INFO] [stdout] 75 | let authenticated = authenticator.authenticate(&client).await?; [INFO] [stdout] | ^^^^^^^ help: change this to: `client` [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: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/library_scraper.rs:141:9 [INFO] [stdout] | [INFO] [stdout] 141 | return Err(PaperError::GeneralError); [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] 141 - return Err(PaperError::GeneralError); [INFO] [stdout] 141 + Err(PaperError::GeneralError) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> paper/src/scrapers/library_scraper.rs:130:47 [INFO] [stdout] | [INFO] [stdout] 130 | match BalanceScraper::new(&client).scrape_balance().await { [INFO] [stdout] | ^^^^^^^ help: change this to: `client` [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: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/search_detail_scraper.rs:67:9 [INFO] [stdout] | [INFO] [stdout] 67 | / return match detail { [INFO] [stdout] 68 | | Ok(d) => Ok(for_loan.with_details(d)), [INFO] [stdout] 69 | | Err(e) => Err(e), [INFO] [stdout] 70 | | }; [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] 67 ~ match detail { [INFO] [stdout] 68 + Ok(d) => Ok(for_loan.with_details(d)), [INFO] [stdout] 69 + Err(e) => Err(e), [INFO] [stdout] 70 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> paper/src/scrapers/search_detail_scraper.rs:60:17 [INFO] [stdout] | [INFO] [stdout] 60 | / for_loan [INFO] [stdout] 61 | | .search_result_detail_url [INFO] [stdout] 62 | | .clone() [INFO] [stdout] 63 | | .ok_or_else(|| PaperError::ParseErrorSearchResultDetail)?, [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 `ok_or` instead [INFO] [stdout] | [INFO] [stdout] 63 - .ok_or_else(|| PaperError::ParseErrorSearchResultDetail)?, [INFO] [stdout] 63 + .ok_or(PaperError::ParseErrorSearchResultDetail)?, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/opc4v2_13vzg6/opc4v2_13vzg6_search_scraper.rs:29:9 [INFO] [stdout] | [INFO] [stdout] 29 | return Err(PaperError::SearchFailed); [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] 29 - return Err(PaperError::SearchFailed); [INFO] [stdout] 29 + Err(PaperError::SearchFailed) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `SearchResultListItem` [INFO] [stdout] --> paper/src/model/search_result_list_item.rs:14:5 [INFO] [stdout] | [INFO] [stdout] 14 | / pub fn new() -> Self { [INFO] [stdout] 15 | | let identifier = Uuid::new_v4().to_string(); [INFO] [stdout] 16 | | let title = None; [INFO] [stdout] 17 | | let subtitle = None; [INFO] [stdout] ... | [INFO] [stdout] 30 | | } [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] help: try adding this [INFO] [stdout] | [INFO] [stdout] 13 + impl Default for SearchResultListItem { [INFO] [stdout] 14 + fn default() -> Self { [INFO] [stdout] 15 + Self::new() [INFO] [stdout] 16 + } [INFO] [stdout] 17 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `LoanBuilder` [INFO] [stdout] --> paper/src/model/loan_builder.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 15 | / pub fn new() -> LoanBuilder { [INFO] [stdout] 16 | | LoanBuilder { [INFO] [stdout] 17 | | title: None, [INFO] [stdout] 18 | | author: None, [INFO] [stdout] ... | [INFO] [stdout] 26 | | } [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] help: try adding this [INFO] [stdout] | [INFO] [stdout] 14 + impl Default for LoanBuilder { [INFO] [stdout] 15 + fn default() -> Self { [INFO] [stdout] 16 + Self::new() [INFO] [stdout] 17 + } [INFO] [stdout] 18 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/opc4v2_13vzg6/opc4v2_13vzg6_search_scraper.rs:102:13 [INFO] [stdout] | [INFO] [stdout] 102 | / return Ok(SearchResultList { [INFO] [stdout] 103 | | text: search_term, [INFO] [stdout] 104 | | next_page_url, [INFO] [stdout] 105 | | result_count: hits, [INFO] [stdout] 106 | | items, [INFO] [stdout] 107 | | }); [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] 102 ~ Ok(SearchResultList { [INFO] [stdout] 103 + text: search_term, [INFO] [stdout] 104 + next_page_url, [INFO] [stdout] 105 + result_count: hits, [INFO] [stdout] 106 + items, [INFO] [stdout] 107 ~ }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/opc4v2_13vzg6/opc4v2_13vzg6_search_scraper.rs:109:13 [INFO] [stdout] | [INFO] [stdout] 109 | return Err(PaperError::SearchFailed); [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] 109 - return Err(PaperError::SearchFailed); [INFO] [stdout] 109 + Err(PaperError::SearchFailed) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(f)` on an `Option` value where `f` is a closure that returns the unit type `()` [INFO] [stdout] --> paper/src/scrapers/opc4v2_13vzg6/opc4v2_13vzg6_search_scraper.rs:71:21 [INFO] [stdout] | [INFO] [stdout] 71 | / text_nodes.next().map(|t| { [INFO] [stdout] 72 | | println!("Title: {:?}", t.text()); [INFO] [stdout] 73 | | list_item.title = t.text().map(|t| t.trim().to_string()); [INFO] [stdout] 74 | | }); [INFO] [stdout] | |______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stdout] = note: `#[warn(clippy::option_map_unit_fn)]` on by default [INFO] [stdout] help: use `if let` instead [INFO] [stdout] | [INFO] [stdout] 71 - text_nodes.next().map(|t| { [INFO] [stdout] 72 - println!("Title: {:?}", t.text()); [INFO] [stdout] 73 - list_item.title = t.text().map(|t| t.trim().to_string()); [INFO] [stdout] 74 - }); [INFO] [stdout] 71 + if let Some(t) = text_nodes.next() { ... } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(f)` on an `Option` value where `f` is a closure that returns the unit type `()` [INFO] [stdout] --> paper/src/scrapers/opc4v2_13vzg6/opc4v2_13vzg6_search_scraper.rs:77:21 [INFO] [stdout] | [INFO] [stdout] 77 | / text_nodes.next().map(|t| { [INFO] [stdout] 78 | | println!("Subtitle: {:?}", t.text()); [INFO] [stdout] 79 | | list_item.subtitle = t.text().map(|t| t.trim().to_string()); [INFO] [stdout] 80 | | }); [INFO] [stdout] | |______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stdout] help: use `if let` instead [INFO] [stdout] | [INFO] [stdout] 77 - text_nodes.next().map(|t| { [INFO] [stdout] 78 - println!("Subtitle: {:?}", t.text()); [INFO] [stdout] 79 - list_item.subtitle = t.text().map(|t| t.trim().to_string()); [INFO] [stdout] 80 - }); [INFO] [stdout] 77 + if let Some(t) = text_nodes.next() { ... } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/opc4v2_13vzg6/opc4v2_13vzg6_account_scraper.rs:29:9 [INFO] [stdout] | [INFO] [stdout] 29 | return Ok(account); [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] 29 - return Ok(account); [INFO] [stdout] 29 + Ok(account) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/opc4v2_13vzg6/opc4v2_13vzg6_account_scraper.rs:45:9 [INFO] [stdout] | [INFO] [stdout] 45 | return Ok(signed_in); [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] 45 - return Ok(signed_in); [INFO] [stdout] 45 + Ok(signed_in) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/opc4v2_13vzg6/opc4v2_13vzg6_loan_scraper.rs:130:9 [INFO] [stdout] | [INFO] [stdout] 130 | return loans; [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] 130 - return loans; [INFO] [stdout] 130 + loans [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/public_hamburg/hamburg_public_search_scraper.rs:37:9 [INFO] [stdout] | [INFO] [stdout] 37 | return Err(PaperError::SearchFailed); [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] 37 - return Err(PaperError::SearchFailed); [INFO] [stdout] 37 + Err(PaperError::SearchFailed) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/public_hamburg/hamburg_public_search_scraper.rs:120:13 [INFO] [stdout] | [INFO] [stdout] 120 | return 0; [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] 120 - return 0; [INFO] [stdout] 120 + 0 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/public_hamburg/hamburg_public_search_scraper.rs:127:13 [INFO] [stdout] | [INFO] [stdout] 127 | return number.unwrap_or(0); [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] 127 - return number.unwrap_or(0); [INFO] [stdout] 127 + number.unwrap_or(0) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> paper/src/scrapers/library_scraper.rs:75:56 [INFO] [stdout] | [INFO] [stdout] 75 | let authenticated = authenticator.authenticate(&client).await?; [INFO] [stdout] | ^^^^^^^ help: change this to: `client` [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: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/library_scraper.rs:141:9 [INFO] [stdout] | [INFO] [stdout] 141 | return Err(PaperError::GeneralError); [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] 141 - return Err(PaperError::GeneralError); [INFO] [stdout] 141 + Err(PaperError::GeneralError) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> paper/src/scrapers/library_scraper.rs:130:47 [INFO] [stdout] | [INFO] [stdout] 130 | match BalanceScraper::new(&client).scrape_balance().await { [INFO] [stdout] | ^^^^^^^ help: change this to: `client` [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: comparison to empty slice [INFO] [stdout] --> paper/src/scrapers/public_hamburg/hamburg_public_search_detail_scraper.rs:43:20 [INFO] [stdout] | [INFO] [stdout] 43 | if label != "" { [INFO] [stdout] | ^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!label.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/public_hamburg/public_hamburg_account_scraper.rs:113:9 [INFO] [stdout] | [INFO] [stdout] 113 | return Ok(account); [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] 113 - return Ok(account); [INFO] [stdout] 113 + Ok(account) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.filter_map(..)` can be written more simply using `.map(..)` [INFO] [stdout] --> paper/src/scrapers/public_hamburg/public_hamburg_account_scraper.rs:33:14 [INFO] [stdout] | [INFO] [stdout] 33 | .filter_map(|info| { [INFO] [stdout] | ______________^ [INFO] [stdout] 34 | | return Some(Notification { [INFO] [stdout] 35 | | message: HTMLResource::get_text_from_element(info), [INFO] [stdout] 36 | | notification_type: NotificationType::Info, [INFO] [stdout] 37 | | }); [INFO] [stdout] 38 | | }) [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_filter_map [INFO] [stdout] = note: `#[warn(clippy::unnecessary_filter_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/public_hamburg/public_hamburg_account_scraper.rs:34:17 [INFO] [stdout] | [INFO] [stdout] 34 | / return Some(Notification { [INFO] [stdout] 35 | | message: HTMLResource::get_text_from_element(info), [INFO] [stdout] 36 | | notification_type: NotificationType::Info, [INFO] [stdout] 37 | | }); [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] 34 ~ Some(Notification { [INFO] [stdout] 35 + message: HTMLResource::get_text_from_element(info), [INFO] [stdout] 36 + notification_type: NotificationType::Info, [INFO] [stdout] 37 ~ }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/public_hamburg/public_hamburg_account_scraper.rs:52:25 [INFO] [stdout] | [INFO] [stdout] 52 | / return Some(Notification { [INFO] [stdout] 53 | | message: HTMLResource::get_text_from_element(paragraph), [INFO] [stdout] 54 | | notification_type: NotificationType::Error, [INFO] [stdout] 55 | | }) [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] 52 ~ Some(Notification { [INFO] [stdout] 53 + message: HTMLResource::get_text_from_element(paragraph), [INFO] [stdout] 54 + notification_type: NotificationType::Error, [INFO] [stdout] 55 + }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/public_hamburg/public_hamburg_account_scraper.rs:57:29 [INFO] [stdout] | [INFO] [stdout] 57 | None => return None, [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] 57 - None => return None, [INFO] [stdout] 57 + None => None, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> paper/src/scrapers/public_hamburg/public_hamburg_account_scraper.rs:96:29 [INFO] [stdout] | [INFO] [stdout] 96 | let label_ref = charge [INFO] [stdout] | _____________________________^ [INFO] [stdout] 97 | | .select(&label_selector) [INFO] [stdout] 98 | | .next() [INFO] [stdout] 99 | | .ok_or_else(|| PaperError::ParseErrorAccountInfoBalance)?; [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 `ok_or` instead [INFO] [stdout] | [INFO] [stdout] 99 - .ok_or_else(|| PaperError::ParseErrorAccountInfoBalance)?; [INFO] [stdout] 99 + .ok_or(PaperError::ParseErrorAccountInfoBalance)?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> paper/src/scrapers/public_hamburg/public_hamburg_account_scraper.rs:104:29 [INFO] [stdout] | [INFO] [stdout] 104 | let value_ref = charge [INFO] [stdout] | _____________________________^ [INFO] [stdout] 105 | | .select(&value_selector) [INFO] [stdout] 106 | | .next() [INFO] [stdout] 107 | | .ok_or_else(|| PaperError::ParseErrorAccountInfoBalance)?; [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 `ok_or` instead [INFO] [stdout] | [INFO] [stdout] 107 - .ok_or_else(|| PaperError::ParseErrorAccountInfoBalance)?; [INFO] [stdout] 107 + .ok_or(PaperError::ParseErrorAccountInfoBalance)?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/public_hamburg/public_hamburg_loans_scraper.rs:102:9 [INFO] [stdout] | [INFO] [stdout] 102 | return Ok(Loans { loans }); [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] 102 - return Ok(Loans { loans }); [INFO] [stdout] 102 + Ok(Loans { loans }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/public_hamburg/renewal_loan_parser.rs:15:17 [INFO] [stdout] | [INFO] [stdout] 15 | / return loans [INFO] [stdout] 16 | | .loans [INFO] [stdout] 17 | | .iter() [INFO] [stdout] 18 | | .find(|loan| loan.item_number == item_number) [INFO] [stdout] ... | [INFO] [stdout] 31 | | }) [INFO] [stdout] 32 | | .ok_or(PaperError::FailedToRenewLoanBecauseItIsNotLoaned); [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] 15 ~ loans [INFO] [stdout] 16 + .loans [INFO] [stdout] 17 + .iter() [INFO] [stdout] 18 + .find(|loan| loan.item_number == item_number) [INFO] [stdout] 19 + .map(|loan| Loan { [INFO] [stdout] 20 + title: loan.title.clone(), [INFO] [stdout] 21 + author: loan.author.clone(), [INFO] [stdout] 22 + can_renew: loan.can_renew, [INFO] [stdout] 23 + renewal_token: loan.renewal_token.clone(), [INFO] [stdout] 24 + renewals_count: loan.renewals_count, [INFO] [stdout] 25 + date_due: loan.date_due.clone(), [INFO] [stdout] 26 + borrowed_at: loan.borrowed_at.clone(), [INFO] [stdout] 27 + item_number: loan.item_number.clone(), [INFO] [stdout] 28 + locked_by_preorder: loan.locked_by_preorder, [INFO] [stdout] 29 + details: SearchResultDetail::new(), // todo: need to get the details of this loan [INFO] [stdout] 30 + search_result_detail_url: None, [INFO] [stdout] 31 + }) [INFO] [stdout] 32 ~ .ok_or(PaperError::FailedToRenewLoanBecauseItIsNotLoaned) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/public_hamburg/renewal_loan_parser.rs:34:18 [INFO] [stdout] | [INFO] [stdout] 34 | _ => return Err(PaperError::FailedToParseRenewedLoan), [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] 34 - _ => return Err(PaperError::FailedToParseRenewedLoan), [INFO] [stdout] 34 + _ => Err(PaperError::FailedToParseRenewedLoan), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/search_detail_scraper.rs:67:9 [INFO] [stdout] | [INFO] [stdout] 67 | / return match detail { [INFO] [stdout] 68 | | Ok(d) => Ok(for_loan.with_details(d)), [INFO] [stdout] 69 | | Err(e) => Err(e), [INFO] [stdout] 70 | | }; [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] 67 ~ match detail { [INFO] [stdout] 68 + Ok(d) => Ok(for_loan.with_details(d)), [INFO] [stdout] 69 + Err(e) => Err(e), [INFO] [stdout] 70 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map_or(None, ..)` on an `Option` value [INFO] [stdout] --> paper/src/scrapers/text_provider.rs:24:13 [INFO] [stdout] | [INFO] [stdout] 24 | / self.select(&s) [INFO] [stdout] 25 | | .next() [INFO] [stdout] 26 | | .map_or(None, |input| input.attr(attribute).map(|f| f.to_string())) [INFO] [stdout] | |___________________________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_or_none [INFO] [stdout] = note: `#[warn(clippy::option_map_or_none)]` on by default [INFO] [stdout] help: consider using `and_then` [INFO] [stdout] | [INFO] [stdout] 24 ~ self.select(&s) [INFO] [stdout] 25 + .next().and_then(|input| input.attr(attribute).map(|f| f.to_string())) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this lifetime isn't used in the impl [INFO] [stdout] --> paper/src/scrapers/text_provider.rs:31:6 [INFO] [stdout] | [INFO] [stdout] 31 | impl<'a> TextProvider for ElementRef<'_> { [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stdout] = note: `#[warn(clippy::extra_unused_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> paper/src/scrapers/search_detail_scraper.rs:60:17 [INFO] [stdout] | [INFO] [stdout] 60 | / for_loan [INFO] [stdout] 61 | | .search_result_detail_url [INFO] [stdout] 62 | | .clone() [INFO] [stdout] 63 | | .ok_or_else(|| PaperError::ParseErrorSearchResultDetail)?, [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 `ok_or` instead [INFO] [stdout] | [INFO] [stdout] 63 - .ok_or_else(|| PaperError::ParseErrorSearchResultDetail)?, [INFO] [stdout] 63 + .ok_or(PaperError::ParseErrorSearchResultDetail)?, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map_or(None, ..)` on an `Option` value [INFO] [stdout] --> paper/src/scrapers/text_provider.rs:46:13 [INFO] [stdout] | [INFO] [stdout] 46 | / self.select(&s) [INFO] [stdout] 47 | | .next() [INFO] [stdout] 48 | | .map_or(None, |input| input.attr(attribute).map(|f| f.to_string())) [INFO] [stdout] | |___________________________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_or_none [INFO] [stdout] help: consider using `and_then` [INFO] [stdout] | [INFO] [stdout] 46 ~ self.select(&s) [INFO] [stdout] 47 + .next().and_then(|input| input.attr(attribute).map(|f| f.to_string())) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/opc4v2_13vzg6/opc4v2_13vzg6_search_scraper.rs:29:9 [INFO] [stdout] | [INFO] [stdout] 29 | return Err(PaperError::SearchFailed); [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] 29 - return Err(PaperError::SearchFailed); [INFO] [stdout] 29 + Err(PaperError::SearchFailed) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/opc4v2_13vzg6/opc4v2_13vzg6_search_scraper.rs:102:13 [INFO] [stdout] | [INFO] [stdout] 102 | / return Ok(SearchResultList { [INFO] [stdout] 103 | | text: search_term, [INFO] [stdout] 104 | | next_page_url, [INFO] [stdout] 105 | | result_count: hits, [INFO] [stdout] 106 | | items, [INFO] [stdout] 107 | | }); [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] 102 ~ Ok(SearchResultList { [INFO] [stdout] 103 + text: search_term, [INFO] [stdout] 104 + next_page_url, [INFO] [stdout] 105 + result_count: hits, [INFO] [stdout] 106 + items, [INFO] [stdout] 107 ~ }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/opc4v2_13vzg6/opc4v2_13vzg6_search_scraper.rs:109:13 [INFO] [stdout] | [INFO] [stdout] 109 | return Err(PaperError::SearchFailed); [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] 109 - return Err(PaperError::SearchFailed); [INFO] [stdout] 109 + Err(PaperError::SearchFailed) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(f)` on an `Option` value where `f` is a closure that returns the unit type `()` [INFO] [stdout] --> paper/src/scrapers/opc4v2_13vzg6/opc4v2_13vzg6_search_scraper.rs:71:21 [INFO] [stdout] | [INFO] [stdout] 71 | / text_nodes.next().map(|t| { [INFO] [stdout] 72 | | println!("Title: {:?}", t.text()); [INFO] [stdout] 73 | | list_item.title = t.text().map(|t| t.trim().to_string()); [INFO] [stdout] 74 | | }); [INFO] [stdout] | |______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stdout] = note: `#[warn(clippy::option_map_unit_fn)]` on by default [INFO] [stdout] help: use `if let` instead [INFO] [stdout] | [INFO] [stdout] 71 - text_nodes.next().map(|t| { [INFO] [stdout] 72 - println!("Title: {:?}", t.text()); [INFO] [stdout] 73 - list_item.title = t.text().map(|t| t.trim().to_string()); [INFO] [stdout] 74 - }); [INFO] [stdout] 71 + if let Some(t) = text_nodes.next() { ... } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(f)` on an `Option` value where `f` is a closure that returns the unit type `()` [INFO] [stdout] --> paper/src/scrapers/opc4v2_13vzg6/opc4v2_13vzg6_search_scraper.rs:77:21 [INFO] [stdout] | [INFO] [stdout] 77 | / text_nodes.next().map(|t| { [INFO] [stdout] 78 | | println!("Subtitle: {:?}", t.text()); [INFO] [stdout] 79 | | list_item.subtitle = t.text().map(|t| t.trim().to_string()); [INFO] [stdout] 80 | | }); [INFO] [stdout] | |______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stdout] help: use `if let` instead [INFO] [stdout] | [INFO] [stdout] 77 - text_nodes.next().map(|t| { [INFO] [stdout] 78 - println!("Subtitle: {:?}", t.text()); [INFO] [stdout] 79 - list_item.subtitle = t.text().map(|t| t.trim().to_string()); [INFO] [stdout] 80 - }); [INFO] [stdout] 77 + if let Some(t) = text_nodes.next() { ... } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/token_scraper.rs:29:17 [INFO] [stdout] | [INFO] [stdout] 29 | / return input [INFO] [stdout] 30 | | .value() [INFO] [stdout] 31 | | .attr("value") [INFO] [stdout] 32 | | .map(|x| x.to_string()) [INFO] [stdout] 33 | | .ok_or_else(|| PaperError::GeneralError); [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] 29 ~ input [INFO] [stdout] 30 + .value() [INFO] [stdout] 31 + .attr("value") [INFO] [stdout] 32 + .map(|x| x.to_string()) [INFO] [stdout] 33 ~ .ok_or_else(|| PaperError::GeneralError) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> paper/src/token_scraper.rs:24:29 [INFO] [stdout] | [INFO] [stdout] 24 | let input = document [INFO] [stdout] | _____________________________^ [INFO] [stdout] 25 | | .select(&selector) [INFO] [stdout] 26 | | .next() [INFO] [stdout] 27 | | .ok_or_else(|| PaperError::GeneralError)?; [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 `ok_or` instead [INFO] [stdout] | [INFO] [stdout] 27 - .ok_or_else(|| PaperError::GeneralError)?; [INFO] [stdout] 27 + .ok_or(PaperError::GeneralError)?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> paper/src/token_scraper.rs:29:24 [INFO] [stdout] | [INFO] [stdout] 29 | return input [INFO] [stdout] | ________________________^ [INFO] [stdout] 30 | | .value() [INFO] [stdout] 31 | | .attr("value") [INFO] [stdout] 32 | | .map(|x| x.to_string()) [INFO] [stdout] 33 | | .ok_or_else(|| PaperError::GeneralError); [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 `ok_or` instead [INFO] [stdout] | [INFO] [stdout] 33 - .ok_or_else(|| PaperError::GeneralError); [INFO] [stdout] 33 + .ok_or(PaperError::GeneralError); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/opc4v2_13vzg6/opc4v2_13vzg6_account_scraper.rs:29:9 [INFO] [stdout] | [INFO] [stdout] 29 | return Ok(account); [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] 29 - return Ok(account); [INFO] [stdout] 29 + Ok(account) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/opc4v2_13vzg6/opc4v2_13vzg6_account_scraper.rs:45:9 [INFO] [stdout] | [INFO] [stdout] 45 | return Ok(signed_in); [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] 45 - return Ok(signed_in); [INFO] [stdout] 45 + Ok(signed_in) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/opc4v2_13vzg6/opc4v2_13vzg6_loan_scraper.rs:130:9 [INFO] [stdout] | [INFO] [stdout] 130 | return loans; [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] 130 - return loans; [INFO] [stdout] 130 + loans [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> paper/src/scrapers/opc4v2_13vzg6/opc4v2_13vzg6_loan_scraper.rs:151:9 [INFO] [stdout] | [INFO] [stdout] 151 | assert_eq!(loans.loans.first().unwrap().can_renew, true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] = note: `#[warn(clippy::bool_assert_comparison)]` on by default [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 151 - assert_eq!(loans.loans.first().unwrap().can_renew, true); [INFO] [stdout] 151 + assert!(loans.loans.first().unwrap().can_renew); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/public_hamburg/hamburg_public_search_scraper.rs:37:9 [INFO] [stdout] | [INFO] [stdout] 37 | return Err(PaperError::SearchFailed); [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] 37 - return Err(PaperError::SearchFailed); [INFO] [stdout] 37 + Err(PaperError::SearchFailed) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/public_hamburg/hamburg_public_search_scraper.rs:120:13 [INFO] [stdout] | [INFO] [stdout] 120 | return 0; [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] 120 - return 0; [INFO] [stdout] 120 + 0 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/public_hamburg/hamburg_public_search_scraper.rs:127:13 [INFO] [stdout] | [INFO] [stdout] 127 | return number.unwrap_or(0); [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] 127 - return number.unwrap_or(0); [INFO] [stdout] 127 + number.unwrap_or(0) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> paper/src/scrapers/public_hamburg/hamburg_public_search_detail_scraper.rs:43:20 [INFO] [stdout] | [INFO] [stdout] 43 | if label != "" { [INFO] [stdout] | ^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!label.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/public_hamburg/public_hamburg_account_scraper.rs:113:9 [INFO] [stdout] | [INFO] [stdout] 113 | return Ok(account); [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] 113 - return Ok(account); [INFO] [stdout] 113 + Ok(account) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.filter_map(..)` can be written more simply using `.map(..)` [INFO] [stdout] --> paper/src/scrapers/public_hamburg/public_hamburg_account_scraper.rs:33:14 [INFO] [stdout] | [INFO] [stdout] 33 | .filter_map(|info| { [INFO] [stdout] | ______________^ [INFO] [stdout] 34 | | return Some(Notification { [INFO] [stdout] 35 | | message: HTMLResource::get_text_from_element(info), [INFO] [stdout] 36 | | notification_type: NotificationType::Info, [INFO] [stdout] 37 | | }); [INFO] [stdout] 38 | | }) [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_filter_map [INFO] [stdout] = note: `#[warn(clippy::unnecessary_filter_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/public_hamburg/public_hamburg_account_scraper.rs:34:17 [INFO] [stdout] | [INFO] [stdout] 34 | / return Some(Notification { [INFO] [stdout] 35 | | message: HTMLResource::get_text_from_element(info), [INFO] [stdout] 36 | | notification_type: NotificationType::Info, [INFO] [stdout] 37 | | }); [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] 34 ~ Some(Notification { [INFO] [stdout] 35 + message: HTMLResource::get_text_from_element(info), [INFO] [stdout] 36 + notification_type: NotificationType::Info, [INFO] [stdout] 37 ~ }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Checking paper-bin v0.1.0 (/opt/rustwide/workdir/paper-bin) [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/public_hamburg/public_hamburg_account_scraper.rs:52:25 [INFO] [stdout] | [INFO] [stdout] 52 | / return Some(Notification { [INFO] [stdout] 53 | | message: HTMLResource::get_text_from_element(paragraph), [INFO] [stdout] 54 | | notification_type: NotificationType::Error, [INFO] [stdout] 55 | | }) [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] 52 ~ Some(Notification { [INFO] [stdout] 53 + message: HTMLResource::get_text_from_element(paragraph), [INFO] [stdout] 54 + notification_type: NotificationType::Error, [INFO] [stdout] 55 + }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/public_hamburg/public_hamburg_account_scraper.rs:57:29 [INFO] [stdout] | [INFO] [stdout] 57 | None => return None, [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] 57 - None => return None, [INFO] [stdout] 57 + None => None, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> paper/src/scrapers/public_hamburg/public_hamburg_account_scraper.rs:96:29 [INFO] [stdout] | [INFO] [stdout] 96 | let label_ref = charge [INFO] [stdout] | _____________________________^ [INFO] [stdout] 97 | | .select(&label_selector) [INFO] [stdout] 98 | | .next() [INFO] [stdout] 99 | | .ok_or_else(|| PaperError::ParseErrorAccountInfoBalance)?; [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 `ok_or` instead [INFO] [stdout] | [INFO] [stdout] 99 - .ok_or_else(|| PaperError::ParseErrorAccountInfoBalance)?; [INFO] [stdout] 99 + .ok_or(PaperError::ParseErrorAccountInfoBalance)?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> paper/src/scrapers/public_hamburg/public_hamburg_account_scraper.rs:104:29 [INFO] [stdout] | [INFO] [stdout] 104 | let value_ref = charge [INFO] [stdout] | _____________________________^ [INFO] [stdout] 105 | | .select(&value_selector) [INFO] [stdout] 106 | | .next() [INFO] [stdout] 107 | | .ok_or_else(|| PaperError::ParseErrorAccountInfoBalance)?; [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 `ok_or` instead [INFO] [stdout] | [INFO] [stdout] 107 - .ok_or_else(|| PaperError::ParseErrorAccountInfoBalance)?; [INFO] [stdout] 107 + .ok_or(PaperError::ParseErrorAccountInfoBalance)?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/public_hamburg/public_hamburg_loans_scraper.rs:102:9 [INFO] [stdout] | [INFO] [stdout] 102 | return Ok(Loans { loans }); [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] 102 - return Ok(Loans { loans }); [INFO] [stdout] 102 + Ok(Loans { loans }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `.iter().count()` on a `Vec` [INFO] [stdout] --> paper/src/scrapers/public_hamburg/public_hamburg_loans_scraper.rs:268:20 [INFO] [stdout] | [INFO] [stdout] 268 | assert_eq!(loans.loans.iter().count(), 4) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `loans.loans.len()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_count [INFO] [stdout] = note: `#[warn(clippy::iter_count)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> paper/src/scrapers/public_hamburg/public_hamburg_loans_scraper.rs:284:9 [INFO] [stdout] | [INFO] [stdout] 284 | assert_eq!(overdue_loan.can_renew, true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 284 - assert_eq!(overdue_loan.can_renew, true); [INFO] [stdout] 284 + assert!(overdue_loan.can_renew); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> paper/src/scrapers/public_hamburg/public_hamburg_loans_scraper.rs:285:9 [INFO] [stdout] | [INFO] [stdout] 285 | assert_eq!(overdue_loan.locked_by_preorder, false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 285 - assert_eq!(overdue_loan.locked_by_preorder, false); [INFO] [stdout] 285 + assert!(!overdue_loan.locked_by_preorder); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> paper/src/scrapers/public_hamburg/public_hamburg_loans_scraper.rs:296:9 [INFO] [stdout] | [INFO] [stdout] 296 | assert_eq!(loans.loans[0].locked_by_preorder, true) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 296 - assert_eq!(loans.loans[0].locked_by_preorder, true) [INFO] [stdout] 296 + assert!(loans.loans[0].locked_by_preorder) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/public_hamburg/renewal_loan_parser.rs:15:17 [INFO] [stdout] | [INFO] [stdout] 15 | / return loans [INFO] [stdout] 16 | | .loans [INFO] [stdout] 17 | | .iter() [INFO] [stdout] 18 | | .find(|loan| loan.item_number == item_number) [INFO] [stdout] ... | [INFO] [stdout] 31 | | }) [INFO] [stdout] 32 | | .ok_or(PaperError::FailedToRenewLoanBecauseItIsNotLoaned); [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] 15 ~ loans [INFO] [stdout] 16 + .loans [INFO] [stdout] 17 + .iter() [INFO] [stdout] 18 + .find(|loan| loan.item_number == item_number) [INFO] [stdout] 19 + .map(|loan| Loan { [INFO] [stdout] 20 + title: loan.title.clone(), [INFO] [stdout] 21 + author: loan.author.clone(), [INFO] [stdout] 22 + can_renew: loan.can_renew, [INFO] [stdout] 23 + renewal_token: loan.renewal_token.clone(), [INFO] [stdout] 24 + renewals_count: loan.renewals_count, [INFO] [stdout] 25 + date_due: loan.date_due.clone(), [INFO] [stdout] 26 + borrowed_at: loan.borrowed_at.clone(), [INFO] [stdout] 27 + item_number: loan.item_number.clone(), [INFO] [stdout] 28 + locked_by_preorder: loan.locked_by_preorder, [INFO] [stdout] 29 + details: SearchResultDetail::new(), // todo: need to get the details of this loan [INFO] [stdout] 30 + search_result_detail_url: None, [INFO] [stdout] 31 + }) [INFO] [stdout] 32 ~ .ok_or(PaperError::FailedToRenewLoanBecauseItIsNotLoaned) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/scrapers/public_hamburg/renewal_loan_parser.rs:34:18 [INFO] [stdout] | [INFO] [stdout] 34 | _ => return Err(PaperError::FailedToParseRenewedLoan), [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] 34 - _ => return Err(PaperError::FailedToParseRenewedLoan), [INFO] [stdout] 34 + _ => Err(PaperError::FailedToParseRenewedLoan), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> paper/src/scrapers/public_hamburg/renewal_loan_parser.rs:52:9 [INFO] [stdout] | [INFO] [stdout] 52 | assert_eq!(loan.can_renew, true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 52 - assert_eq!(loan.can_renew, true); [INFO] [stdout] 52 + assert!(loan.can_renew); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map_or(None, ..)` on an `Option` value [INFO] [stdout] --> paper/src/scrapers/text_provider.rs:24:13 [INFO] [stdout] | [INFO] [stdout] 24 | / self.select(&s) [INFO] [stdout] 25 | | .next() [INFO] [stdout] 26 | | .map_or(None, |input| input.attr(attribute).map(|f| f.to_string())) [INFO] [stdout] | |___________________________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_or_none [INFO] [stdout] = note: `#[warn(clippy::option_map_or_none)]` on by default [INFO] [stdout] help: consider using `and_then` [INFO] [stdout] | [INFO] [stdout] 24 ~ self.select(&s) [INFO] [stdout] 25 + .next().and_then(|input| input.attr(attribute).map(|f| f.to_string())) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this lifetime isn't used in the impl [INFO] [stdout] --> paper/src/scrapers/text_provider.rs:31:6 [INFO] [stdout] | [INFO] [stdout] 31 | impl<'a> TextProvider for ElementRef<'_> { [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stdout] = note: `#[warn(clippy::extra_unused_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map_or(None, ..)` on an `Option` value [INFO] [stdout] --> paper/src/scrapers/text_provider.rs:46:13 [INFO] [stdout] | [INFO] [stdout] 46 | / self.select(&s) [INFO] [stdout] 47 | | .next() [INFO] [stdout] 48 | | .map_or(None, |input| input.attr(attribute).map(|f| f.to_string())) [INFO] [stdout] | |___________________________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_or_none [INFO] [stdout] help: consider using `and_then` [INFO] [stdout] | [INFO] [stdout] 46 ~ self.select(&s) [INFO] [stdout] 47 + .next().and_then(|input| input.attr(attribute).map(|f| f.to_string())) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> paper/src/token_scraper.rs:29:17 [INFO] [stdout] | [INFO] [stdout] 29 | / return input [INFO] [stdout] 30 | | .value() [INFO] [stdout] 31 | | .attr("value") [INFO] [stdout] 32 | | .map(|x| x.to_string()) [INFO] [stdout] 33 | | .ok_or_else(|| PaperError::GeneralError); [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] 29 ~ input [INFO] [stdout] 30 + .value() [INFO] [stdout] 31 + .attr("value") [INFO] [stdout] 32 + .map(|x| x.to_string()) [INFO] [stdout] 33 ~ .ok_or_else(|| PaperError::GeneralError) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> paper/src/token_scraper.rs:24:29 [INFO] [stdout] | [INFO] [stdout] 24 | let input = document [INFO] [stdout] | _____________________________^ [INFO] [stdout] 25 | | .select(&selector) [INFO] [stdout] 26 | | .next() [INFO] [stdout] 27 | | .ok_or_else(|| PaperError::GeneralError)?; [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 `ok_or` instead [INFO] [stdout] | [INFO] [stdout] 27 - .ok_or_else(|| PaperError::GeneralError)?; [INFO] [stdout] 27 + .ok_or(PaperError::GeneralError)?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> paper/src/token_scraper.rs:29:24 [INFO] [stdout] | [INFO] [stdout] 29 | return input [INFO] [stdout] | ________________________^ [INFO] [stdout] 30 | | .value() [INFO] [stdout] 31 | | .attr("value") [INFO] [stdout] 32 | | .map(|x| x.to_string()) [INFO] [stdout] 33 | | .ok_or_else(|| PaperError::GeneralError); [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 `ok_or` instead [INFO] [stdout] | [INFO] [stdout] 33 - .ok_or_else(|| PaperError::GeneralError); [INFO] [stdout] 33 + .ok_or(PaperError::GeneralError); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 43s [INFO] running `Command { std: "docker" "inspect" "e8c8c398f3c224240aaad2bd518abd3162b3a7c96916c00b4c1cbe82c1eb77f5", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "e8c8c398f3c224240aaad2bd518abd3162b3a7c96916c00b4c1cbe82c1eb77f5", kill_on_drop: false }` [INFO] [stdout] e8c8c398f3c224240aaad2bd518abd3162b3a7c96916c00b4c1cbe82c1eb77f5