[INFO] crate s3rs 0.1.14 is already in cache [INFO] extracting crate s3rs 0.1.14 into work/ex/clippy-test-run/sources/stable/reg/s3rs/0.1.14 [INFO] extracting crate s3rs 0.1.14 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/s3rs/0.1.14 [INFO] validating manifest of s3rs-0.1.14 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of s3rs-0.1.14 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing s3rs-0.1.14 [INFO] finished frobbing s3rs-0.1.14 [INFO] frobbed toml for s3rs-0.1.14 written to work/ex/clippy-test-run/sources/stable/reg/s3rs/0.1.14/Cargo.toml [INFO] started frobbing s3rs-0.1.14 [INFO] finished frobbing s3rs-0.1.14 [INFO] frobbed toml for s3rs-0.1.14 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/s3rs/0.1.14/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting s3rs-0.1.14 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-5/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/s3rs/0.1.14:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 6aae7d72098aaa4d4876b9763b603d0045b116d6e1ce31df2b6863a4837f45ad [INFO] running `"docker" "start" "-a" "6aae7d72098aaa4d4876b9763b603d0045b116d6e1ce31df2b6863a4837f45ad"` [INFO] [stderr] Checking hmac-sha1 v0.1.3 [INFO] [stderr] Checking termios v0.3.1 [INFO] [stderr] Checking generic-array v0.8.3 [INFO] [stderr] Checking quick-xml v0.12.4 [INFO] [stderr] Checking hyper v0.12.23 [INFO] [stderr] Checking interactor v0.1.1 [INFO] [stderr] Checking crypto-mac v0.4.0 [INFO] [stderr] Checking block-buffer v0.2.0 [INFO] [stderr] Checking digest v0.6.2 [INFO] [stderr] Checking hmac v0.4.2 [INFO] [stderr] Checking sha2 v0.6.0 [INFO] [stderr] Checking hyper-tls v0.3.1 [INFO] [stderr] Checking reqwest v0.9.9 [INFO] [stderr] Checking s3rs v0.1.14 (/opt/crater/workdir) [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> src/main.rs:310:9 [INFO] [stderr] | [INFO] [stderr] 310 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::println_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: using `println!("")` [INFO] [stderr] --> src/main.rs:310:9 [INFO] [stderr] | [INFO] [stderr] 310 | println!(""); [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `println!()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::println_empty_string)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handler/aws.rs:108:5 [INFO] [stderr] | [INFO] [stderr] 108 | return string_to_signed [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `string_to_signed` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handler/aws.rs:205:5 [INFO] [stderr] | [INFO] [stderr] 205 | return string_to_signed [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `string_to_signed` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handler/mod.rs:475:30 [INFO] [stderr] | [INFO] [stderr] 475 | Ok(_) => return Ok(()), [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handler/mod.rs:476:31 [INFO] [stderr] | [INFO] [stderr] 476 | Err(_) => return Err("write file error") //XXX [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err("write file error")` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handler/mod.rs:481:30 [INFO] [stderr] | [INFO] [stderr] 481 | Ok(_) => return Ok(()), [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handler/mod.rs:482:31 [INFO] [stderr] | [INFO] [stderr] 482 | Err(_) => return Err("write file error") //XXX [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err("write file error")` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handler/mod.rs:514:87 [INFO] [stderr] | [INFO] [stderr] 514 | Ok(b) => { println!("{}", std::str::from_utf8(&b).unwrap_or("")); return Ok(()) }, [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handler/mod.rs:515:31 [INFO] [stderr] | [INFO] [stderr] 515 | Err(e) => return Err(e) [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `Err(e)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handler/mod.rs:520:87 [INFO] [stderr] | [INFO] [stderr] 520 | Ok(b) => { println!("{}", std::str::from_utf8(&b).unwrap_or("")); return Ok(()) }, [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handler/mod.rs:521:31 [INFO] [stderr] | [INFO] [stderr] 521 | Err(e) => return Err(e) [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `Err(e)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'std::env::home_dir': This function's behavior is unexpected and probably not what you want. Consider using the home_dir function from https://crates.io/crates/dirs instead. [INFO] [stderr] --> src/main.rs:177:23 [INFO] [stderr] | [INFO] [stderr] 177 | let mut s3rscfg = std::env::home_dir().unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(deprecated)] on by default [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handler/aws.rs:108:5 [INFO] [stderr] | [INFO] [stderr] 108 | return string_to_signed [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `string_to_signed` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handler/aws.rs:205:5 [INFO] [stderr] | [INFO] [stderr] 205 | return string_to_signed [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `string_to_signed` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handler/aws.rs:220:5 [INFO] [stderr] | [INFO] [stderr] 220 | return string_to_signed [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `string_to_signed` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handler/mod.rs:475:30 [INFO] [stderr] | [INFO] [stderr] 475 | Ok(_) => return Ok(()), [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handler/mod.rs:476:31 [INFO] [stderr] | [INFO] [stderr] 476 | Err(_) => return Err("write file error") //XXX [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err("write file error")` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handler/mod.rs:481:30 [INFO] [stderr] | [INFO] [stderr] 481 | Ok(_) => return Ok(()), [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handler/mod.rs:482:31 [INFO] [stderr] | [INFO] [stderr] 482 | Err(_) => return Err("write file error") //XXX [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err("write file error")` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handler/mod.rs:514:87 [INFO] [stderr] | [INFO] [stderr] 514 | Ok(b) => { println!("{}", std::str::from_utf8(&b).unwrap_or("")); return Ok(()) }, [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handler/mod.rs:515:31 [INFO] [stderr] | [INFO] [stderr] 515 | Err(e) => return Err(e) [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `Err(e)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handler/mod.rs:520:87 [INFO] [stderr] | [INFO] [stderr] 520 | Ok(b) => { println!("{}", std::str::from_utf8(&b).unwrap_or("")); return Ok(()) }, [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handler/mod.rs:521:31 [INFO] [stderr] | [INFO] [stderr] 521 | Err(e) => return Err(e) [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `Err(e)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'std::env::home_dir': This function's behavior is unexpected and probably not what you want. Consider using the home_dir function from https://crates.io/crates/dirs instead. [INFO] [stderr] --> src/main.rs:177:23 [INFO] [stderr] | [INFO] [stderr] 177 | let mut s3rscfg = std::env::home_dir().unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(deprecated)] on by default [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'core::str::::slice_unchecked': use `get_unchecked(begin..end)` instead [INFO] [stderr] --> src/handler/aws.rs:101:93 [INFO] [stderr] | [INFO] [stderr] 101 | Some(r) => string_to_signed.push_str(&format!("{}/{}/{}/aws4_request", time_str.slice_unchecked(0,8), r, endpoint_type)), [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'core::str::::slice_unchecked': use `get_unchecked(begin..end)` instead [INFO] [stderr] --> src/handler/aws.rs:102:97 [INFO] [stderr] | [INFO] [stderr] 102 | None => string_to_signed.push_str(&format!("{}/us-east-1/{}/aws4_request", time_str.slice_unchecked(0,8), endpoint_type)) [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/handler/aws.rs:61:30 [INFO] [stderr] | [INFO] [stderr] 61 | pub fn hash_payload(payload: &Vec) -> String { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/handler/aws.rs:69:136 [INFO] [stderr] | [INFO] [stderr] 69 | fn aws_v4_canonical_request(http_method: &str, uri:&str, query_strings:&mut Vec<(&str, &str)>, headers:&mut Vec<(&str, &str)>, payload:&Vec) -> String { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/handler/aws.rs:91:144 [INFO] [stderr] | [INFO] [stderr] 91 | pub fn aws_v4_get_string_to_signed(http_method: &str, uri:&str, query_strings:&mut Vec<(&str, &str)>, headers:&mut Vec<(&str, &str)>, payload:&Vec, time_str:String, region: Option, iam: bool) -> String { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: this function has too many arguments (8/7) [INFO] [stderr] --> src/handler/aws.rs:91:1 [INFO] [stderr] | [INFO] [stderr] 91 | / pub fn aws_v4_get_string_to_signed(http_method: &str, uri:&str, query_strings:&mut Vec<(&str, &str)>, headers:&mut Vec<(&str, &str)>, payload:&Vec, time_str:String, region: Option, iam: bool) -> String { [INFO] [stderr] 92 | | let mut string_to_signed = String::from_str("AWS4-HMAC-SHA256\n").unwrap(); [INFO] [stderr] 93 | | string_to_signed.push_str(&time_str); [INFO] [stderr] 94 | | string_to_signed.push_str("\n"); [INFO] [stderr] ... | [INFO] [stderr] 108 | | return string_to_signed [INFO] [stderr] 109 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::too_many_arguments)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/handler/aws.rs:95:25 [INFO] [stderr] | [INFO] [stderr] 95 | let endpoint_type = match iam { [INFO] [stderr] | _________________________^ [INFO] [stderr] 96 | | true => "iam", [INFO] [stderr] 97 | | false => "s3" [INFO] [stderr] 98 | | }; [INFO] [stderr] | |_____^ help: consider using an if/else expression: `if iam { "iam" } else { "s3" }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/handler/aws.rs:133:5 [INFO] [stderr] | [INFO] [stderr] 133 | / match iam { [INFO] [stderr] 134 | | true => mac2.input(b"iam"), [INFO] [stderr] 135 | | false => mac2.input(b"s3") [INFO] [stderr] 136 | | } [INFO] [stderr] | |_____^ help: consider using an if/else expression: `if iam { mac2.input(b"iam") } else { mac2.input(b"s3") }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/handler/aws.rs:169:109 [INFO] [stderr] | [INFO] [stderr] 169 | pub fn aws_s3_v2_get_string_to_signed(http_method: &str, uri:&str, headers:&mut Vec<(&str, &str)>, content: &Vec) -> String { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/handler/aws.rs:172:8 [INFO] [stderr] | [INFO] [stderr] 172 | if content.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!content.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/handler/mod.rs:63:59 [INFO] [stderr] | [INFO] [stderr] 63 | fn aws_v2_request(&self, method: &str, uri: &str, qs: &Vec<(&str, &str)>, payload: &Vec) -> Result, &'static str>{ [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: change this to: `&[(&str, &str)]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/handler/mod.rs:63:88 [INFO] [stderr] | [INFO] [stderr] 63 | fn aws_v2_request(&self, method: &str, uri: &str, qs: &Vec<(&str, &str)>, payload: &Vec) -> Result, &'static str>{ [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/handler/mod.rs:76:9 [INFO] [stderr] | [INFO] [stderr] 76 | / match self.format { [INFO] [stderr] 77 | | Format::JSON => {query_strings.push(("format", "json"))} [INFO] [stderr] 78 | | _ => {} [INFO] [stderr] 79 | | } [INFO] [stderr] | |_________^ help: try this: `if let Format::JSON = self.format {query_strings.push(("format", "json"))}` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/handler/mod.rs:118:90 [INFO] [stderr] | [INFO] [stderr] 118 | fn aws_v4_request(&self, method: &str, virtural_host: Option, uri: &str, qs: &Vec<(&str, &str)>, payload: Vec) -> Result, &'static str>{ [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: change this to: `&[(&str, &str)]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/handler/mod.rs:145:9 [INFO] [stderr] | [INFO] [stderr] 145 | / match self.format { [INFO] [stderr] 146 | | Format::JSON => {query_strings.push(("format", "json"))} [INFO] [stderr] 147 | | _ => {} [INFO] [stderr] 148 | | } [INFO] [stderr] | |_________^ help: try this: `if let Format::JSON = self.format {query_strings.push(("format", "json"))}` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/handler/mod.rs:175:64 [INFO] [stderr] | [INFO] [stderr] 175 | self.region.clone().unwrap_or(String::from("us-east-1")), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| String::from("us-east-1"))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'core::str::::slice_unchecked': use `get_unchecked(begin..end)` instead [INFO] [stderr] --> src/handler/aws.rs:101:93 [INFO] [stderr] | [INFO] [stderr] 101 | Some(r) => string_to_signed.push_str(&format!("{}/{}/{}/aws4_request", time_str.slice_unchecked(0,8), r, endpoint_type)), [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'core::str::::slice_unchecked': use `get_unchecked(begin..end)` instead [INFO] [stderr] --> src/handler/aws.rs:102:97 [INFO] [stderr] | [INFO] [stderr] 102 | None => string_to_signed.push_str(&format!("{}/us-east-1/{}/aws4_request", time_str.slice_unchecked(0,8), endpoint_type)) [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: for loop over `result[1].as_array()`, which is an `Option`. This is more readably written as an `if let` statement. [INFO] [stderr] --> src/handler/mod.rs:211:37 [INFO] [stderr] | [INFO] [stderr] 211 | for bucket_list in result[1].as_array(){ [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::for_loop_over_option)] on by default [INFO] [stderr] = help: consider replacing `for bucket_list in result[1].as_array()` with `if let Some(bucket_list) = result[1].as_array()` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_loop_over_option [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/handler/mod.rs:319:49 [INFO] [stderr] | [INFO] [stderr] 319 | vitural_host = Some(format!("{}", &caps["bucket"])); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `&caps["bucket"].to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/handler/mod.rs:351:98 [INFO] [stderr] | [INFO] [stderr] 351 | if in_key_tag { println!("s3://{}/{} ", vitural_host.clone().unwrap_or(uri.to_string()),e.unescape_and_decode(&reader).unwrap()) } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| uri.to_string())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] error: for loop over `result[1].as_array()`, which is an `Option`. This is more readably written as an `if let` statement. [INFO] [stderr] --> src/handler/mod.rs:370:45 [INFO] [stderr] | [INFO] [stderr] 370 | for bucket_list in result[1].as_array(){ [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: consider replacing `for bucket_list in result[1].as_array()` with `if let Some(bucket_list) = result[1].as_array()` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_loop_over_option [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/handler/mod.rs:470:46 [INFO] [stderr] | [INFO] [stderr] 470 | virtural_host = Some(format!("{}", &caps["bucket"])); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `&caps["bucket"].to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/handler/mod.rs:471:31 [INFO] [stderr] | [INFO] [stderr] 471 | uri = format!("{}", &caps["object"]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `&caps["object"].to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/handler/mod.rs:509:46 [INFO] [stderr] | [INFO] [stderr] 509 | virtural_host = Some(format!("{}", &caps["bucket"])); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `&caps["bucket"].to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/handler/mod.rs:510:31 [INFO] [stderr] | [INFO] [stderr] 510 | uri = format!("{}", &caps["object"]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `&caps["object"].to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/handler/mod.rs:545:38 [INFO] [stderr] | [INFO] [stderr] 545 | virtural_host = Some(format!("{}", &caps["bucket"])); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `&caps["bucket"].to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/handler/mod.rs:546:23 [INFO] [stderr] | [INFO] [stderr] 546 | uri = format!("{}", &caps["object"]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `&caps["object"].to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/main.rs:132:31 [INFO] [stderr] | [INFO] [stderr] 132 | for cre in credential.into_iter(){ [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/main.rs:134:30 [INFO] [stderr] | [INFO] [stderr] 134 | let mut option = String::from(format!("[{}] {} ({}) {} ({})", [INFO] [stderr] | ______________________________^ [INFO] [stderr] 135 | | c.s3_type.unwrap_or(String::from("aws")), [INFO] [stderr] 136 | | c.host, [INFO] [stderr] 137 | | c.region.unwrap_or(String::from("us-east-1")), [INFO] [stderr] 138 | | c.user.unwrap_or(String::from("user")), [INFO] [stderr] 139 | | c.access_key)); [INFO] [stderr] | |________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] help: consider removing `String::from()` [INFO] [stderr] | [INFO] [stderr] 134 | let mut option = format!("[{}] {} ({}) {} ({})", [INFO] [stderr] 135 | c.s3_type.unwrap_or(String::from("aws")), [INFO] [stderr] 136 | c.host, [INFO] [stderr] 137 | c.region.unwrap_or(String::from("us-east-1")), [INFO] [stderr] 138 | c.user.unwrap_or(String::from("user")), [INFO] [stderr] 139 | c.access_key); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/main.rs:135:61 [INFO] [stderr] | [INFO] [stderr] 135 | c.s3_type.unwrap_or(String::from("aws")), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| String::from("aws"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/main.rs:137:60 [INFO] [stderr] | [INFO] [stderr] 137 | c.region.unwrap_or(String::from("us-east-1")), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| String::from("us-east-1"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/main.rs:138:58 [INFO] [stderr] | [INFO] [stderr] 138 | c.user.unwrap_or(String::from("user")), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| String::from("user"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 28 [INFO] [stderr] --> src/main.rs:171:1 [INFO] [stderr] | [INFO] [stderr] 171 | / fn main() { [INFO] [stderr] 172 | | [INFO] [stderr] 173 | | log::set_logger(&MY_LOGGER).unwrap(); [INFO] [stderr] 174 | | log::set_max_level(LevelFilter::Error); [INFO] [stderr] ... | [INFO] [stderr] 312 | | } [INFO] [stderr] 313 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/main.rs:249:9 [INFO] [stderr] | [INFO] [stderr] 249 | / match result{ [INFO] [stderr] 250 | | Err(e) => println!("{}", e), [INFO] [stderr] 251 | | Ok(_) => {} [INFO] [stderr] 252 | | }; [INFO] [stderr] | |_________^ help: try this: `if let Err(e) = result { println!("{}", e) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/main.rs:258:31 [INFO] [stderr] | [INFO] [stderr] 258 | let _ = tty.write_all("s3rs> ".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"s3rs> "` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::string_lit_as_bytes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/main.rs:288:39 [INFO] [stderr] | [INFO] [stderr] 288 | } else if command.starts_with("/"){ [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/main.rs:289:13 [INFO] [stderr] | [INFO] [stderr] 289 | / match handler.url_command(&command){ [INFO] [stderr] 290 | | Err(e) => println!("{}", e), [INFO] [stderr] 291 | | Ok(_) => {} [INFO] [stderr] 292 | | }; [INFO] [stderr] | |_____________^ help: try this: `if let Err(e) = handler.url_command(&command) { println!("{}", e) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `s3rs`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/handler/aws.rs:61:30 [INFO] [stderr] | [INFO] [stderr] 61 | pub fn hash_payload(payload: &Vec) -> String { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/handler/aws.rs:69:136 [INFO] [stderr] | [INFO] [stderr] 69 | fn aws_v4_canonical_request(http_method: &str, uri:&str, query_strings:&mut Vec<(&str, &str)>, headers:&mut Vec<(&str, &str)>, payload:&Vec) -> String { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/handler/aws.rs:91:144 [INFO] [stderr] | [INFO] [stderr] 91 | pub fn aws_v4_get_string_to_signed(http_method: &str, uri:&str, query_strings:&mut Vec<(&str, &str)>, headers:&mut Vec<(&str, &str)>, payload:&Vec, time_str:String, region: Option, iam: bool) -> String { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: this function has too many arguments (8/7) [INFO] [stderr] --> src/handler/aws.rs:91:1 [INFO] [stderr] | [INFO] [stderr] 91 | / pub fn aws_v4_get_string_to_signed(http_method: &str, uri:&str, query_strings:&mut Vec<(&str, &str)>, headers:&mut Vec<(&str, &str)>, payload:&Vec, time_str:String, region: Option, iam: bool) -> String { [INFO] [stderr] 92 | | let mut string_to_signed = String::from_str("AWS4-HMAC-SHA256\n").unwrap(); [INFO] [stderr] 93 | | string_to_signed.push_str(&time_str); [INFO] [stderr] 94 | | string_to_signed.push_str("\n"); [INFO] [stderr] ... | [INFO] [stderr] 108 | | return string_to_signed [INFO] [stderr] 109 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::too_many_arguments)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/handler/aws.rs:95:25 [INFO] [stderr] | [INFO] [stderr] 95 | let endpoint_type = match iam { [INFO] [stderr] | _________________________^ [INFO] [stderr] 96 | | true => "iam", [INFO] [stderr] 97 | | false => "s3" [INFO] [stderr] 98 | | }; [INFO] [stderr] | |_____^ help: consider using an if/else expression: `if iam { "iam" } else { "s3" }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/handler/aws.rs:133:5 [INFO] [stderr] | [INFO] [stderr] 133 | / match iam { [INFO] [stderr] 134 | | true => mac2.input(b"iam"), [INFO] [stderr] 135 | | false => mac2.input(b"s3") [INFO] [stderr] 136 | | } [INFO] [stderr] | |_____^ help: consider using an if/else expression: `if iam { mac2.input(b"iam") } else { mac2.input(b"s3") }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/handler/aws.rs:169:109 [INFO] [stderr] | [INFO] [stderr] 169 | pub fn aws_s3_v2_get_string_to_signed(http_method: &str, uri:&str, headers:&mut Vec<(&str, &str)>, content: &Vec) -> String { [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/handler/aws.rs:172:8 [INFO] [stderr] | [INFO] [stderr] 172 | if content.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!content.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/handler/mod.rs:63:59 [INFO] [stderr] | [INFO] [stderr] 63 | fn aws_v2_request(&self, method: &str, uri: &str, qs: &Vec<(&str, &str)>, payload: &Vec) -> Result, &'static str>{ [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: change this to: `&[(&str, &str)]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/handler/mod.rs:63:88 [INFO] [stderr] | [INFO] [stderr] 63 | fn aws_v2_request(&self, method: &str, uri: &str, qs: &Vec<(&str, &str)>, payload: &Vec) -> Result, &'static str>{ [INFO] [stderr] | ^^^^^^^^ help: change this to: `&[u8]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/handler/mod.rs:76:9 [INFO] [stderr] | [INFO] [stderr] 76 | / match self.format { [INFO] [stderr] 77 | | Format::JSON => {query_strings.push(("format", "json"))} [INFO] [stderr] 78 | | _ => {} [INFO] [stderr] 79 | | } [INFO] [stderr] | |_________^ help: try this: `if let Format::JSON = self.format {query_strings.push(("format", "json"))}` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/handler/mod.rs:118:90 [INFO] [stderr] | [INFO] [stderr] 118 | fn aws_v4_request(&self, method: &str, virtural_host: Option, uri: &str, qs: &Vec<(&str, &str)>, payload: Vec) -> Result, &'static str>{ [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: change this to: `&[(&str, &str)]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/handler/mod.rs:145:9 [INFO] [stderr] | [INFO] [stderr] 145 | / match self.format { [INFO] [stderr] 146 | | Format::JSON => {query_strings.push(("format", "json"))} [INFO] [stderr] 147 | | _ => {} [INFO] [stderr] 148 | | } [INFO] [stderr] | |_________^ help: try this: `if let Format::JSON = self.format {query_strings.push(("format", "json"))}` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/handler/mod.rs:175:64 [INFO] [stderr] | [INFO] [stderr] 175 | self.region.clone().unwrap_or(String::from("us-east-1")), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| String::from("us-east-1"))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] error: for loop over `result[1].as_array()`, which is an `Option`. This is more readably written as an `if let` statement. [INFO] [stderr] --> src/handler/mod.rs:211:37 [INFO] [stderr] | [INFO] [stderr] 211 | for bucket_list in result[1].as_array(){ [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::for_loop_over_option)] on by default [INFO] [stderr] = help: consider replacing `for bucket_list in result[1].as_array()` with `if let Some(bucket_list) = result[1].as_array()` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_loop_over_option [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/handler/mod.rs:319:49 [INFO] [stderr] | [INFO] [stderr] 319 | vitural_host = Some(format!("{}", &caps["bucket"])); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `&caps["bucket"].to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/handler/mod.rs:351:98 [INFO] [stderr] | [INFO] [stderr] 351 | if in_key_tag { println!("s3://{}/{} ", vitural_host.clone().unwrap_or(uri.to_string()),e.unescape_and_decode(&reader).unwrap()) } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| uri.to_string())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] error: for loop over `result[1].as_array()`, which is an `Option`. This is more readably written as an `if let` statement. [INFO] [stderr] --> src/handler/mod.rs:370:45 [INFO] [stderr] | [INFO] [stderr] 370 | for bucket_list in result[1].as_array(){ [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: consider replacing `for bucket_list in result[1].as_array()` with `if let Some(bucket_list) = result[1].as_array()` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_loop_over_option [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/handler/mod.rs:470:46 [INFO] [stderr] | [INFO] [stderr] 470 | virtural_host = Some(format!("{}", &caps["bucket"])); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `&caps["bucket"].to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/handler/mod.rs:471:31 [INFO] [stderr] | [INFO] [stderr] 471 | uri = format!("{}", &caps["object"]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `&caps["object"].to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/handler/mod.rs:509:46 [INFO] [stderr] | [INFO] [stderr] 509 | virtural_host = Some(format!("{}", &caps["bucket"])); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `&caps["bucket"].to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/handler/mod.rs:510:31 [INFO] [stderr] | [INFO] [stderr] 510 | uri = format!("{}", &caps["object"]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `&caps["object"].to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/handler/mod.rs:545:38 [INFO] [stderr] | [INFO] [stderr] 545 | virtural_host = Some(format!("{}", &caps["bucket"])); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `&caps["bucket"].to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/handler/mod.rs:546:23 [INFO] [stderr] | [INFO] [stderr] 546 | uri = format!("{}", &caps["object"]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `&caps["object"].to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/main.rs:132:31 [INFO] [stderr] | [INFO] [stderr] 132 | for cre in credential.into_iter(){ [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/main.rs:134:30 [INFO] [stderr] | [INFO] [stderr] 134 | let mut option = String::from(format!("[{}] {} ({}) {} ({})", [INFO] [stderr] | ______________________________^ [INFO] [stderr] 135 | | c.s3_type.unwrap_or(String::from("aws")), [INFO] [stderr] 136 | | c.host, [INFO] [stderr] 137 | | c.region.unwrap_or(String::from("us-east-1")), [INFO] [stderr] 138 | | c.user.unwrap_or(String::from("user")), [INFO] [stderr] 139 | | c.access_key)); [INFO] [stderr] | |________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] help: consider removing `String::from()` [INFO] [stderr] | [INFO] [stderr] 134 | let mut option = format!("[{}] {} ({}) {} ({})", [INFO] [stderr] 135 | c.s3_type.unwrap_or(String::from("aws")), [INFO] [stderr] 136 | c.host, [INFO] [stderr] 137 | c.region.unwrap_or(String::from("us-east-1")), [INFO] [stderr] 138 | c.user.unwrap_or(String::from("user")), [INFO] [stderr] 139 | c.access_key); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/main.rs:135:61 [INFO] [stderr] | [INFO] [stderr] 135 | c.s3_type.unwrap_or(String::from("aws")), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| String::from("aws"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/main.rs:137:60 [INFO] [stderr] | [INFO] [stderr] 137 | c.region.unwrap_or(String::from("us-east-1")), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| String::from("us-east-1"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/main.rs:138:58 [INFO] [stderr] | [INFO] [stderr] 138 | c.user.unwrap_or(String::from("user")), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| String::from("user"))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 28 [INFO] [stderr] --> src/main.rs:171:1 [INFO] [stderr] | [INFO] [stderr] 171 | / fn main() { [INFO] [stderr] 172 | | [INFO] [stderr] 173 | | log::set_logger(&MY_LOGGER).unwrap(); [INFO] [stderr] 174 | | log::set_max_level(LevelFilter::Error); [INFO] [stderr] ... | [INFO] [stderr] 312 | | } [INFO] [stderr] 313 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/main.rs:249:9 [INFO] [stderr] | [INFO] [stderr] 249 | / match result{ [INFO] [stderr] 250 | | Err(e) => println!("{}", e), [INFO] [stderr] 251 | | Ok(_) => {} [INFO] [stderr] 252 | | }; [INFO] [stderr] | |_________^ help: try this: `if let Err(e) = result { println!("{}", e) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/main.rs:258:31 [INFO] [stderr] | [INFO] [stderr] 258 | let _ = tty.write_all("s3rs> ".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"s3rs> "` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::string_lit_as_bytes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/main.rs:288:39 [INFO] [stderr] | [INFO] [stderr] 288 | } else if command.starts_with("/"){ [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/main.rs:289:13 [INFO] [stderr] | [INFO] [stderr] 289 | / match handler.url_command(&command){ [INFO] [stderr] 290 | | Err(e) => println!("{}", e), [INFO] [stderr] 291 | | Ok(_) => {} [INFO] [stderr] 292 | | }; [INFO] [stderr] | |_____________^ help: try this: `if let Err(e) = handler.url_command(&command) { println!("{}", e) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] error: aborting due to 2 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `s3rs`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "6aae7d72098aaa4d4876b9763b603d0045b116d6e1ce31df2b6863a4837f45ad"` [INFO] running `"docker" "rm" "-f" "6aae7d72098aaa4d4876b9763b603d0045b116d6e1ce31df2b6863a4837f45ad"` [INFO] [stdout] 6aae7d72098aaa4d4876b9763b603d0045b116d6e1ce31df2b6863a4837f45ad