[INFO] fetching crate saml2aws-auto 1.13.3... [INFO] linting saml2aws-auto-1.13.3 against nightly for clippy-nonminimal_bool-denied [INFO] extracting crate saml2aws-auto 1.13.3 into /workspace/builds/worker-6-tc1/source [INFO] started tweaking crates.io crate saml2aws-auto 1.13.3 [INFO] finished tweaking crates.io crate saml2aws-auto 1.13.3 [INFO] tweaked toml for crates.io crate saml2aws-auto 1.13.3 written to /workspace/builds/worker-6-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate saml2aws-auto 1.13.3 on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate crates.io crate saml2aws-auto 1.13.3 already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] warning: `package.edition` is unspecified, defaulting to `2015` while the latest is `2024` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded vte v0.10.1 [INFO] [stderr] Downloaded tabled_derive v0.8.0 [INFO] [stderr] Downloaded serde-xml-rs v0.3.1 [INFO] [stderr] Downloaded ansi-str v0.8.0 [INFO] [stderr] Downloaded papergrid v0.12.0 [INFO] [stderr] Downloaded trim-in-place v0.1.7 [INFO] [stderr] Downloaded wasm-bindgen-futures v0.4.43 [INFO] [stderr] Downloaded rustls-pki-types v1.8.0 [INFO] [stderr] Downloaded security-framework-sys v2.11.1 [INFO] [stderr] Downloaded dbus-secret-service v4.0.2 [INFO] [stderr] Downloaded keyring v3.2.0 [INFO] [stderr] Downloaded xml-rs v0.8.21 [INFO] [stderr] Downloaded cc v1.1.14 [INFO] [stderr] Downloaded serde_derive v1.0.209 [INFO] [stderr] Downloaded serde v1.0.209 [INFO] [stderr] Downloaded serde_json v1.0.127 [INFO] [stderr] Downloaded reqwest v0.12.7 [INFO] [stderr] Downloaded tabled v0.16.0 [INFO] [stderr] Downloaded rust-ini v0.21.1 [INFO] [stderr] Downloaded ansitok v0.2.0 [INFO] [stderr] Downloaded openssl v0.10.66 [INFO] [stderr] Downloaded web-sys v0.3.70 [INFO] [stderr] Downloaded libdbus-sys v0.2.5 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-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] 4c9fc74b02b58958d0cfdafdb8c0658a711f21a1e5d1020304b5dd76f33a2dbd [INFO] running `Command { std: "docker" "start" "-a" "4c9fc74b02b58958d0cfdafdb8c0658a711f21a1e5d1020304b5dd76f33a2dbd", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "4c9fc74b02b58958d0cfdafdb8c0658a711f21a1e5d1020304b5dd76f33a2dbd", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "4c9fc74b02b58958d0cfdafdb8c0658a711f21a1e5d1020304b5dd76f33a2dbd", kill_on_drop: false }` [INFO] [stdout] 4c9fc74b02b58958d0cfdafdb8c0658a711f21a1e5d1020304b5dd76f33a2dbd [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-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] 5f5b0586158e78139daf6343b99932b877235c448cf85e9911d5096b078712ff [INFO] running `Command { std: "docker" "start" "-a" "5f5b0586158e78139daf6343b99932b877235c448cf85e9911d5096b078712ff", kill_on_drop: false }` [INFO] [stderr] warning: `package.edition` is unspecified, defaulting to `2015` while the latest is `2024` [INFO] [stderr] Compiling libc v0.2.158 [INFO] [stderr] Compiling byteorder v1.5.0 [INFO] [stderr] Compiling pkg-config v0.3.30 [INFO] [stderr] Compiling cc v1.1.14 [INFO] [stderr] Compiling serde v1.0.209 [INFO] [stderr] Compiling phf_shared v0.10.0 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Checking bitflags v2.6.0 [INFO] [stderr] Compiling quote v1.0.37 [INFO] [stderr] Checking indexmap v2.4.0 [INFO] [stderr] Checking phf_shared v0.11.2 [INFO] [stderr] Compiling openssl v0.10.66 [INFO] [stderr] Checking http-body v1.0.1 [INFO] [stderr] Checking arrayvec v0.5.2 [INFO] [stderr] Compiling once_cell v1.19.0 [INFO] [stderr] Compiling native-tls v0.2.12 [INFO] [stderr] Compiling syn v1.0.109 [INFO] [stderr] Checking nom v7.1.3 [INFO] [stderr] Checking unicode-width v0.1.11 [INFO] [stderr] Checking gimli v0.29.0 [INFO] [stderr] Checking openssl-probe v0.1.5 [INFO] [stderr] Checking miniz_oxide v0.7.4 [INFO] [stderr] Compiling ahash v0.8.11 [INFO] [stderr] Checking object v0.36.3 [INFO] [stderr] Compiling syn v2.0.75 [INFO] [stderr] Compiling time-core v0.1.2 [INFO] [stderr] Compiling vte_generate_state_changes v0.1.2 [INFO] [stderr] Compiling proc-macro-error-attr v1.0.4 [INFO] [stderr] Compiling rustix v0.38.34 [INFO] [stderr] Compiling serde_json v1.0.127 [INFO] [stderr] Compiling libdbus-sys v0.2.5 [INFO] [stderr] Checking vte v0.10.1 [INFO] [stderr] Compiling time-macros v0.2.18 [INFO] [stderr] Checking servo_arc v0.3.0 [INFO] [stderr] Checking phf v0.10.1 [INFO] [stderr] Compiling cookie v0.18.1 [INFO] [stderr] Checking bytecount v0.6.8 [INFO] [stderr] Checking regex-syntax v0.8.4 [INFO] [stderr] Checking num-integer v0.1.46 [INFO] [stderr] Checking num-complex v0.4.6 [INFO] [stderr] Checking rustls-pki-types v1.8.0 [INFO] [stderr] Checking rustls-pemfile v2.1.3 [INFO] [stderr] Checking mio v1.0.2 [INFO] [stderr] Checking socket2 v0.5.7 [INFO] [stderr] Checking getrandom v0.2.15 [INFO] [stderr] Checking parking_lot_core v0.9.10 [INFO] [stderr] Checking num-bigint v0.4.6 [INFO] [stderr] Compiling openssl-sys v0.9.103 [INFO] [stderr] Checking rand_core v0.6.4 [INFO] [stderr] Checking tokio v1.39.3 [INFO] [stderr] Compiling backtrace v0.3.73 [INFO] [stderr] Checking parking_lot v0.12.3 [INFO] [stderr] Checking num-iter v0.1.45 [INFO] [stderr] Checking ansitok v0.2.0 [INFO] [stderr] Checking signal-hook-registry v1.4.2 [INFO] [stderr] Checking signal-hook v0.3.17 [INFO] [stderr] Checking dbus v0.9.7 [INFO] [stderr] Checking signal-hook-mio v0.2.4 [INFO] [stderr] Checking rtoolbox v0.0.2 [INFO] [stderr] Checking time v0.3.36 [INFO] [stderr] Checking dirs-sys v0.4.1 [INFO] [stderr] Checking clap_builder v4.5.15 [INFO] [stderr] Checking addr2line v0.22.0 [INFO] [stderr] Checking getopts v0.2.21 [INFO] [stderr] Compiling const-random-macro v0.1.16 [INFO] [stderr] Checking ansi-str v0.8.0 [INFO] [stderr] Checking encoding_rs v0.8.34 [INFO] [stderr] Checking trim-in-place v0.1.7 [INFO] [stderr] Checking xml-rs v0.8.21 [INFO] [stderr] Checking papergrid v0.12.0 [INFO] [stderr] Checking const-random v0.1.18 [INFO] [stderr] Checking dlv-list v0.5.2 [INFO] [stderr] Checking ego-tree v0.6.3 [INFO] [stderr] Checking num-rational v0.4.2 [INFO] [stderr] Checking crossterm v0.28.1 [INFO] [stderr] Checking ordered-multimap v0.7.3 [INFO] [stderr] Checking regex-automata v0.4.7 [INFO] [stderr] Checking rust-ini v0.21.1 [INFO] [stderr] Checking dirs v5.0.1 [INFO] [stderr] Checking num v0.4.3 [INFO] [stderr] Checking rpassword v7.3.1 [INFO] [stderr] Checking fern v0.6.2 [INFO] [stderr] Compiling proc-macro-error v1.0.4 [INFO] [stderr] Checking error-chain v0.10.0 [INFO] [stderr] Checking string_cache v0.8.7 [INFO] [stderr] Checking serde_urlencoded v0.7.1 [INFO] [stderr] Checking serde_yaml v0.9.34+deprecated [INFO] [stderr] Checking chrono v0.4.38 [INFO] [stderr] Checking serde-xml-rs v0.3.1 [INFO] [stderr] Compiling tabled_derive v0.8.0 [INFO] [stderr] Checking tabled v0.16.0 [INFO] [stderr] Checking regex v1.10.6 [INFO] [stderr] Compiling zerocopy-derive v0.7.35 [INFO] [stderr] Compiling futures-macro v0.3.30 [INFO] [stderr] Compiling openssl-macros v0.1.1 [INFO] [stderr] Compiling pin-project-internal v1.1.5 [INFO] [stderr] Compiling html5ever v0.27.0 [INFO] [stderr] Compiling cssparser-macros v0.6.1 [INFO] [stderr] Compiling derive_more v0.99.18 [INFO] [stderr] Compiling clap_derive v4.5.13 [INFO] [stderr] Compiling serde_derive v1.0.209 [INFO] [stderr] Checking tokio-util v0.7.11 [INFO] [stderr] Compiling zerocopy v0.7.35 [INFO] [stderr] Checking h2 v0.4.6 [INFO] [stderr] Checking futures-util v0.3.30 [INFO] [stderr] Checking pin-project v1.1.5 [INFO] [stderr] Checking ppv-lite86 v0.2.20 [INFO] [stderr] Checking rand_chacha v0.3.1 [INFO] [stderr] Checking clap v4.5.16 [INFO] [stderr] Checking rand v0.8.5 [INFO] [stderr] Compiling phf_generator v0.11.2 [INFO] [stderr] Compiling phf_generator v0.10.0 [INFO] [stderr] Compiling phf_codegen v0.11.2 [INFO] [stderr] Compiling phf_macros v0.11.2 [INFO] [stderr] Compiling string_cache_codegen v0.5.2 [INFO] [stderr] Compiling phf_codegen v0.10.0 [INFO] [stderr] Compiling selectors v0.25.0 [INFO] [stderr] Checking tokio-native-tls v0.3.1 [INFO] [stderr] Compiling markup5ever v0.12.1 [INFO] [stderr] Checking phf v0.11.2 [INFO] [stderr] Checking cssparser v0.31.2 [INFO] [stderr] Checking hyper v1.4.1 [INFO] [stderr] Checking tower v0.4.13 [INFO] [stderr] Checking http-body-util v0.1.2 [INFO] [stderr] Checking dbus-secret-service v4.0.2 [INFO] [stderr] Checking keyring v3.2.0 [INFO] [stderr] Checking hyper-util v0.1.7 [INFO] [stderr] Checking scraper v0.20.0 [INFO] [stderr] Checking hyper-tls v0.6.0 [INFO] [stderr] Checking reqwest v0.12.7 [INFO] [stderr] Checking saml2aws-auto v1.13.3 (/opt/rustwide/workdir) [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/aws/mod.rs:49:17 [INFO] [stdout] | [INFO] [stdout] 49 | name: name, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `name` [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: constants have by default a `'static` lifetime [INFO] [stdout] --> src/config.rs:47:21 [INFO] [stdout] | [INFO] [stdout] 47 | const LINE_ENDING: &'static str = "\n"; [INFO] [stdout] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetimes [INFO] [stdout] = note: `#[warn(clippy::redundant_static_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/aws/mod.rs:49:17 [INFO] [stdout] | [INFO] [stdout] 49 | name: name, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `name` [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: constants have by default a `'static` lifetime [INFO] [stdout] --> src/config.rs:47:21 [INFO] [stdout] | [INFO] [stdout] 47 | const LINE_ENDING: &'static str = "\n"; [INFO] [stdout] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetimes [INFO] [stdout] = note: `#[warn(clippy::redundant_static_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: found `.or(Some(…)).unwrap()` [INFO] [stdout] --> src/aws/assume_role.rs:26:49 [INFO] [stdout] | [INFO] [stdout] 26 | &format!("{}", session_duration.or(Some(3600)).unwrap()), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `unwrap_or(3600)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_then_unwrap [INFO] [stdout] = note: `#[warn(clippy::or_then_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/aws/assume_role.rs:33:24 [INFO] [stdout] | [INFO] [stdout] 33 | return Err(io::Error::new(io::ErrorKind::Other, e)); [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] 33 - return Err(io::Error::new(io::ErrorKind::Other, e)); [INFO] [stdout] 33 + return Err(io::Error::other(e)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/aws/assume_role.rs:40:20 [INFO] [stdout] | [INFO] [stdout] 40 | return Err(io::Error::new( [INFO] [stdout] | ____________________^ [INFO] [stdout] 41 | | io::ErrorKind::Other, [INFO] [stdout] 42 | | format!("sts assume role returned {}", status), [INFO] [stdout] 43 | | )); [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] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 40 ~ return Err(io::Error::other( [INFO] [stdout] 41 ~ format!("sts assume role returned {}", status), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/aws/assume_role.rs:51:10 [INFO] [stdout] | [INFO] [stdout] 51 | .into_iter() [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] = note: `#[warn(clippy::into_iter_on_ref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> src/aws/assume_role.rs:52:19 [INFO] [stdout] | [INFO] [stdout] 52 | .find(|r| match r { [INFO] [stdout] | ___________________^ [INFO] [stdout] 53 | | AssumeRoleResult::Credentials(_) => true, [INFO] [stdout] 54 | | _ => false, [INFO] [stdout] 55 | | }) [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] = note: `#[warn(clippy::match_like_matches_macro)]` on by default [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 52 - .find(|r| match r { [INFO] [stdout] 53 - AssumeRoleResult::Credentials(_) => true, [INFO] [stdout] 54 - _ => false, [INFO] [stdout] 55 - }) [INFO] [stdout] 52 + .find(|r| matches!(r, AssumeRoleResult::Credentials(_))) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/aws/mod.rs:55:8 [INFO] [stdout] | [INFO] [stdout] 55 | if accounts.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!accounts.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/aws/mod.rs:65:22 [INFO] [stdout] | [INFO] [stdout] 65 | .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] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 65 - .map_err(|e| io::Error::new(io::ErrorKind::Other, e.to_string()))?; [INFO] [stdout] 65 + .map_err(|e| io::Error::other(e.to_string()))?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/aws/mod.rs:67:8 [INFO] [stdout] | [INFO] [stdout] 67 | if parsed_assertion.roles.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `parsed_assertion.roles.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: found `.or(Some(…)).unwrap()` [INFO] [stdout] --> src/aws/assume_role.rs:26:49 [INFO] [stdout] | [INFO] [stdout] 26 | &format!("{}", session_duration.or(Some(3600)).unwrap()), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `unwrap_or(3600)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_then_unwrap [INFO] [stdout] = note: `#[warn(clippy::or_then_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/aws/assume_role.rs:33:24 [INFO] [stdout] | [INFO] [stdout] 33 | return Err(io::Error::new(io::ErrorKind::Other, e)); [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] 33 - return Err(io::Error::new(io::ErrorKind::Other, e)); [INFO] [stdout] 33 + return Err(io::Error::other(e)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/aws/assume_role.rs:40:20 [INFO] [stdout] | [INFO] [stdout] 40 | return Err(io::Error::new( [INFO] [stdout] | ____________________^ [INFO] [stdout] 41 | | io::ErrorKind::Other, [INFO] [stdout] 42 | | format!("sts assume role returned {}", status), [INFO] [stdout] 43 | | )); [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] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 40 ~ return Err(io::Error::other( [INFO] [stdout] 41 ~ format!("sts assume role returned {}", status), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/aws/assume_role.rs:51:10 [INFO] [stdout] | [INFO] [stdout] 51 | .into_iter() [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] = note: `#[warn(clippy::into_iter_on_ref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> src/aws/assume_role.rs:52:19 [INFO] [stdout] | [INFO] [stdout] 52 | .find(|r| match r { [INFO] [stdout] | ___________________^ [INFO] [stdout] 53 | | AssumeRoleResult::Credentials(_) => true, [INFO] [stdout] 54 | | _ => false, [INFO] [stdout] 55 | | }) [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] = note: `#[warn(clippy::match_like_matches_macro)]` on by default [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 52 - .find(|r| match r { [INFO] [stdout] 53 - AssumeRoleResult::Credentials(_) => true, [INFO] [stdout] 54 - _ => false, [INFO] [stdout] 55 - }) [INFO] [stdout] 52 + .find(|r| matches!(r, AssumeRoleResult::Credentials(_))) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/config.rs:53:5 [INFO] [stdout] | [INFO] [stdout] 53 | format!("{}", path.to_str().unwrap()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `path.to_str().unwrap().to_string()` [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] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `ok` [INFO] [stdout] --> src/config.rs:69:36 [INFO] [stdout] | [INFO] [stdout] 69 | cfg.password = match get_password(username) { [INFO] [stdout] | ____________________________________^ [INFO] [stdout] 70 | | Ok(p) => Some(p), [INFO] [stdout] 71 | | Err(_) => None, [INFO] [stdout] 72 | | }; [INFO] [stdout] | |_____________________^ help: replace with: `get_password(username).ok()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_ok_err [INFO] [stdout] = note: `#[warn(clippy::manual_ok_err)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/config.rs:77:27 [INFO] [stdout] | [INFO] [stdout] 77 | Err(e) => Err(io::Error::new(io::ErrorKind::Other, e)), [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] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 77 - Err(e) => Err(io::Error::new(io::ErrorKind::Other, e)), [INFO] [stdout] 77 + Err(e) => Err(io::Error::other(e)), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `format!` in `print!` args [INFO] [stdout] --> src/config.rs:95:13 [INFO] [stdout] | [INFO] [stdout] 95 | / print!( [INFO] [stdout] 96 | | "{} {}", [INFO] [stdout] 97 | | "?".green(), [INFO] [stdout] 98 | | format!("{} [{}]: ", question, default), [INFO] [stdout] 99 | | ); [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: combine the `format!(..)` arguments with the outer `print!(..)` call [INFO] [stdout] = help: or consider changing `format!` to `format_args!` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#format_in_format_args [INFO] [stdout] = note: `#[warn(clippy::format_in_format_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `format!` in `print!` args [INFO] [stdout] --> src/config.rs:102:13 [INFO] [stdout] | [INFO] [stdout] 102 | print!("{} {}", "?".green(), format!("{}: ", question),); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: combine the `format!(..)` arguments with the outer `print!(..)` call [INFO] [stdout] = help: or consider changing `format!` to `format_args!` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#format_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/config.rs:111:16 [INFO] [stdout] | [INFO] [stdout] 111 | if s.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `s.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/aws/mod.rs:55:8 [INFO] [stdout] | [INFO] [stdout] 55 | if accounts.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!accounts.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/aws/mod.rs:65:22 [INFO] [stdout] | [INFO] [stdout] 65 | .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] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 65 - .map_err(|e| io::Error::new(io::ErrorKind::Other, e.to_string()))?; [INFO] [stdout] 65 + .map_err(|e| io::Error::other(e.to_string()))?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/aws/mod.rs:67:8 [INFO] [stdout] | [INFO] [stdout] 67 | if parsed_assertion.roles.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `parsed_assertion.roles.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `.as_ref().map(|s| s.as_str())` on an `Option` value [INFO] [stdout] --> src/config.rs:124:28 [INFO] [stdout] | [INFO] [stdout] 124 | ask_question(question, masked.as_ref().map(|s| s.as_str())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using as_deref: `masked.as_deref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_as_ref_deref [INFO] [stdout] = note: `#[warn(clippy::option_as_ref_deref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/config.rs:134:35 [INFO] [stdout] | [INFO] [stdout] 134 | if password == LINE_ENDING || password.len() == 0 { [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#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_err()` [INFO] [stdout] --> src/config.rs:149:12 [INFO] [stdout] | [INFO] [stdout] 149 | if let Err(_) = io::stdin().read_line(&mut buf) { [INFO] [stdout] | -------^^^^^^---------------------------------- help: try: `if io::stdin().read_line(&mut buf).is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/config.rs:181:23 [INFO] [stdout] | [INFO] [stdout] 181 | cfg.idp_url = idp_url.into(); [INFO] [stdout] | ^^^^^^^^^^^^^^ help: consider removing `.into()`: `idp_url` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::as_ref` [INFO] [stdout] --> src/config.rs:186:9 [INFO] [stdout] | [INFO] [stdout] 186 | / match cfg.username { [INFO] [stdout] 187 | | Some(ref s) => Some(s), [INFO] [stdout] 188 | | None => None, [INFO] [stdout] 189 | | }, [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_as_ref [INFO] [stdout] = note: `#[warn(clippy::match_as_ref)]` on by default [INFO] [stdout] help: use `Option::as_ref()` directly [INFO] [stdout] | [INFO] [stdout] 186 - match cfg.username { [INFO] [stdout] 187 - Some(ref s) => Some(s), [INFO] [stdout] 188 - None => None, [INFO] [stdout] 189 - }, [INFO] [stdout] 186 + cfg.username.as_ref().map(|x| x as _), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/config.rs:195:32 [INFO] [stdout] | [INFO] [stdout] 195 | match get_password(&cfg.username.as_ref().unwrap()) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `cfg.username.as_ref().unwrap()` [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: length comparison to zero [INFO] [stdout] --> src/config.rs:197:24 [INFO] [stdout] | [INFO] [stdout] 197 | if p.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `p.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/config.rs:211:17 [INFO] [stdout] | [INFO] [stdout] 211 | &cfg.username.as_ref().unwrap(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `cfg.username.as_ref().unwrap()` [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/config.rs:212:17 [INFO] [stdout] | [INFO] [stdout] 212 | &cfg.password.as_ref().unwrap(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `cfg.password.as_ref().unwrap()` [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] --> src/config.rs:274:5 [INFO] [stdout] | [INFO] [stdout] 274 | return true; [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] 274 - return true; [INFO] [stdout] 274 + true [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_err()` [INFO] [stdout] --> src/config.rs:261:16 [INFO] [stdout] | [INFO] [stdout] 261 | if let Err(_) = panic::catch_unwind(|| { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this will change drop order of the result, as well as all temporaries [INFO] [stdout] = note: add `#[allow(clippy::redundant_pattern_matching)]` if this is important [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 261 ~ if panic::catch_unwind(|| { [INFO] [stdout] 262 + if let Err(_) = get_password(username) { [INFO] [stdout] 263 + if let Some(password) = password_prompt("IDP Password", Some("")) { [INFO] [stdout] 264 + set_password(username, &password) [INFO] [stdout] 265 + .expect("Could not save password in credentials storage"); [INFO] [stdout] 266 + } [INFO] [stdout] 267 + } [INFO] [stdout] 268 ~ }).is_err() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_err()` [INFO] [stdout] --> src/config.rs:262:20 [INFO] [stdout] | [INFO] [stdout] 262 | if let Err(_) = get_password(username) { [INFO] [stdout] | -------^^^^^^------------------------- help: try: `if get_password(username).is_err()` [INFO] [stdout] | [INFO] [stdout] = note: this will change drop order of the result, as well as all temporaries [INFO] [stdout] = note: add `#[allow(clippy::redundant_pattern_matching)]` if this is important [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/config.rs:292:52 [INFO] [stdout] | [INFO] [stdout] 292 | serde_yaml::to_writer(f, self).map_err(|e| io::Error::new(io::ErrorKind::Other, e)) [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] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 292 - serde_yaml::to_writer(f, self).map_err(|e| io::Error::new(io::ErrorKind::Other, e)) [INFO] [stdout] 292 + serde_yaml::to_writer(f, self).map_err(|e| io::Error::other(e)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: literal with an empty format string [INFO] [stdout] --> src/groups.rs:143:17 [INFO] [stdout] | [INFO] [stdout] 143 | "Session Duration", [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_literal [INFO] [stdout] = note: `#[warn(clippy::print_literal)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 142 - "\t{}: {}", [INFO] [stdout] 143 - "Session Duration", [INFO] [stdout] 142 + "\tSession Duration: {}", [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: literal with an empty format string [INFO] [stdout] --> src/groups.rs:147:34 [INFO] [stdout] | [INFO] [stdout] 147 | println!("\t{}: {}", "Session Duration", "implicit".blue(),); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_literal [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 147 - println!("\t{}: {}", "Session Duration", "implicit".blue(),); [INFO] [stdout] 147 + println!("\tSession Duration: {}", "implicit".blue(),); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: literal with an empty format string [INFO] [stdout] --> src/groups.rs:151:34 [INFO] [stdout] | [INFO] [stdout] 151 | println!("\t{}: {}", "STS Endpoint", endpoint.as_str().blue(),); [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_literal [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 151 - println!("\t{}: {}", "STS Endpoint", endpoint.as_str().blue(),); [INFO] [stdout] 151 + println!("\tSTS Endpoint: {}", endpoint.as_str().blue(),); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: literal with an empty format string [INFO] [stdout] --> src/groups.rs:153:34 [INFO] [stdout] | [INFO] [stdout] 153 | println!("\t{}: {}", "STS Endpoint", "default".blue()); [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_literal [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 153 - println!("\t{}: {}", "STS Endpoint", "default".blue()); [INFO] [stdout] 153 + println!("\tSTS Endpoint: {}", "default".blue()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: literal with an empty format string [INFO] [stdout] --> src/groups.rs:156:28 [INFO] [stdout] | [INFO] [stdout] 156 | println!("\n\t{}", "Sessions"); [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_literal [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 156 - println!("\n\t{}", "Sessions"); [INFO] [stdout] 156 + println!("\n\tSessions"); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty string literal in `println!` [INFO] [stdout] --> src/groups.rs:183:9 [INFO] [stdout] | [INFO] [stdout] 183 | println!(""); [INFO] [stdout] | ^^^^^^^^^--^ [INFO] [stdout] | | [INFO] [stdout] | help: remove the empty string [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stdout] = note: `#[warn(clippy::println_empty_string)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/groups.rs:217:18 [INFO] [stdout] | [INFO] [stdout] 217 | .into_iter() [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this pattern creates a reference to a reference [INFO] [stdout] --> src/groups.rs:218:23 [INFO] [stdout] | [INFO] [stdout] 218 | .map(|ref a| a.name.clone()) [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 218 - .map(|ref a| a.name.clone()) [INFO] [stdout] 218 + .map(|a| a.name.clone()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/groups.rs:222:17 [INFO] [stdout] | [INFO] [stdout] 222 | / (&accounts) [INFO] [stdout] 223 | | .into_iter() [INFO] [stdout] 224 | | .filter(|a| !existing_names.contains(&a.name)) [INFO] [stdout] 225 | | .map(|a| a.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] 222 ~ (&accounts) [INFO] [stdout] 223 + .into_iter() [INFO] [stdout] 224 + .filter(|a| !existing_names.contains(&a.name)).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/groups.rs:223:22 [INFO] [stdout] | [INFO] [stdout] 223 | .into_iter() [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/groups.rs:269:15 [INFO] [stdout] | [INFO] [stdout] 269 | accounts: &Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 269 - accounts: &Vec, [INFO] [stdout] 269 + accounts: &[AWSAccountInfo], [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/groups.rs:286:15 [INFO] [stdout] | [INFO] [stdout] 286 | accounts: &Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 286 - accounts: &Vec, [INFO] [stdout] 286 + accounts: &[AWSAccountInfo], [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/groups.rs:287:12 [INFO] [stdout] | [INFO] [stdout] 287 | names: &Vec, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 287 - names: &Vec, [INFO] [stdout] 287 + names: &[String], [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `GET` contains a capitalized acronym [INFO] [stdout] --> src/keycloak/form.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | GET, [INFO] [stdout] | ^^^ help: consider making the acronym lowercase, except the initial letter: `Get` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] = note: `#[warn(clippy::upper_case_acronyms)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `POST` contains a capitalized acronym [INFO] [stdout] --> src/keycloak/form.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | POST, [INFO] [stdout] | ^^^^ help: consider making the acronym lowercase, except the initial letter: `Post` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/keycloak/form.rs:26:12 [INFO] [stdout] | [INFO] [stdout] 26 | if forms.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `forms.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/keycloak/form.rs:79:8 [INFO] [stdout] | [INFO] [stdout] 79 | if elements.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `elements.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/keycloak/login.rs:76:27 [INFO] [stdout] | [INFO] [stdout] 76 | let doc = submit_form(&client, cookie_jar, login_url, ¶ms)?; [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] --> src/keycloak/login.rs:105:27 [INFO] [stdout] | [INFO] [stdout] 105 | let doc = submit_form(&client, cookie_jar, &totp.action, ¶ms)?; [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: useless use of `format!` [INFO] [stdout] --> src/keycloak/login.rs:136:44 [INFO] [stdout] | [INFO] [stdout] 136 | let cookie = cookie::Cookie::parse(format!("{}", raw_cookie.to_str().unwrap())).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `raw_cookie.to_str().unwrap().to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enclosing `Ok` and `?` operator are unneeded [INFO] [stdout] --> src/keycloak/login.rs:205:5 [INFO] [stdout] | [INFO] [stdout] 205 | / Ok(res.text().map_err(|e| { [INFO] [stdout] 206 | | trace!("get_login_page.end.map_err"); [INFO] [stdout] 207 | | error!("get_login_page: {:?}", e); [INFO] [stdout] 208 | | KeycloakError::new(KeycloakErrorKind::Io, &e.to_string()) [INFO] [stdout] 209 | | })?) [INFO] [stdout] | |________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] = note: `#[warn(clippy::needless_question_mark)]` on by default [INFO] [stdout] help: remove the enclosing `Ok` and `?` operator [INFO] [stdout] | [INFO] [stdout] 205 ~ res.text().map_err(|e| { [INFO] [stdout] 206 | trace!("get_login_page.end.map_err"); [INFO] [stdout] 207 | error!("get_login_page: {:?}", e); [INFO] [stdout] 208 | KeycloakError::new(KeycloakErrorKind::Io, &e.to_string()) [INFO] [stdout] 209 ~ }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/keycloak/login.rs:200:44 [INFO] [stdout] | [INFO] [stdout] 200 | let cookie = cookie::Cookie::parse(format!("{}", raw_cookie.to_str().unwrap())).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `raw_cookie.to_str().unwrap().to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enclosing `Ok` and `?` operator are unneeded [INFO] [stdout] --> src/keycloak/login.rs:317:5 [INFO] [stdout] | [INFO] [stdout] 317 | / Ok(res [INFO] [stdout] 318 | | .text() [INFO] [stdout] 319 | | .map_err(|e| KeycloakError::new(KeycloakErrorKind::Io, &e.to_string()))?) [INFO] [stdout] | |_________________________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] help: remove the enclosing `Ok` and `?` operator [INFO] [stdout] | [INFO] [stdout] 317 ~ res [INFO] [stdout] 318 | .text() [INFO] [stdout] 319 ~ .map_err(|e| KeycloakError::new(KeycloakErrorKind::Io, &e.to_string())) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/keycloak/login.rs:312:44 [INFO] [stdout] | [INFO] [stdout] 312 | let cookie = cookie::Cookie::parse(format!("{}", raw_cookie.to_str().unwrap())).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `raw_cookie.to_str().unwrap().to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of `.map(...).all(identity)` [INFO] [stdout] --> src/refresh.rs:42:10 [INFO] [stdout] | [INFO] [stdout] 42 | .map(|(_, group)| group.accounts.iter().all(|a| a.session_valid())) [INFO] [stdout] | __________^ [INFO] [stdout] 43 | | .all(|b| b) [INFO] [stdout] | |___________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_all_any_identity [INFO] [stdout] = note: `#[warn(clippy::map_all_any_identity)]` on by default [INFO] [stdout] help: use `.all(...)` instead [INFO] [stdout] | [INFO] [stdout] 42 - .map(|(_, group)| group.accounts.iter().all(|a| a.session_valid())) [INFO] [stdout] 43 - .all(|b| b) [INFO] [stdout] 42 + .all(|(_, group)| group.accounts.iter().all(|a| a.session_valid())) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/config.rs:53:5 [INFO] [stdout] | [INFO] [stdout] 53 | format!("{}", path.to_str().unwrap()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `path.to_str().unwrap().to_string()` [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] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/refresh.rs:70:17 [INFO] [stdout] | [INFO] [stdout] 70 | &mfa.trim(), [INFO] [stdout] | ^^^^^^^^^^^ help: change this to: `mfa.trim()` [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: manual implementation of `ok` [INFO] [stdout] --> src/config.rs:69:36 [INFO] [stdout] | [INFO] [stdout] 69 | cfg.password = match get_password(username) { [INFO] [stdout] | ____________________________________^ [INFO] [stdout] 70 | | Ok(p) => Some(p), [INFO] [stdout] 71 | | Err(_) => None, [INFO] [stdout] 72 | | }; [INFO] [stdout] | |_____________________^ help: replace with: `get_password(username).ok()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_ok_err [INFO] [stdout] = note: `#[warn(clippy::manual_ok_err)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/config.rs:77:27 [INFO] [stdout] | [INFO] [stdout] 77 | Err(e) => Err(io::Error::new(io::ErrorKind::Other, e)), [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] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 77 - Err(e) => Err(io::Error::new(io::ErrorKind::Other, e)), [INFO] [stdout] 77 + Err(e) => Err(io::Error::other(e)), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `format!` in `print!` args [INFO] [stdout] --> src/config.rs:95:13 [INFO] [stdout] | [INFO] [stdout] 95 | / print!( [INFO] [stdout] 96 | | "{} {}", [INFO] [stdout] 97 | | "?".green(), [INFO] [stdout] 98 | | format!("{} [{}]: ", question, default), [INFO] [stdout] 99 | | ); [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: combine the `format!(..)` arguments with the outer `print!(..)` call [INFO] [stdout] = help: or consider changing `format!` to `format_args!` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#format_in_format_args [INFO] [stdout] = note: `#[warn(clippy::format_in_format_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `format!` in `print!` args [INFO] [stdout] --> src/config.rs:102:13 [INFO] [stdout] | [INFO] [stdout] 102 | print!("{} {}", "?".green(), format!("{}: ", question),); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: combine the `format!(..)` arguments with the outer `print!(..)` call [INFO] [stdout] = help: or consider changing `format!` to `format_args!` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#format_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/config.rs:111:16 [INFO] [stdout] | [INFO] [stdout] 111 | if s.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `s.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `.as_ref().map(|s| s.as_str())` on an `Option` value [INFO] [stdout] --> src/config.rs:124:28 [INFO] [stdout] | [INFO] [stdout] 124 | ask_question(question, masked.as_ref().map(|s| s.as_str())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using as_deref: `masked.as_deref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_as_ref_deref [INFO] [stdout] = note: `#[warn(clippy::option_as_ref_deref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/config.rs:134:35 [INFO] [stdout] | [INFO] [stdout] 134 | if password == LINE_ENDING || password.len() == 0 { [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#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_err()` [INFO] [stdout] --> src/config.rs:149:12 [INFO] [stdout] | [INFO] [stdout] 149 | if let Err(_) = io::stdin().read_line(&mut buf) { [INFO] [stdout] | -------^^^^^^---------------------------------- help: try: `if io::stdin().read_line(&mut buf).is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `print!` args [INFO] [stdout] --> src/refresh.rs:224:85 [INFO] [stdout] | [INFO] [stdout] 224 | .with(Modify::new(Columns::single(1)).with(Alignment::center())) [INFO] [stdout] | _____________________________________________________________________________________^ [INFO] [stdout] 225 | | .to_string() [INFO] [stdout] | |________________________________^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] = note: `#[warn(clippy::to_string_in_format_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (10/7) [INFO] [stdout] --> src/refresh.rs:288:1 [INFO] [stdout] | [INFO] [stdout] 288 | / fn refresh_account( [INFO] [stdout] 289 | | session_duration: Option, [INFO] [stdout] 290 | | account: &config::Account, [INFO] [stdout] 291 | | mut cookie_jar: CookieJar, [INFO] [stdout] ... | [INFO] [stdout] 298 | | sts_endpoint: Option, [INFO] [stdout] 299 | | ) -> Result<(RefreshAccountOutput, CookieJar), RefreshError> { [INFO] [stdout] | |____________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] = note: `#[warn(clippy::too_many_arguments)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/refresh.rs:387:13 [INFO] [stdout] | [INFO] [stdout] 387 | / return Ok(( [INFO] [stdout] 388 | | RefreshAccountOutput { [INFO] [stdout] 389 | | account, [INFO] [stdout] 390 | | credentials: Some(res), [INFO] [stdout] ... | [INFO] [stdout] 393 | | cookie_jar, [INFO] [stdout] 394 | | )); [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 387 ~ Ok(( [INFO] [stdout] 388 + RefreshAccountOutput { [INFO] [stdout] 389 + account, [INFO] [stdout] 390 + credentials: Some(res), [INFO] [stdout] 391 + renewed: true, [INFO] [stdout] 392 + }, [INFO] [stdout] 393 + cookie_jar, [INFO] [stdout] 394 ~ )) [INFO] [stdout] 395 | } [INFO] [stdout] ... [INFO] [stdout] 399 | } [INFO] [stdout] 400 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/refresh.rs:398:13 [INFO] [stdout] | [INFO] [stdout] 398 | return Err(RefreshError::new(&account.name, &e.to_string())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 398 ~ Err(RefreshError::new(&account.name, &e.to_string())) [INFO] [stdout] 399 | } [INFO] [stdout] 400 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: derefed type is same as origin [INFO] [stdout] --> src/refresh.rs:321:9 [INFO] [stdout] | [INFO] [stdout] 321 | mfa_device.as_deref(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `mfa_device` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_option_as_deref [INFO] [stdout] = note: `#[warn(clippy::needless_option_as_deref)]` 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/refresh.rs:322:9 [INFO] [stdout] | [INFO] [stdout] 322 | &mfa.trim(), [INFO] [stdout] | ^^^^^^^^^^^ help: change this to: `mfa.trim()` [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: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/config.rs:181:23 [INFO] [stdout] | [INFO] [stdout] 181 | cfg.idp_url = idp_url.into(); [INFO] [stdout] | ^^^^^^^^^^^^^^ help: consider removing `.into()`: `idp_url` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::as_ref` [INFO] [stdout] --> src/config.rs:186:9 [INFO] [stdout] | [INFO] [stdout] 186 | / match cfg.username { [INFO] [stdout] 187 | | Some(ref s) => Some(s), [INFO] [stdout] 188 | | None => None, [INFO] [stdout] 189 | | }, [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_as_ref [INFO] [stdout] = note: `#[warn(clippy::match_as_ref)]` on by default [INFO] [stdout] help: use `Option::as_ref()` directly [INFO] [stdout] | [INFO] [stdout] 186 - match cfg.username { [INFO] [stdout] 187 - Some(ref s) => Some(s), [INFO] [stdout] 188 - None => None, [INFO] [stdout] 189 - }, [INFO] [stdout] 186 + cfg.username.as_ref().map(|x| x as _), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/config.rs:195:32 [INFO] [stdout] | [INFO] [stdout] 195 | match get_password(&cfg.username.as_ref().unwrap()) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `cfg.username.as_ref().unwrap()` [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: length comparison to zero [INFO] [stdout] --> src/config.rs:197:24 [INFO] [stdout] | [INFO] [stdout] 197 | if p.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `p.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/config.rs:211:17 [INFO] [stdout] | [INFO] [stdout] 211 | &cfg.username.as_ref().unwrap(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `cfg.username.as_ref().unwrap()` [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/config.rs:212:17 [INFO] [stdout] | [INFO] [stdout] 212 | &cfg.password.as_ref().unwrap(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `cfg.password.as_ref().unwrap()` [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] --> src/config.rs:274:5 [INFO] [stdout] | [INFO] [stdout] 274 | return true; [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] 274 - return true; [INFO] [stdout] 274 + true [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_err()` [INFO] [stdout] --> src/config.rs:261:16 [INFO] [stdout] | [INFO] [stdout] 261 | if let Err(_) = panic::catch_unwind(|| { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this will change drop order of the result, as well as all temporaries [INFO] [stdout] = note: add `#[allow(clippy::redundant_pattern_matching)]` if this is important [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 261 ~ if panic::catch_unwind(|| { [INFO] [stdout] 262 + if let Err(_) = get_password(username) { [INFO] [stdout] 263 + if let Some(password) = password_prompt("IDP Password", Some("")) { [INFO] [stdout] 264 + set_password(username, &password) [INFO] [stdout] 265 + .expect("Could not save password in credentials storage"); [INFO] [stdout] 266 + } [INFO] [stdout] 267 + } [INFO] [stdout] 268 ~ }).is_err() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_err()` [INFO] [stdout] --> src/config.rs:262:20 [INFO] [stdout] | [INFO] [stdout] 262 | if let Err(_) = get_password(username) { [INFO] [stdout] | -------^^^^^^------------------------- help: try: `if get_password(username).is_err()` [INFO] [stdout] | [INFO] [stdout] = note: this will change drop order of the result, as well as all temporaries [INFO] [stdout] = note: add `#[allow(clippy::redundant_pattern_matching)]` if this is important [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/config.rs:292:52 [INFO] [stdout] | [INFO] [stdout] 292 | serde_yaml::to_writer(f, self).map_err(|e| io::Error::new(io::ErrorKind::Other, e)) [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] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 292 - serde_yaml::to_writer(f, self).map_err(|e| io::Error::new(io::ErrorKind::Other, e)) [INFO] [stdout] 292 + serde_yaml::to_writer(f, self).map_err(|e| io::Error::other(e)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: literal with an empty format string [INFO] [stdout] --> src/groups.rs:143:17 [INFO] [stdout] | [INFO] [stdout] 143 | "Session Duration", [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_literal [INFO] [stdout] = note: `#[warn(clippy::print_literal)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 142 - "\t{}: {}", [INFO] [stdout] 143 - "Session Duration", [INFO] [stdout] 142 + "\tSession Duration: {}", [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: literal with an empty format string [INFO] [stdout] --> src/groups.rs:147:34 [INFO] [stdout] | [INFO] [stdout] 147 | println!("\t{}: {}", "Session Duration", "implicit".blue(),); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_literal [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 147 - println!("\t{}: {}", "Session Duration", "implicit".blue(),); [INFO] [stdout] 147 + println!("\tSession Duration: {}", "implicit".blue(),); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: literal with an empty format string [INFO] [stdout] --> src/groups.rs:151:34 [INFO] [stdout] | [INFO] [stdout] 151 | println!("\t{}: {}", "STS Endpoint", endpoint.as_str().blue(),); [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_literal [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 151 - println!("\t{}: {}", "STS Endpoint", endpoint.as_str().blue(),); [INFO] [stdout] 151 + println!("\tSTS Endpoint: {}", endpoint.as_str().blue(),); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: literal with an empty format string [INFO] [stdout] --> src/groups.rs:153:34 [INFO] [stdout] | [INFO] [stdout] 153 | println!("\t{}: {}", "STS Endpoint", "default".blue()); [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_literal [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 153 - println!("\t{}: {}", "STS Endpoint", "default".blue()); [INFO] [stdout] 153 + println!("\tSTS Endpoint: {}", "default".blue()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: literal with an empty format string [INFO] [stdout] --> src/groups.rs:156:28 [INFO] [stdout] | [INFO] [stdout] 156 | println!("\n\t{}", "Sessions"); [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_literal [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 156 - println!("\n\t{}", "Sessions"); [INFO] [stdout] 156 + println!("\n\tSessions"); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty string literal in `println!` [INFO] [stdout] --> src/groups.rs:183:9 [INFO] [stdout] | [INFO] [stdout] 183 | println!(""); [INFO] [stdout] | ^^^^^^^^^--^ [INFO] [stdout] | | [INFO] [stdout] | help: remove the empty string [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stdout] = note: `#[warn(clippy::println_empty_string)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/saml/mod.rs:67:50 [INFO] [stdout] | [INFO] [stdout] 67 | String::from_utf8(BASE64_STANDARD.decode(&assertion_b64).unwrap()).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^ help: change this to: `assertion_b64` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `attribute.values.get(0)` [INFO] [stdout] --> src/saml/mod.rs:91:47 [INFO] [stdout] | [INFO] [stdout] 91 | assertion.role_session_name = attribute.values.get(0).unwrap().value.clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `attribute.values.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: accessing first element with `attribute.values.get(0)` [INFO] [stdout] --> src/saml/mod.rs:95:36 [INFO] [stdout] | [INFO] [stdout] 95 | i64::from_str(&attribute.values.get(0).unwrap().value.clone()).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `attribute.values.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: unneeded `return` statement [INFO] [stdout] --> src/saml/mod.rs:123:5 [INFO] [stdout] | [INFO] [stdout] 123 | return (split[4].into(), split[5].to_owned().replace("role/", "")); [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] 123 - return (split[4].into(), split[5].to_owned().replace("role/", "")); [INFO] [stdout] 123 + (split[4].into(), split[5].to_owned().replace("role/", "")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/groups.rs:217:18 [INFO] [stdout] | [INFO] [stdout] 217 | .into_iter() [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this pattern creates a reference to a reference [INFO] [stdout] --> src/groups.rs:218:23 [INFO] [stdout] | [INFO] [stdout] 218 | .map(|ref a| a.name.clone()) [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 218 - .map(|ref a| a.name.clone()) [INFO] [stdout] 218 + .map(|a| a.name.clone()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/groups.rs:222:17 [INFO] [stdout] | [INFO] [stdout] 222 | / (&accounts) [INFO] [stdout] 223 | | .into_iter() [INFO] [stdout] 224 | | .filter(|a| !existing_names.contains(&a.name)) [INFO] [stdout] 225 | | .map(|a| a.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] 222 ~ (&accounts) [INFO] [stdout] 223 + .into_iter() [INFO] [stdout] 224 + .filter(|a| !existing_names.contains(&a.name)).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/groups.rs:223:22 [INFO] [stdout] | [INFO] [stdout] 223 | .into_iter() [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/groups.rs:269:15 [INFO] [stdout] | [INFO] [stdout] 269 | accounts: &Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 269 - accounts: &Vec, [INFO] [stdout] 269 + accounts: &[AWSAccountInfo], [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/groups.rs:286:15 [INFO] [stdout] | [INFO] [stdout] 286 | accounts: &Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 286 - accounts: &Vec, [INFO] [stdout] 286 + accounts: &[AWSAccountInfo], [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/groups.rs:287:12 [INFO] [stdout] | [INFO] [stdout] 287 | names: &Vec, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 287 - names: &Vec, [INFO] [stdout] 287 + names: &[String], [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `GET` contains a capitalized acronym [INFO] [stdout] --> src/keycloak/form.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | GET, [INFO] [stdout] | ^^^ help: consider making the acronym lowercase, except the initial letter: `Get` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] = note: `#[warn(clippy::upper_case_acronyms)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `POST` contains a capitalized acronym [INFO] [stdout] --> src/keycloak/form.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | POST, [INFO] [stdout] | ^^^^ help: consider making the acronym lowercase, except the initial letter: `Post` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty string literal in `println!` [INFO] [stdout] --> src/main.rs:82:9 [INFO] [stdout] | [INFO] [stdout] 82 | println!(""); [INFO] [stdout] | ^^^^^^^^^--^ [INFO] [stdout] | | [INFO] [stdout] | help: remove the empty string [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/keycloak/form.rs:26:12 [INFO] [stdout] | [INFO] [stdout] 26 | if forms.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `forms.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/keycloak/form.rs:79:8 [INFO] [stdout] | [INFO] [stdout] 79 | if elements.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `elements.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/keycloak/login.rs:76:27 [INFO] [stdout] | [INFO] [stdout] 76 | let doc = submit_form(&client, cookie_jar, login_url, ¶ms)?; [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] --> src/keycloak/login.rs:105:27 [INFO] [stdout] | [INFO] [stdout] 105 | let doc = submit_form(&client, cookie_jar, &totp.action, ¶ms)?; [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: useless use of `format!` [INFO] [stdout] --> src/keycloak/login.rs:136:44 [INFO] [stdout] | [INFO] [stdout] 136 | let cookie = cookie::Cookie::parse(format!("{}", raw_cookie.to_str().unwrap())).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `raw_cookie.to_str().unwrap().to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enclosing `Ok` and `?` operator are unneeded [INFO] [stdout] --> src/keycloak/login.rs:205:5 [INFO] [stdout] | [INFO] [stdout] 205 | / Ok(res.text().map_err(|e| { [INFO] [stdout] 206 | | trace!("get_login_page.end.map_err"); [INFO] [stdout] 207 | | error!("get_login_page: {:?}", e); [INFO] [stdout] 208 | | KeycloakError::new(KeycloakErrorKind::Io, &e.to_string()) [INFO] [stdout] 209 | | })?) [INFO] [stdout] | |________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] = note: `#[warn(clippy::needless_question_mark)]` on by default [INFO] [stdout] help: remove the enclosing `Ok` and `?` operator [INFO] [stdout] | [INFO] [stdout] 205 ~ res.text().map_err(|e| { [INFO] [stdout] 206 | trace!("get_login_page.end.map_err"); [INFO] [stdout] 207 | error!("get_login_page: {:?}", e); [INFO] [stdout] 208 | KeycloakError::new(KeycloakErrorKind::Io, &e.to_string()) [INFO] [stdout] 209 ~ }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/keycloak/login.rs:200:44 [INFO] [stdout] | [INFO] [stdout] 200 | let cookie = cookie::Cookie::parse(format!("{}", raw_cookie.to_str().unwrap())).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `raw_cookie.to_str().unwrap().to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enclosing `Ok` and `?` operator are unneeded [INFO] [stdout] --> src/keycloak/login.rs:317:5 [INFO] [stdout] | [INFO] [stdout] 317 | / Ok(res [INFO] [stdout] 318 | | .text() [INFO] [stdout] 319 | | .map_err(|e| KeycloakError::new(KeycloakErrorKind::Io, &e.to_string()))?) [INFO] [stdout] | |_________________________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] help: remove the enclosing `Ok` and `?` operator [INFO] [stdout] | [INFO] [stdout] 317 ~ res [INFO] [stdout] 318 | .text() [INFO] [stdout] 319 ~ .map_err(|e| KeycloakError::new(KeycloakErrorKind::Io, &e.to_string())) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/keycloak/login.rs:312:44 [INFO] [stdout] | [INFO] [stdout] 312 | let cookie = cookie::Cookie::parse(format!("{}", raw_cookie.to_str().unwrap())).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `raw_cookie.to_str().unwrap().to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of `.map(...).all(identity)` [INFO] [stdout] --> src/refresh.rs:42:10 [INFO] [stdout] | [INFO] [stdout] 42 | .map(|(_, group)| group.accounts.iter().all(|a| a.session_valid())) [INFO] [stdout] | __________^ [INFO] [stdout] 43 | | .all(|b| b) [INFO] [stdout] | |___________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_all_any_identity [INFO] [stdout] = note: `#[warn(clippy::map_all_any_identity)]` on by default [INFO] [stdout] help: use `.all(...)` instead [INFO] [stdout] | [INFO] [stdout] 42 - .map(|(_, group)| group.accounts.iter().all(|a| a.session_valid())) [INFO] [stdout] 43 - .all(|b| b) [INFO] [stdout] 42 + .all(|(_, group)| group.accounts.iter().all(|a| a.session_valid())) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/refresh.rs:70:17 [INFO] [stdout] | [INFO] [stdout] 70 | &mfa.trim(), [INFO] [stdout] | ^^^^^^^^^^^ help: change this to: `mfa.trim()` [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: `to_string` applied to a type that implements `Display` in `print!` args [INFO] [stdout] --> src/refresh.rs:224:85 [INFO] [stdout] | [INFO] [stdout] 224 | .with(Modify::new(Columns::single(1)).with(Alignment::center())) [INFO] [stdout] | _____________________________________________________________________________________^ [INFO] [stdout] 225 | | .to_string() [INFO] [stdout] | |________________________________^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] = note: `#[warn(clippy::to_string_in_format_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (10/7) [INFO] [stdout] --> src/refresh.rs:288:1 [INFO] [stdout] | [INFO] [stdout] 288 | / fn refresh_account( [INFO] [stdout] 289 | | session_duration: Option, [INFO] [stdout] 290 | | account: &config::Account, [INFO] [stdout] 291 | | mut cookie_jar: CookieJar, [INFO] [stdout] ... | [INFO] [stdout] 298 | | sts_endpoint: Option, [INFO] [stdout] 299 | | ) -> Result<(RefreshAccountOutput, CookieJar), RefreshError> { [INFO] [stdout] | |____________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] = note: `#[warn(clippy::too_many_arguments)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/refresh.rs:387:13 [INFO] [stdout] | [INFO] [stdout] 387 | / return Ok(( [INFO] [stdout] 388 | | RefreshAccountOutput { [INFO] [stdout] 389 | | account, [INFO] [stdout] 390 | | credentials: Some(res), [INFO] [stdout] ... | [INFO] [stdout] 393 | | cookie_jar, [INFO] [stdout] 394 | | )); [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 387 ~ Ok(( [INFO] [stdout] 388 + RefreshAccountOutput { [INFO] [stdout] 389 + account, [INFO] [stdout] 390 + credentials: Some(res), [INFO] [stdout] 391 + renewed: true, [INFO] [stdout] 392 + }, [INFO] [stdout] 393 + cookie_jar, [INFO] [stdout] 394 ~ )) [INFO] [stdout] 395 | } [INFO] [stdout] ... [INFO] [stdout] 399 | } [INFO] [stdout] 400 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/refresh.rs:398:13 [INFO] [stdout] | [INFO] [stdout] 398 | return Err(RefreshError::new(&account.name, &e.to_string())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 398 ~ Err(RefreshError::new(&account.name, &e.to_string())) [INFO] [stdout] 399 | } [INFO] [stdout] 400 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: derefed type is same as origin [INFO] [stdout] --> src/refresh.rs:321:9 [INFO] [stdout] | [INFO] [stdout] 321 | mfa_device.as_deref(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `mfa_device` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_option_as_deref [INFO] [stdout] = note: `#[warn(clippy::needless_option_as_deref)]` 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/refresh.rs:322:9 [INFO] [stdout] | [INFO] [stdout] 322 | &mfa.trim(), [INFO] [stdout] | ^^^^^^^^^^^ help: change this to: `mfa.trim()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/saml/mod.rs:67:50 [INFO] [stdout] | [INFO] [stdout] 67 | String::from_utf8(BASE64_STANDARD.decode(&assertion_b64).unwrap()).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^ help: change this to: `assertion_b64` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `attribute.values.get(0)` [INFO] [stdout] --> src/saml/mod.rs:91:47 [INFO] [stdout] | [INFO] [stdout] 91 | assertion.role_session_name = attribute.values.get(0).unwrap().value.clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `attribute.values.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: accessing first element with `attribute.values.get(0)` [INFO] [stdout] --> src/saml/mod.rs:95:36 [INFO] [stdout] | [INFO] [stdout] 95 | i64::from_str(&attribute.values.get(0).unwrap().value.clone()).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `attribute.values.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: unneeded `return` statement [INFO] [stdout] --> src/saml/mod.rs:123:5 [INFO] [stdout] | [INFO] [stdout] 123 | return (split[4].into(), split[5].to_owned().replace("role/", "")); [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] 123 - return (split[4].into(), split[5].to_owned().replace("role/", "")); [INFO] [stdout] 123 + (split[4].into(), split[5].to_owned().replace("role/", "")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty string literal in `println!` [INFO] [stdout] --> src/main.rs:82:9 [INFO] [stdout] | [INFO] [stdout] 82 | println!(""); [INFO] [stdout] | ^^^^^^^^^--^ [INFO] [stdout] | | [INFO] [stdout] | help: remove the empty string [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 51.94s [INFO] running `Command { std: "docker" "inspect" "5f5b0586158e78139daf6343b99932b877235c448cf85e9911d5096b078712ff", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "5f5b0586158e78139daf6343b99932b877235c448cf85e9911d5096b078712ff", kill_on_drop: false }` [INFO] [stdout] 5f5b0586158e78139daf6343b99932b877235c448cf85e9911d5096b078712ff