[INFO] cloning repository https://github.com/zippy1978/socli [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/zippy1978/socli" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fzippy1978%2Fsocli", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fzippy1978%2Fsocli'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 3e0cb8de1b119cf05743ac6c5e8452dfcd52b161 [INFO] linting zippy1978/socli against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fzippy1978%2Fsocli" "/workspace/builds/worker-3-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/zippy1978/socli [INFO] finished tweaking git repo https://github.com/zippy1978/socli [INFO] tweaked toml for git repo https://github.com/zippy1978/socli written to /workspace/builds/worker-3-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/zippy1978/socli 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/zippy1978/socli already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Updating git repository `https://github.com/zippy1978/quartermaster.git` [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded redox_termios v0.1.2 [INFO] [stderr] Downloaded is-terminal v0.4.1 [INFO] [stderr] Downloaded deranged v0.3.7 [INFO] [stderr] Downloaded indoc v2.0.3 [INFO] [stderr] Downloaded dilib v0.2.0 [INFO] [stderr] Downloaded cxxbridge-flags v1.0.82 [INFO] [stderr] Downloaded deadqueue v0.2.4 [INFO] [stderr] Downloaded clap_derive v4.0.21 [INFO] [stderr] Downloaded eyre v0.6.8 [INFO] [stderr] Downloaded io-lifetimes v1.0.3 [INFO] [stderr] Downloaded graphql-parser v0.4.0 [INFO] [stderr] Downloaded async-trait v0.1.59 [INFO] [stderr] Downloaded rquickjs-core v0.3.1 [INFO] [stderr] Downloaded cxx v1.0.82 [INFO] [stderr] Downloaded time v0.3.25 [INFO] [stderr] Downloaded relative-path v1.7.2 [INFO] [stderr] Downloaded clap v4.0.29 [INFO] [stderr] Downloaded rquickjs-macro v0.3.1 [INFO] [stderr] Downloaded cxxbridge-macro v1.0.82 [INFO] [stderr] Downloaded rustix v0.36.4 [INFO] [stderr] Downloaded termion v1.5.6 [INFO] [stderr] Downloaded rquickjs v0.3.1 [INFO] [stderr] Downloaded cxx-build v1.0.82 [INFO] [stderr] Downloaded rquickjs-sys v0.3.1 [INFO] [stderr] Downloaded linux-raw-sys v0.1.3 [INFO] [stderr] Downloaded tui-logger v0.9.6 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-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] bcb870b3f17ab22bda05781a5c20cfb3b1eb14d6740633512d96c164d26620c8 [INFO] running `Command { std: "docker" "start" "-a" "bcb870b3f17ab22bda05781a5c20cfb3b1eb14d6740633512d96c164d26620c8", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "bcb870b3f17ab22bda05781a5c20cfb3b1eb14d6740633512d96c164d26620c8", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "bcb870b3f17ab22bda05781a5c20cfb3b1eb14d6740633512d96c164d26620c8", kill_on_drop: false }` [INFO] [stdout] bcb870b3f17ab22bda05781a5c20cfb3b1eb14d6740633512d96c164d26620c8 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-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] 4cd481aace66bc9267656eeee7a57448469e8f9540ec326a089faf4a8cfb3bf2 [INFO] running `Command { std: "docker" "start" "-a" "4cd481aace66bc9267656eeee7a57448469e8f9540ec326a089faf4a8cfb3bf2", kill_on_drop: false }` [INFO] [stderr] Compiling proc-macro2 v1.0.66 [INFO] [stderr] Compiling unicode-ident v1.0.5 [INFO] [stderr] Compiling libc v0.2.137 [INFO] [stderr] Compiling syn v1.0.105 [INFO] [stderr] Compiling cc v1.0.77 [INFO] [stderr] Compiling serde_derive v1.0.148 [INFO] [stderr] Compiling serde v1.0.148 [INFO] [stderr] Checking once_cell v1.16.0 [INFO] [stderr] Checking bytes v1.3.0 [INFO] [stderr] Compiling tokio v1.22.0 [INFO] [stderr] Compiling futures-core v0.3.25 [INFO] [stderr] Compiling thiserror v1.0.37 [INFO] [stderr] Checking itoa v1.0.4 [INFO] [stderr] Compiling proc-macro2 v0.4.30 [INFO] [stderr] Compiling futures-task v0.3.25 [INFO] [stderr] Checking tracing-core v0.1.30 [INFO] [stderr] Compiling rustversion v1.0.9 [INFO] [stderr] Compiling serde_json v1.0.89 [INFO] [stderr] Compiling memchr v2.5.0 [INFO] [stderr] Compiling openssl v0.10.43 [INFO] [stderr] Compiling futures-util v0.3.25 [INFO] [stderr] Compiling num-traits v0.2.15 [INFO] [stderr] Compiling futures-channel v0.3.25 [INFO] [stderr] Checking futures-sink v0.3.25 [INFO] [stderr] Compiling syn v0.15.44 [INFO] [stderr] Checking tinyvec v1.6.0 [INFO] [stderr] Compiling byteorder v1.4.3 [INFO] [stderr] Checking tracing v0.1.37 [INFO] [stderr] Compiling ppv-lite86 v0.2.17 [INFO] [stderr] Compiling io-lifetimes v1.0.3 [INFO] [stderr] Compiling strsim v0.10.0 [INFO] [stderr] Compiling either v1.8.0 [INFO] [stderr] Compiling ascii v0.9.3 [INFO] [stderr] Checking http v0.2.8 [INFO] [stderr] Compiling quote v1.0.32 [INFO] [stderr] Compiling quote v0.6.13 [INFO] [stderr] Checking form_urlencoded v1.1.0 [INFO] [stderr] Compiling getrandom v0.2.8 [INFO] [stderr] Checking want v0.3.0 [INFO] [stderr] Compiling indexmap v1.9.2 [INFO] [stderr] Compiling syn v2.0.28 [INFO] [stderr] Compiling combine v3.8.1 [INFO] [stderr] Compiling proc-macro-error-attr v1.0.4 [INFO] [stderr] Checking siphasher v0.3.10 [INFO] [stderr] Compiling rand_core v0.6.4 [INFO] [stderr] Compiling paste v1.0.14 [INFO] [stderr] Compiling encoding_rs v0.8.31 [INFO] [stderr] Compiling openssl-sys v0.9.78 [INFO] [stderr] Checking signal-hook-registry v1.4.0 [INFO] [stderr] Checking mio v0.8.5 [INFO] [stderr] Checking parking_lot_core v0.9.5 [INFO] [stderr] Checking num_cpus v1.14.0 [INFO] [stderr] Checking socket2 v0.4.7 [INFO] [stderr] Compiling rquickjs-sys v0.3.1 [INFO] [stderr] Compiling rand_chacha v0.3.1 [INFO] [stderr] Checking unicode-normalization v0.1.22 [INFO] [stderr] Checking signal-hook v0.3.17 [INFO] [stderr] Checking time v0.1.45 [INFO] [stderr] Checking parking_lot v0.12.1 [INFO] [stderr] Compiling ryu v1.0.11 [INFO] [stderr] Compiling crossbeam-queue v0.3.8 [INFO] [stderr] Compiling rustix v0.36.4 [INFO] [stderr] Checking unicode-bidi v0.3.8 [INFO] [stderr] Checking iana-time-zone v0.1.53 [INFO] [stderr] Checking signal-hook-mio v0.2.3 [INFO] [stderr] Compiling native-tls v0.2.11 [INFO] [stderr] Compiling rand v0.8.5 [INFO] [stderr] Compiling phf_shared v0.10.0 [INFO] [stderr] Checking chrono v0.4.26 [INFO] [stderr] Checking http-body v0.4.5 [INFO] [stderr] Checking time-core v0.1.1 [INFO] [stderr] Checking linux-raw-sys v0.1.3 [INFO] [stderr] Compiling async-trait v0.1.59 [INFO] [stderr] Checking bitflags v2.3.3 [INFO] [stderr] Checking deranged v0.3.7 [INFO] [stderr] Checking unicode-segmentation v1.10.0 [INFO] [stderr] Checking idna v0.3.0 [INFO] [stderr] Compiling relative-path v1.7.2 [INFO] [stderr] Checking numtoa v0.1.0 [INFO] [stderr] Checking unicode-width v0.1.10 [INFO] [stderr] Checking crossterm v0.27.0 [INFO] [stderr] Checking termion v1.5.6 [INFO] [stderr] Checking phf v0.10.1 [INFO] [stderr] Checking url v2.3.1 [INFO] [stderr] Checking time v0.3.25 [INFO] [stderr] Compiling phf_generator v0.10.0 [INFO] [stderr] Checking itertools v0.11.0 [INFO] [stderr] Checking ipnet v2.5.1 [INFO] [stderr] Compiling dilib v0.2.0 [INFO] [stderr] Compiling eyre v0.6.8 [INFO] [stderr] Checking os_str_bytes v6.4.1 [INFO] [stderr] Compiling indoc v2.0.3 [INFO] [stderr] Checking dirs-sys v0.4.1 [INFO] [stderr] Checking tui v0.19.0 [INFO] [stderr] Checking aho-corasick v0.7.20 [INFO] [stderr] Checking regex-syntax v0.6.28 [INFO] [stderr] Checking dirs v5.0.1 [INFO] [stderr] Checking clap_lex v0.3.0 [INFO] [stderr] Compiling dlopen_derive v0.1.4 [INFO] [stderr] Checking strum v0.26.1 [INFO] [stderr] Checking is-terminal v0.4.1 [INFO] [stderr] Checking dlopen v0.1.8 [INFO] [stderr] Compiling strum_macros v0.25.3 [INFO] [stderr] Compiling strum_macros v0.26.1 [INFO] [stderr] Compiling darling_core v0.14.4 [INFO] [stderr] Compiling proc-macro-error v1.0.4 [INFO] [stderr] Checking strum v0.25.0 [INFO] [stderr] Compiling tokio-macros v1.8.2 [INFO] [stderr] Compiling thiserror-impl v1.0.37 [INFO] [stderr] Compiling openssl-macros v0.1.0 [INFO] [stderr] Compiling clap_derive v4.0.21 [INFO] [stderr] Checking ratatui v0.23.0 [INFO] [stderr] Checking regex v1.7.0 [INFO] [stderr] Checking tui-logger v0.9.6 [INFO] [stderr] Compiling darling_macro v0.14.4 [INFO] [stderr] Checking clap v4.0.29 [INFO] [stderr] Compiling graphql-parser v0.4.0 [INFO] [stderr] Compiling darling v0.14.4 [INFO] [stderr] Checking tokio-util v0.7.4 [INFO] [stderr] Checking tokio-native-tls v0.3.0 [INFO] [stderr] Checking deadqueue v0.2.4 [INFO] [stderr] Checking quartermaster v0.1.0 (https://github.com/zippy1978/quartermaster.git?tag=0.1.0#141b0d04) [INFO] [stderr] Checking h2 v0.3.15 [INFO] [stderr] Checking serde_urlencoded v0.7.1 [INFO] [stderr] Compiling graphql-introspection-query v0.2.0 [INFO] [stderr] Compiling toml v0.5.9 [INFO] [stderr] Compiling graphql_client_codegen v0.13.0 [INFO] [stderr] Compiling proc-macro-crate v1.2.1 [INFO] [stderr] Checking hyper v0.14.23 [INFO] [stderr] Checking hyper-tls v0.5.0 [INFO] [stderr] Checking reqwest v0.11.13 [INFO] [stderr] Compiling graphql_query_derive v0.13.0 [INFO] [stderr] Checking graphql_client v0.13.0 [INFO] [stderr] Compiling rquickjs-core v0.3.1 [INFO] [stderr] Compiling rquickjs-macro v0.3.1 [INFO] [stderr] Checking rquickjs v0.3.1 [INFO] [stderr] Checking socli v0.2.2 (/opt/rustwide/workdir) [INFO] [stdout] warning: unnecessary parentheses around type [INFO] [stdout] --> src/core/mod.rs:32:51 [INFO] [stdout] | [INFO] [stdout] 32 | let ret = container.get::)? + Send + Sync + 'static)>>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] ::: src/app/task/load_players.rs:23:30 [INFO] [stdout] | [INFO] [stdout] 23 | let player_service = resolve_trait!(PlayerService); [INFO] [stdout] | ----------------------------- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] = note: this warning originates in the macro `resolve_trait` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around type [INFO] [stdout] --> src/core/mod.rs:32:51 [INFO] [stdout] | [INFO] [stdout] 32 | let ret = container.get::)? + Send + Sync + 'static)>>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] ::: src/app/task/load_players.rs:51:30 [INFO] [stdout] | [INFO] [stdout] 51 | let player_service = resolve_trait!(PlayerService); [INFO] [stdout] | ----------------------------- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `resolve_trait` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around type [INFO] [stdout] --> src/core/mod.rs:32:51 [INFO] [stdout] | [INFO] [stdout] 32 | let ret = container.get::)? + Send + Sync + 'static)>>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] ::: src/app/task/load_player_prices.rs:32:29 [INFO] [stdout] | [INFO] [stdout] 32 | let price_service = resolve_trait!(PriceService); [INFO] [stdout] | ---------------------------- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `resolve_trait` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around type [INFO] [stdout] --> src/core/mod.rs:32:51 [INFO] [stdout] | [INFO] [stdout] 32 | let ret = container.get::)? + Send + Sync + 'static)>>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] ::: src/app/task/load_players_stats.rs:37:29 [INFO] [stdout] | [INFO] [stdout] 37 | let stats_service = resolve_trait!(StatsService); [INFO] [stdout] | ---------------------------- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `resolve_trait` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around type [INFO] [stdout] --> src/core/mod.rs:32:51 [INFO] [stdout] | [INFO] [stdout] 32 | let ret = container.get::)? + Send + Sync + 'static)>>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] ::: src/app/task/load_players_injury.rs:37:30 [INFO] [stdout] | [INFO] [stdout] 37 | let injury_service = resolve_trait!(InjuryService); [INFO] [stdout] | ----------------------------- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `resolve_trait` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around type [INFO] [stdout] --> src/core/mod.rs:32:51 [INFO] [stdout] | [INFO] [stdout] 32 | let ret = container.get::)? + Send + Sync + 'static)>>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] ::: src/app/task/run_strategies.rs:33:32 [INFO] [stdout] | [INFO] [stdout] 33 | let strategy_service = resolve_trait!(StrategyService); [INFO] [stdout] | ------------------------------- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `resolve_trait` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/core/repository/player.rs:117:13 [INFO] [stdout] | [INFO] [stdout] 117 | cursor: cursor, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: replace it with: `cursor` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/core/repository/player.rs:118:13 [INFO] [stdout] | [INFO] [stdout] 118 | size: size, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `size` [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 parentheses around type [INFO] [stdout] --> src/core/mod.rs:32:51 [INFO] [stdout] | [INFO] [stdout] 32 | let ret = container.get::)? + Send + Sync + 'static)>>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] ::: src/core/service/player.rs:44:27 [INFO] [stdout] | [INFO] [stdout] 44 | let player_repo = resolve_trait!(PlayerRepo); [INFO] [stdout] | -------------------------- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `resolve_trait` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around type [INFO] [stdout] --> src/core/mod.rs:32:51 [INFO] [stdout] | [INFO] [stdout] 32 | let ret = container.get::)? + Send + Sync + 'static)>>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] ::: src/core/service/player.rs:45:28 [INFO] [stdout] | [INFO] [stdout] 45 | let storage_repo = resolve_trait!(StorageRepo); [INFO] [stdout] | --------------------------- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `resolve_trait` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around type [INFO] [stdout] --> src/core/mod.rs:32:51 [INFO] [stdout] | [INFO] [stdout] 32 | let ret = container.get::)? + Send + Sync + 'static)>>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] ::: src/core/service/player.rs:69:28 [INFO] [stdout] | [INFO] [stdout] 69 | let storage_repo = resolve_trait!(StorageRepo); [INFO] [stdout] | --------------------------- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `resolve_trait` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around type [INFO] [stdout] --> src/core/mod.rs:32:51 [INFO] [stdout] | [INFO] [stdout] 32 | let ret = container.get::)? + Send + Sync + 'static)>>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] ::: src/core/service/price.rs:42:26 [INFO] [stdout] | [INFO] [stdout] 42 | let price_repo = resolve_trait!(PriceRepo); [INFO] [stdout] | ------------------------- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `resolve_trait` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around type [INFO] [stdout] --> src/core/mod.rs:32:51 [INFO] [stdout] | [INFO] [stdout] 32 | let ret = container.get::)? + Send + Sync + 'static)>>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] ::: src/core/service/stats.rs:42:26 [INFO] [stdout] | [INFO] [stdout] 42 | let stats_repo = resolve_trait!(StatsRepo); [INFO] [stdout] | ------------------------- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `resolve_trait` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around type [INFO] [stdout] --> src/core/mod.rs:32:51 [INFO] [stdout] | [INFO] [stdout] 32 | let ret = container.get::)? + Send + Sync + 'static)>>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] ::: src/core/service/injury.rs:42:27 [INFO] [stdout] | [INFO] [stdout] 42 | let injury_repo = resolve_trait!(InjuryRepo); [INFO] [stdout] | -------------------------- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `resolve_trait` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around type [INFO] [stdout] --> src/core/mod.rs:32:51 [INFO] [stdout] | [INFO] [stdout] 32 | let ret = container.get::)? + Send + Sync + 'static)>>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] ::: src/app/task/load_players.rs:23:30 [INFO] [stdout] | [INFO] [stdout] 23 | let player_service = resolve_trait!(PlayerService); [INFO] [stdout] | ----------------------------- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] = note: this warning originates in the macro `resolve_trait` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around type [INFO] [stdout] --> src/core/mod.rs:32:51 [INFO] [stdout] | [INFO] [stdout] 32 | let ret = container.get::)? + Send + Sync + 'static)>>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] ::: src/app/task/load_players.rs:51:30 [INFO] [stdout] | [INFO] [stdout] 51 | let player_service = resolve_trait!(PlayerService); [INFO] [stdout] | ----------------------------- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `resolve_trait` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around type [INFO] [stdout] --> src/core/mod.rs:32:51 [INFO] [stdout] | [INFO] [stdout] 32 | let ret = container.get::)? + Send + Sync + 'static)>>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] ::: src/app/task/load_player_prices.rs:32:29 [INFO] [stdout] | [INFO] [stdout] 32 | let price_service = resolve_trait!(PriceService); [INFO] [stdout] | ---------------------------- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `resolve_trait` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around type [INFO] [stdout] --> src/core/mod.rs:32:51 [INFO] [stdout] | [INFO] [stdout] 32 | let ret = container.get::)? + Send + Sync + 'static)>>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] ::: src/app/task/load_players_stats.rs:37:29 [INFO] [stdout] | [INFO] [stdout] 37 | let stats_service = resolve_trait!(StatsService); [INFO] [stdout] | ---------------------------- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `resolve_trait` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around type [INFO] [stdout] --> src/core/mod.rs:32:51 [INFO] [stdout] | [INFO] [stdout] 32 | let ret = container.get::)? + Send + Sync + 'static)>>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] ::: src/app/task/load_players_injury.rs:37:30 [INFO] [stdout] | [INFO] [stdout] 37 | let injury_service = resolve_trait!(InjuryService); [INFO] [stdout] | ----------------------------- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `resolve_trait` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around type [INFO] [stdout] --> src/core/mod.rs:32:51 [INFO] [stdout] | [INFO] [stdout] 32 | let ret = container.get::)? + Send + Sync + 'static)>>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] ::: src/app/task/run_strategies.rs:33:32 [INFO] [stdout] | [INFO] [stdout] 33 | let strategy_service = resolve_trait!(StrategyService); [INFO] [stdout] | ------------------------------- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `resolve_trait` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/core/repository/player.rs:117:13 [INFO] [stdout] | [INFO] [stdout] 117 | cursor: cursor, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: replace it with: `cursor` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/core/repository/player.rs:118:13 [INFO] [stdout] | [INFO] [stdout] 118 | size: size, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `size` [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 parentheses around type [INFO] [stdout] --> src/core/mod.rs:32:51 [INFO] [stdout] | [INFO] [stdout] 32 | let ret = container.get::)? + Send + Sync + 'static)>>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] ::: src/core/service/player.rs:44:27 [INFO] [stdout] | [INFO] [stdout] 44 | let player_repo = resolve_trait!(PlayerRepo); [INFO] [stdout] | -------------------------- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `resolve_trait` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around type [INFO] [stdout] --> src/core/mod.rs:32:51 [INFO] [stdout] | [INFO] [stdout] 32 | let ret = container.get::)? + Send + Sync + 'static)>>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] ::: src/core/service/player.rs:45:28 [INFO] [stdout] | [INFO] [stdout] 45 | let storage_repo = resolve_trait!(StorageRepo); [INFO] [stdout] | --------------------------- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `resolve_trait` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around type [INFO] [stdout] --> src/core/mod.rs:32:51 [INFO] [stdout] | [INFO] [stdout] 32 | let ret = container.get::)? + Send + Sync + 'static)>>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] ::: src/core/service/player.rs:69:28 [INFO] [stdout] | [INFO] [stdout] 69 | let storage_repo = resolve_trait!(StorageRepo); [INFO] [stdout] | --------------------------- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `resolve_trait` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around type [INFO] [stdout] --> src/core/mod.rs:32:51 [INFO] [stdout] | [INFO] [stdout] 32 | let ret = container.get::)? + Send + Sync + 'static)>>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] ::: src/core/service/price.rs:42:26 [INFO] [stdout] | [INFO] [stdout] 42 | let price_repo = resolve_trait!(PriceRepo); [INFO] [stdout] | ------------------------- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `resolve_trait` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around type [INFO] [stdout] --> src/core/mod.rs:32:51 [INFO] [stdout] | [INFO] [stdout] 32 | let ret = container.get::)? + Send + Sync + 'static)>>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] ::: src/core/service/stats.rs:42:26 [INFO] [stdout] | [INFO] [stdout] 42 | let stats_repo = resolve_trait!(StatsRepo); [INFO] [stdout] | ------------------------- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `resolve_trait` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around type [INFO] [stdout] --> src/core/mod.rs:32:51 [INFO] [stdout] | [INFO] [stdout] 32 | let ret = container.get::)? + Send + Sync + 'static)>>(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] ::: src/core/service/injury.rs:42:27 [INFO] [stdout] | [INFO] [stdout] 42 | let injury_repo = resolve_trait!(InjuryRepo); [INFO] [stdout] | -------------------------- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `resolve_trait` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/app/state.rs:77:13 [INFO] [stdout] | [INFO] [stdout] 77 | / match players.iter_mut().find(|p| p.slug == player_slug) { [INFO] [stdout] 78 | | Some(p) => p.prices = prices, [INFO] [stdout] 79 | | None => (), [INFO] [stdout] 80 | | } [INFO] [stdout] | |_____________^ help: try: `if let Some(p) = players.iter_mut().find(|p| p.slug == player_slug) { p.prices = prices }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/app/state.rs:87:17 [INFO] [stdout] | [INFO] [stdout] 87 | / match players.iter_mut().find(|p| p.slug == s.player_slug) { [INFO] [stdout] 88 | | Some(p) => p.stats = Some(s), [INFO] [stdout] 89 | | None => (), [INFO] [stdout] 90 | | } [INFO] [stdout] | |_________________^ help: try: `if let Some(p) = players.iter_mut().find(|p| p.slug == s.player_slug) { p.stats = Some(s) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/app/state.rs:98:17 [INFO] [stdout] | [INFO] [stdout] 98 | / match players.iter_mut().find(|p| &p.slug == s) { [INFO] [stdout] 99 | | Some(p) => { [INFO] [stdout] 100 | | p.injury = injuries.iter().find(|i| p.slug == i.player_slug).cloned() [INFO] [stdout] ... | [INFO] [stdout] 103 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 98 ~ if let Some(p) = players.iter_mut().find(|p| &p.slug == s) { [INFO] [stdout] 99 + p.injury = injuries.iter().find(|i| p.slug == i.player_slug).cloned() [INFO] [stdout] 100 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/app/state.rs:111:52 [INFO] [stdout] | [INFO] [stdout] 111 | let mut new_decisions: Vec = decisions [INFO] [stdout] | ____________________________________________________^ [INFO] [stdout] 112 | | .iter() [INFO] [stdout] 113 | | .filter(|d| d.player_slug != player_slug) [INFO] [stdout] 114 | | .map(|d| d.clone()) [INFO] [stdout] | |___________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] = note: `#[warn(clippy::map_clone)]` on by default [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 111 ~ let mut new_decisions: Vec = decisions [INFO] [stdout] 112 + .iter() [INFO] [stdout] 113 + .filter(|d| d.player_slug != player_slug).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> src/app/state.rs:125:1 [INFO] [stdout] | [INFO] [stdout] 125 | / impl Default for AppState { [INFO] [stdout] 126 | | fn default() -> Self { [INFO] [stdout] 127 | | Self::Init [INFO] [stdout] 128 | | } [INFO] [stdout] 129 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] = note: `#[warn(clippy::derivable_impls)]` on by default [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 16 + #[derive(Default)] [INFO] [stdout] 17 | pub enum AppState { [INFO] [stdout] 18 ~ #[default] [INFO] [stdout] 19 ~ Init, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/app/task/load_players.rs:54:15 [INFO] [stdout] | [INFO] [stdout] 54 | while !result.is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `result.is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/app/ui.rs:91:13 [INFO] [stdout] | [INFO] [stdout] 91 | / match players.get(*selected_player) { [INFO] [stdout] 92 | | Some(p) => Some(p.clone()), [INFO] [stdout] 93 | | None => None, [INFO] [stdout] 94 | | }, [INFO] [stdout] | |_____________^ help: try: `players.get(*selected_player).map(|p| p.clone())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_map [INFO] [stdout] = note: `#[warn(clippy::manual_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `p.prices.get(0)` [INFO] [stdout] --> src/app/widget/players_table.rs:83:31 [INFO] [stdout] | [INFO] [stdout] 83 | match p.prices.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `p.prices.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] = note: `#[warn(clippy::get_first)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/app/widget/players_table.rs:103:32 [INFO] [stdout] | [INFO] [stdout] 103 | Cell::from(format!( [INFO] [stdout] | ________________________________^ [INFO] [stdout] 104 | | "{}", [INFO] [stdout] 105 | | match avg_price { [INFO] [stdout] 106 | | Some(avg) => format!("{:.2} €", avg), [INFO] [stdout] ... | [INFO] [stdout] 109 | | )), [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] help: consider using `.to_string()` [INFO] [stdout] | [INFO] [stdout] 103 ~ Cell::from((match avg_price { [INFO] [stdout] 104 ~ Some(avg) => format!("{:.2} €", avg), [INFO] [stdout] 105 + None => "-".to_string(), [INFO] [stdout] 106 ~ }).to_string()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `player.prices.get(0)` [INFO] [stdout] --> src/app/widget/player_details.rs:300:27 [INFO] [stdout] | [INFO] [stdout] 300 | match player.prices.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `player.prices.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/app/widget/label.rs:39:24 [INFO] [stdout] | [INFO] [stdout] 39 | Some(c) => &c, [INFO] [stdout] | ^^ help: change this to: `c` [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] --> src/app/widget/label.rs:48:24 [INFO] [stdout] | [INFO] [stdout] 48 | Some(t) => &t, [INFO] [stdout] | ^^ help: change this to: `t` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/app/mod.rs:125:24 [INFO] [stdout] | [INFO] [stdout] 125 | if force || (!force && p.prices.is_empty()) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 125 - if force || (!force && p.prices.is_empty()) { [INFO] [stdout] 125 + if !(!force && !p.prices.is_empty()) { [INFO] [stdout] | [INFO] [stdout] 125 - if force || (!force && p.prices.is_empty()) { [INFO] [stdout] 125 + if force || p.prices.is_empty() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/app/mod.rs:125:21 [INFO] [stdout] | [INFO] [stdout] 125 | / if force || (!force && p.prices.is_empty()) { [INFO] [stdout] 126 | | self.dispatch(IoEvent::LoadPlayerPrices(p.slug.to_string())) [INFO] [stdout] 127 | | .await [INFO] [stdout] 128 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 124 ~ Some(p) [INFO] [stdout] 125 ~ if (force || (!force && p.prices.is_empty())) => { [INFO] [stdout] 126 | self.dispatch(IoEvent::LoadPlayerPrices(p.slug.to_string())) [INFO] [stdout] 127 | .await [INFO] [stdout] 128 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/app/mod.rs:123:13 [INFO] [stdout] | [INFO] [stdout] 123 | / match players.get(index) { [INFO] [stdout] 124 | | Some(p) => { [INFO] [stdout] 125 | | if force || (!force && p.prices.is_empty()) { [INFO] [stdout] 126 | | self.dispatch(IoEvent::LoadPlayerPrices(p.slug.to_string())) [INFO] [stdout] ... | [INFO] [stdout] 130 | | None => (), [INFO] [stdout] 131 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 123 ~ if let Some(p) = players.get(index) { [INFO] [stdout] 124 + if force || (!force && p.prices.is_empty()) { [INFO] [stdout] 125 + self.dispatch(IoEvent::LoadPlayerPrices(p.slug.to_string())) [INFO] [stdout] 126 + .await [INFO] [stdout] 127 + } [INFO] [stdout] 128 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual arithmetic check found [INFO] [stdout] --> src/app/mod.rs:201:29 [INFO] [stdout] | [INFO] [stdout] 201 | let selection = if selected > step { selected - step } else { 0 }; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `selected.saturating_sub(step)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_saturating_sub [INFO] [stdout] = note: `#[warn(clippy::implicit_saturating_sub)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/app/state.rs:77:13 [INFO] [stdout] | [INFO] [stdout] 77 | / match players.iter_mut().find(|p| p.slug == player_slug) { [INFO] [stdout] 78 | | Some(p) => p.prices = prices, [INFO] [stdout] 79 | | None => (), [INFO] [stdout] 80 | | } [INFO] [stdout] | |_____________^ help: try: `if let Some(p) = players.iter_mut().find(|p| p.slug == player_slug) { p.prices = prices }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/app/state.rs:87:17 [INFO] [stdout] | [INFO] [stdout] 87 | / match players.iter_mut().find(|p| p.slug == s.player_slug) { [INFO] [stdout] 88 | | Some(p) => p.stats = Some(s), [INFO] [stdout] 89 | | None => (), [INFO] [stdout] 90 | | } [INFO] [stdout] | |_________________^ help: try: `if let Some(p) = players.iter_mut().find(|p| p.slug == s.player_slug) { p.stats = Some(s) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Panel` which implements the `Copy` trait [INFO] [stdout] --> src/app/mod.rs:202:46 [INFO] [stdout] | [INFO] [stdout] 202 | self.update_selection(selection, selected_panel.clone()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*selected_panel` [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: using `clone` on type `Panel` which implements the `Copy` trait [INFO] [stdout] --> src/app/mod.rs:232:50 [INFO] [stdout] | [INFO] [stdout] 232 | self.update_selection(selection, selected_panel.clone()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*selected_panel` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/app/state.rs:98:17 [INFO] [stdout] | [INFO] [stdout] 98 | / match players.iter_mut().find(|p| &p.slug == s) { [INFO] [stdout] 99 | | Some(p) => { [INFO] [stdout] 100 | | p.injury = injuries.iter().find(|i| p.slug == i.player_slug).cloned() [INFO] [stdout] ... | [INFO] [stdout] 103 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 98 ~ if let Some(p) = players.iter_mut().find(|p| &p.slug == s) { [INFO] [stdout] 99 + p.injury = injuries.iter().find(|i| p.slug == i.player_slug).cloned() [INFO] [stdout] 100 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/app/state.rs:111:52 [INFO] [stdout] | [INFO] [stdout] 111 | let mut new_decisions: Vec = decisions [INFO] [stdout] | ____________________________________________________^ [INFO] [stdout] 112 | | .iter() [INFO] [stdout] 113 | | .filter(|d| d.player_slug != player_slug) [INFO] [stdout] 114 | | .map(|d| d.clone()) [INFO] [stdout] | |___________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] = note: `#[warn(clippy::map_clone)]` on by default [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 111 ~ let mut new_decisions: Vec = decisions [INFO] [stdout] 112 + .iter() [INFO] [stdout] 113 + .filter(|d| d.player_slug != player_slug).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> src/app/state.rs:125:1 [INFO] [stdout] | [INFO] [stdout] 125 | / impl Default for AppState { [INFO] [stdout] 126 | | fn default() -> Self { [INFO] [stdout] 127 | | Self::Init [INFO] [stdout] 128 | | } [INFO] [stdout] 129 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] = note: `#[warn(clippy::derivable_impls)]` on by default [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 16 + #[derive(Default)] [INFO] [stdout] 17 | pub enum AppState { [INFO] [stdout] 18 ~ #[default] [INFO] [stdout] 19 ~ Init, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/app/task/load_players.rs:54:15 [INFO] [stdout] | [INFO] [stdout] 54 | while !result.is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `result.is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match can be simplified with `.unwrap_or_default()` [INFO] [stdout] --> src/core/model/player.rs:64:9 [INFO] [stdout] | [INFO] [stdout] 64 | / match now.years_since(birth_date.date_naive()) { [INFO] [stdout] 65 | | Some(a) => a, [INFO] [stdout] 66 | | None => 0, [INFO] [stdout] 67 | | } [INFO] [stdout] | |_________^ help: replace it with: `now.years_since(birth_date.date_naive()).unwrap_or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::manual_unwrap_or_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/app/ui.rs:91:13 [INFO] [stdout] | [INFO] [stdout] 91 | / match players.get(*selected_player) { [INFO] [stdout] 92 | | Some(p) => Some(p.clone()), [INFO] [stdout] 93 | | None => None, [INFO] [stdout] 94 | | }, [INFO] [stdout] | |_____________^ help: try: `players.get(*selected_player).map(|p| p.clone())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_map [INFO] [stdout] = note: `#[warn(clippy::manual_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/core/model/player.rs:72:9 [INFO] [stdout] | [INFO] [stdout] 72 | / if self.stats.is_some() { [INFO] [stdout] 73 | | if all_scores_loaded { [INFO] [stdout] 74 | | let mut sorted_players = players.to_vec(); [INFO] [stdout] 75 | | sorted_players.sort_by(|a, b| { [INFO] [stdout] ... | [INFO] [stdout] 89 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 72 ~ if self.stats.is_some() [INFO] [stdout] 73 ~ && all_scores_loaded { [INFO] [stdout] 74 | let mut sorted_players = players.to_vec(); [INFO] [stdout] ... [INFO] [stdout] 87 | return Some(player_rank); [INFO] [stdout] 88 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `p.prices.get(0)` [INFO] [stdout] --> src/app/widget/players_table.rs:83:31 [INFO] [stdout] | [INFO] [stdout] 83 | match p.prices.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `p.prices.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] = note: `#[warn(clippy::get_first)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/app/widget/players_table.rs:103:32 [INFO] [stdout] | [INFO] [stdout] 103 | Cell::from(format!( [INFO] [stdout] | ________________________________^ [INFO] [stdout] 104 | | "{}", [INFO] [stdout] 105 | | match avg_price { [INFO] [stdout] 106 | | Some(avg) => format!("{:.2} €", avg), [INFO] [stdout] ... | [INFO] [stdout] 109 | | )), [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] help: consider using `.to_string()` [INFO] [stdout] | [INFO] [stdout] 103 ~ Cell::from((match avg_price { [INFO] [stdout] 104 ~ Some(avg) => format!("{:.2} €", avg), [INFO] [stdout] 105 + None => "-".to_string(), [INFO] [stdout] 106 ~ }).to_string()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `player.prices.get(0)` [INFO] [stdout] --> src/app/widget/player_details.rs:300:27 [INFO] [stdout] | [INFO] [stdout] 300 | match player.prices.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `player.prices.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/app/widget/label.rs:39:24 [INFO] [stdout] | [INFO] [stdout] 39 | Some(c) => &c, [INFO] [stdout] | ^^ help: change this to: `c` [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] --> src/app/widget/label.rs:48:24 [INFO] [stdout] | [INFO] [stdout] 48 | Some(t) => &t, [INFO] [stdout] | ^^ help: change this to: `t` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/app/mod.rs:125:24 [INFO] [stdout] | [INFO] [stdout] 125 | if force || (!force && p.prices.is_empty()) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 125 - if force || (!force && p.prices.is_empty()) { [INFO] [stdout] 125 + if !(!force && !p.prices.is_empty()) { [INFO] [stdout] | [INFO] [stdout] 125 - if force || (!force && p.prices.is_empty()) { [INFO] [stdout] 125 + if force || p.prices.is_empty() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/app/mod.rs:125:21 [INFO] [stdout] | [INFO] [stdout] 125 | / if force || (!force && p.prices.is_empty()) { [INFO] [stdout] 126 | | self.dispatch(IoEvent::LoadPlayerPrices(p.slug.to_string())) [INFO] [stdout] 127 | | .await [INFO] [stdout] 128 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 124 ~ Some(p) [INFO] [stdout] 125 ~ if (force || (!force && p.prices.is_empty())) => { [INFO] [stdout] 126 | self.dispatch(IoEvent::LoadPlayerPrices(p.slug.to_string())) [INFO] [stdout] 127 | .await [INFO] [stdout] 128 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/app/mod.rs:123:13 [INFO] [stdout] | [INFO] [stdout] 123 | / match players.get(index) { [INFO] [stdout] 124 | | Some(p) => { [INFO] [stdout] 125 | | if force || (!force && p.prices.is_empty()) { [INFO] [stdout] 126 | | self.dispatch(IoEvent::LoadPlayerPrices(p.slug.to_string())) [INFO] [stdout] ... | [INFO] [stdout] 130 | | None => (), [INFO] [stdout] 131 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 123 ~ if let Some(p) = players.get(index) { [INFO] [stdout] 124 + if force || (!force && p.prices.is_empty()) { [INFO] [stdout] 125 + self.dispatch(IoEvent::LoadPlayerPrices(p.slug.to_string())) [INFO] [stdout] 126 + .await [INFO] [stdout] 127 + } [INFO] [stdout] 128 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual arithmetic check found [INFO] [stdout] --> src/app/mod.rs:201:29 [INFO] [stdout] | [INFO] [stdout] 201 | let selection = if selected > step { selected - step } else { 0 }; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `selected.saturating_sub(step)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_saturating_sub [INFO] [stdout] = note: `#[warn(clippy::implicit_saturating_sub)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Panel` which implements the `Copy` trait [INFO] [stdout] --> src/app/mod.rs:202:46 [INFO] [stdout] | [INFO] [stdout] 202 | self.update_selection(selection, selected_panel.clone()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*selected_panel` [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: using `clone` on type `Panel` which implements the `Copy` trait [INFO] [stdout] --> src/app/mod.rs:232:50 [INFO] [stdout] | [INFO] [stdout] 232 | self.update_selection(selection, selected_panel.clone()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*selected_panel` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match can be simplified with `.unwrap_or_default()` [INFO] [stdout] --> src/core/model/player.rs:64:9 [INFO] [stdout] | [INFO] [stdout] 64 | / match now.years_since(birth_date.date_naive()) { [INFO] [stdout] 65 | | Some(a) => a, [INFO] [stdout] 66 | | None => 0, [INFO] [stdout] 67 | | } [INFO] [stdout] | |_________^ help: replace it with: `now.years_since(birth_date.date_naive()).unwrap_or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::manual_unwrap_or_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/core/model/player.rs:72:9 [INFO] [stdout] | [INFO] [stdout] 72 | / if self.stats.is_some() { [INFO] [stdout] 73 | | if all_scores_loaded { [INFO] [stdout] 74 | | let mut sorted_players = players.to_vec(); [INFO] [stdout] 75 | | sorted_players.sort_by(|a, b| { [INFO] [stdout] ... | [INFO] [stdout] 89 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 72 ~ if self.stats.is_some() [INFO] [stdout] 73 ~ && all_scores_loaded { [INFO] [stdout] 74 | let mut sorted_players = players.to_vec(); [INFO] [stdout] ... [INFO] [stdout] 87 | return Some(player_rank); [INFO] [stdout] 88 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `PlayerRepoImpl` [INFO] [stdout] --> src/core/repository/player.rs:42:5 [INFO] [stdout] | [INFO] [stdout] 42 | / pub fn new() -> Self { [INFO] [stdout] 43 | | Self { [INFO] [stdout] 44 | | client: Client::builder() [INFO] [stdout] 45 | | .user_agent("graphql-rust/0.10.0") [INFO] [stdout] ... | [INFO] [stdout] 49 | | } [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] 41 + impl Default for PlayerRepoImpl { [INFO] [stdout] 42 + fn default() -> Self { [INFO] [stdout] 43 + Self::new() [INFO] [stdout] 44 + } [INFO] [stdout] 45 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `errors.get(0)` [INFO] [stdout] --> src/core/repository/player.rs:73:38 [INFO] [stdout] | [INFO] [stdout] 73 | if let Some(first_err) = errors.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `errors.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `errors.get(0)` [INFO] [stdout] --> src/core/repository/player.rs:130:38 [INFO] [stdout] | [INFO] [stdout] 130 | if let Some(first_err) = errors.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `errors.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `PriceRepoImpl` [INFO] [stdout] --> src/core/repository/price.rs:30:5 [INFO] [stdout] | [INFO] [stdout] 30 | / pub fn new() -> Self { [INFO] [stdout] 31 | | Self { [INFO] [stdout] 32 | | client: Client::builder() [INFO] [stdout] 33 | | .user_agent("graphql-rust/0.10.0") [INFO] [stdout] ... | [INFO] [stdout] 37 | | } [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] 29 + impl Default for PriceRepoImpl { [INFO] [stdout] 30 + fn default() -> Self { [INFO] [stdout] 31 + Self::new() [INFO] [stdout] 32 + } [INFO] [stdout] 33 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `errors.get(0)` [INFO] [stdout] --> src/core/repository/price.rs:53:38 [INFO] [stdout] | [INFO] [stdout] 53 | if let Some(first_err) = errors.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `errors.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `StorageRepoImpl` [INFO] [stdout] --> src/core/repository/storage.rs:23:5 [INFO] [stdout] | [INFO] [stdout] 23 | / pub fn new() -> Self { [INFO] [stdout] 24 | | // Create root folder [INFO] [stdout] 25 | | let mut root_dir = home_dir().expect("failed to retrieve user home directory"); [INFO] [stdout] 26 | | root_dir.push(".socli"); [INFO] [stdout] ... | [INFO] [stdout] 30 | | Self { root_dir } [INFO] [stdout] 31 | | } [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] 22 + impl Default for StorageRepoImpl { [INFO] [stdout] 23 + fn default() -> Self { [INFO] [stdout] 24 + Self::new() [INFO] [stdout] 25 + } [INFO] [stdout] 26 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/core/model/player_tests.rs:32:5 [INFO] [stdout] | [INFO] [stdout] 32 | return player; [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] 32 - return player; [INFO] [stdout] 32 + player [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `StatsRepoImpl` [INFO] [stdout] --> src/core/repository/stats.rs:29:5 [INFO] [stdout] | [INFO] [stdout] 29 | / pub fn new() -> Self { [INFO] [stdout] 30 | | Self { [INFO] [stdout] 31 | | client: Client::builder() [INFO] [stdout] 32 | | .user_agent("graphql-rust/0.10.0") [INFO] [stdout] ... | [INFO] [stdout] 36 | | } [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] 28 + impl Default for StatsRepoImpl { [INFO] [stdout] 29 + fn default() -> Self { [INFO] [stdout] 30 + Self::new() [INFO] [stdout] 31 + } [INFO] [stdout] 32 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `errors.get(0)` [INFO] [stdout] --> src/core/repository/stats.rs:56:38 [INFO] [stdout] | [INFO] [stdout] 56 | if let Some(first_err) = errors.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `errors.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `PlayerRepoImpl` [INFO] [stdout] --> src/core/repository/player.rs:42:5 [INFO] [stdout] | [INFO] [stdout] 42 | / pub fn new() -> Self { [INFO] [stdout] 43 | | Self { [INFO] [stdout] 44 | | client: Client::builder() [INFO] [stdout] 45 | | .user_agent("graphql-rust/0.10.0") [INFO] [stdout] ... | [INFO] [stdout] 49 | | } [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] 41 + impl Default for PlayerRepoImpl { [INFO] [stdout] 42 + fn default() -> Self { [INFO] [stdout] 43 + Self::new() [INFO] [stdout] 44 + } [INFO] [stdout] 45 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `errors.get(0)` [INFO] [stdout] --> src/core/repository/player.rs:73:38 [INFO] [stdout] | [INFO] [stdout] 73 | if let Some(first_err) = errors.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `errors.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `InjuryRepoImpl` [INFO] [stdout] --> src/core/repository/injury.rs:29:5 [INFO] [stdout] | [INFO] [stdout] 29 | / pub fn new() -> Self { [INFO] [stdout] 30 | | Self { [INFO] [stdout] 31 | | client: Client::builder() [INFO] [stdout] 32 | | .user_agent("graphql-rust/0.10.0") [INFO] [stdout] ... | [INFO] [stdout] 36 | | } [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] 28 + impl Default for InjuryRepoImpl { [INFO] [stdout] 29 + fn default() -> Self { [INFO] [stdout] 30 + Self::new() [INFO] [stdout] 31 + } [INFO] [stdout] 32 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `errors.get(0)` [INFO] [stdout] --> src/core/repository/player.rs:130:38 [INFO] [stdout] | [INFO] [stdout] 130 | if let Some(first_err) = errors.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `errors.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `errors.get(0)` [INFO] [stdout] --> src/core/repository/injury.rs:56:38 [INFO] [stdout] | [INFO] [stdout] 56 | if let Some(first_err) = errors.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `errors.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/core/service/strategy.rs:82:46 [INFO] [stdout] | [INFO] [stdout] 82 | Ok(Some(decision.to_decision(&player, strategy_name))) [INFO] [stdout] | ^^^^^^^ help: change this to: `player` [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 lifetime isn't used in the function definition [INFO] [stdout] --> src/core/mod.rs:63:30 [INFO] [stdout] | [INFO] [stdout] 63 | pub async fn setup_container<'a>(strategies_dir: &str) -> Result<(), InitContainerError> { [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: you should consider adding a `Default` implementation for `PriceRepoImpl` [INFO] [stdout] --> src/core/repository/price.rs:30:5 [INFO] [stdout] | [INFO] [stdout] 30 | / pub fn new() -> Self { [INFO] [stdout] 31 | | Self { [INFO] [stdout] 32 | | client: Client::builder() [INFO] [stdout] 33 | | .user_agent("graphql-rust/0.10.0") [INFO] [stdout] ... | [INFO] [stdout] 37 | | } [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] 29 + impl Default for PriceRepoImpl { [INFO] [stdout] 30 + fn default() -> Self { [INFO] [stdout] 31 + Self::new() [INFO] [stdout] 32 + } [INFO] [stdout] 33 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `errors.get(0)` [INFO] [stdout] --> src/core/repository/price.rs:53:38 [INFO] [stdout] | [INFO] [stdout] 53 | if let Some(first_err) = errors.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `errors.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `StorageRepoImpl` [INFO] [stdout] --> src/core/repository/storage.rs:23:5 [INFO] [stdout] | [INFO] [stdout] 23 | / pub fn new() -> Self { [INFO] [stdout] 24 | | // Create root folder [INFO] [stdout] 25 | | let mut root_dir = home_dir().expect("failed to retrieve user home directory"); [INFO] [stdout] 26 | | root_dir.push(".socli"); [INFO] [stdout] ... | [INFO] [stdout] 30 | | Self { root_dir } [INFO] [stdout] 31 | | } [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] 22 + impl Default for StorageRepoImpl { [INFO] [stdout] 23 + fn default() -> Self { [INFO] [stdout] 24 + Self::new() [INFO] [stdout] 25 + } [INFO] [stdout] 26 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `StatsRepoImpl` [INFO] [stdout] --> src/core/repository/stats.rs:29:5 [INFO] [stdout] | [INFO] [stdout] 29 | / pub fn new() -> Self { [INFO] [stdout] 30 | | Self { [INFO] [stdout] 31 | | client: Client::builder() [INFO] [stdout] 32 | | .user_agent("graphql-rust/0.10.0") [INFO] [stdout] ... | [INFO] [stdout] 36 | | } [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] 28 + impl Default for StatsRepoImpl { [INFO] [stdout] 29 + fn default() -> Self { [INFO] [stdout] 30 + Self::new() [INFO] [stdout] 31 + } [INFO] [stdout] 32 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `errors.get(0)` [INFO] [stdout] --> src/core/repository/stats.rs:56:38 [INFO] [stdout] | [INFO] [stdout] 56 | if let Some(first_err) = errors.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `errors.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `InjuryRepoImpl` [INFO] [stdout] --> src/core/repository/injury.rs:29:5 [INFO] [stdout] | [INFO] [stdout] 29 | / pub fn new() -> Self { [INFO] [stdout] 30 | | Self { [INFO] [stdout] 31 | | client: Client::builder() [INFO] [stdout] 32 | | .user_agent("graphql-rust/0.10.0") [INFO] [stdout] ... | [INFO] [stdout] 36 | | } [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] 28 + impl Default for InjuryRepoImpl { [INFO] [stdout] 29 + fn default() -> Self { [INFO] [stdout] 30 + Self::new() [INFO] [stdout] 31 + } [INFO] [stdout] 32 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `errors.get(0)` [INFO] [stdout] --> src/core/repository/injury.rs:56:38 [INFO] [stdout] | [INFO] [stdout] 56 | if let Some(first_err) = errors.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `errors.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/core/service/strategy.rs:82:46 [INFO] [stdout] | [INFO] [stdout] 82 | Ok(Some(decision.to_decision(&player, strategy_name))) [INFO] [stdout] | ^^^^^^^ help: change this to: `player` [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] --> src/core/service/strategy_tests.rs:11:55 [INFO] [stdout] | [INFO] [stdout] 11 | assert_eq!(strategy_service.extract_strategy_name(&path), "test"); [INFO] [stdout] | ^^^^^ help: change this to: `path` [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 lifetime isn't used in the function definition [INFO] [stdout] --> src/core/mod.rs:63:30 [INFO] [stdout] | [INFO] [stdout] 63 | pub async fn setup_container<'a>(strategies_dir: &str) -> Result<(), InitContainerError> { [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: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/main.rs:111:26 [INFO] [stdout] | [INFO] [stdout] 111 | .map_err(|e| io::Error::new(io::ErrorKind::Other, e.to_string()))?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#io_other_error [INFO] [stdout] = note: `#[warn(clippy::io_other_error)]` on by default [INFO] [stdout] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 111 - .map_err(|e| io::Error::new(io::ErrorKind::Other, e.to_string()))?; [INFO] [stdout] 111 + .map_err(|e| io::Error::other(e.to_string()))?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/main.rs:111:26 [INFO] [stdout] | [INFO] [stdout] 111 | .map_err(|e| io::Error::new(io::ErrorKind::Other, e.to_string()))?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#io_other_error [INFO] [stdout] = note: `#[warn(clippy::io_other_error)]` on by default [INFO] [stdout] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 111 - .map_err(|e| io::Error::new(io::ErrorKind::Other, e.to_string()))?; [INFO] [stdout] 111 + .map_err(|e| io::Error::other(e.to_string()))?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 18s [INFO] [stderr] warning: the following packages contain code that will be rejected by a future version of Rust: openssl v0.10.43 [INFO] [stderr] note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 3` [INFO] running `Command { std: "docker" "inspect" "4cd481aace66bc9267656eeee7a57448469e8f9540ec326a089faf4a8cfb3bf2", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "4cd481aace66bc9267656eeee7a57448469e8f9540ec326a089faf4a8cfb3bf2", kill_on_drop: false }` [INFO] [stdout] 4cd481aace66bc9267656eeee7a57448469e8f9540ec326a089faf4a8cfb3bf2