[INFO] crate bencode 0.1.16 is already in cache [INFO] extracting crate bencode 0.1.16 into work/ex/clippy-test-run/sources/stable/reg/bencode/0.1.16 [INFO] extracting crate bencode 0.1.16 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/bencode/0.1.16 [INFO] validating manifest of bencode-0.1.16 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 bencode-0.1.16 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 bencode-0.1.16 [INFO] finished frobbing bencode-0.1.16 [INFO] frobbed toml for bencode-0.1.16 written to work/ex/clippy-test-run/sources/stable/reg/bencode/0.1.16/Cargo.toml [INFO] started frobbing bencode-0.1.16 [INFO] finished frobbing bencode-0.1.16 [INFO] frobbed toml for bencode-0.1.16 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/bencode/0.1.16/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 bencode-0.1.16 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/bencode/0.1.16:/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] 21ad4f85eca7dcc44344df5d3f4123b399181f8128a052ddf08eb0eb29982b1e [INFO] running `"docker" "start" "-a" "21ad4f85eca7dcc44344df5d3f4123b399181f8128a052ddf08eb0eb29982b1e"` [INFO] [stderr] warning: path `/opt/crater/workdir/src/bencode.rs` was erroneously implicitly accepted for library `bencode`, [INFO] [stderr] please rename the file to `src/lib.rs` or set lib.path in Cargo.toml [INFO] [stderr] Checking bencode v0.1.16 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/streaming.rs:56:13 [INFO] [stderr] | [INFO] [stderr] 56 | reader: reader, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `reader` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/streaming.rs:103:13 [INFO] [stderr] | [INFO] [stderr] 103 | msg: msg [INFO] [stderr] | ^^^^^^^^ help: replace it with: `msg` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/streaming.rs:307:34 [INFO] [stderr] | [INFO] [stderr] 307 | msg: msg })]); [INFO] [stderr] | ^^^^^^^^ help: replace it with: `msg` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/bencode.rs:733:13 [INFO] [stderr] | [INFO] [stderr] 733 | writer: writer, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `writer` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/bencode.rs:965:13 [INFO] [stderr] | [INFO] [stderr] 965 | reader: reader, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `reader` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/streaming.rs:56:13 [INFO] [stderr] | [INFO] [stderr] 56 | reader: reader, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `reader` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/streaming.rs:103:13 [INFO] [stderr] | [INFO] [stderr] 103 | msg: msg [INFO] [stderr] | ^^^^^^^^ help: replace it with: `msg` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/streaming.rs:307:34 [INFO] [stderr] | [INFO] [stderr] 307 | msg: msg })]); [INFO] [stderr] | ^^^^^^^^ help: replace it with: `msg` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/bencode.rs:733:13 [INFO] [stderr] | [INFO] [stderr] 733 | writer: writer, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `writer` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/bencode.rs:965:13 [INFO] [stderr] | [INFO] [stderr] 965 | reader: reader, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `reader` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/streaming.rs:179:18 [INFO] [stderr] | [INFO] [stderr] 179 | _ => return self.error_msg("Unmatched value ending".to_string()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.error_msg("Unmatched value ending".to_string())` [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: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/bencode.rs:654:9 [INFO] [stderr] | [INFO] [stderr] 654 | res [INFO] [stderr] | ^^^ [INFO] [stderr] ... [INFO] [stderr] 667 | map_from_bencode!(BTreeMap, bencode) [INFO] [stderr] | ------------------------------------ in this macro invocation [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/bencode.rs:635:19 [INFO] [stderr] | [INFO] [stderr] 635 | let res = match $bencode { [INFO] [stderr] | ___________________^ [INFO] [stderr] 636 | | &Bencode::Dict(ref map) => { [INFO] [stderr] 637 | | let mut m = $mty::new(); [INFO] [stderr] 638 | | for (key, value) in map.iter() { [INFO] [stderr] ... | [INFO] [stderr] 652 | | _ => Err(MapFromBencodeError::InvalidType), [INFO] [stderr] 653 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] ... [INFO] [stderr] 667 | map_from_bencode!(BTreeMap, bencode) [INFO] [stderr] | ------------------------------------ in this macro invocation [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/bencode.rs:654:9 [INFO] [stderr] | [INFO] [stderr] 654 | res [INFO] [stderr] | ^^^ [INFO] [stderr] ... [INFO] [stderr] 680 | map_from_bencode!(HashMap, bencode) [INFO] [stderr] | ----------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/bencode.rs:635:19 [INFO] [stderr] | [INFO] [stderr] 635 | let res = match $bencode { [INFO] [stderr] | ___________________^ [INFO] [stderr] 636 | | &Bencode::Dict(ref map) => { [INFO] [stderr] 637 | | let mut m = $mty::new(); [INFO] [stderr] 638 | | for (key, value) in map.iter() { [INFO] [stderr] ... | [INFO] [stderr] 652 | | _ => Err(MapFromBencodeError::InvalidType), [INFO] [stderr] 653 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] ... [INFO] [stderr] 680 | map_from_bencode!(HashMap, bencode) [INFO] [stderr] | ----------------------------------- in this macro invocation [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: unused macro definition [INFO] [stderr] --> src/bencode.rs:710:1 [INFO] [stderr] | [INFO] [stderr] 710 | / macro_rules! tryenc(($e:expr) => ( [INFO] [stderr] 711 | | match $e { [INFO] [stderr] 712 | | Ok(e) => e, [INFO] [stderr] 713 | | Err(e) => { [INFO] [stderr] ... | [INFO] [stderr] 716 | | } [INFO] [stderr] 717 | | )); [INFO] [stderr] | |___^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_macros)] on by default [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/bencode.rs:1268:21 [INFO] [stderr] | [INFO] [stderr] 1268 | None => return Err(Expecting("Bencode", "None".to_string())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err(Expecting("Bencode", "None".to_string()))` [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: this loop could be written as a `while let` loop [INFO] [stderr] --> src/streaming.rs:127:17 [INFO] [stderr] | [INFO] [stderr] 127 | / loop { [INFO] [stderr] 128 | | match self.curr_char() { [INFO] [stderr] 129 | | Some(ch @ '0' ... '9') => self.parse_digit(ch, sign, &mut num), [INFO] [stderr] 130 | | _ => break [INFO] [stderr] 131 | | } [INFO] [stderr] 132 | | self.next_byte(); [INFO] [stderr] 133 | | } [INFO] [stderr] | |_________________^ help: try: `while let Some(ch @ '0' ... '9') = self.curr_char() { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/streaming.rs:145:17 [INFO] [stderr] | [INFO] [stderr] 145 | / loop { [INFO] [stderr] 146 | | match self.curr_char() { [INFO] [stderr] 147 | | Some(ch @ '0' ... '9') => self.parse_digit(ch, sign, &mut num), [INFO] [stderr] 148 | | _ => break [INFO] [stderr] 149 | | } [INFO] [stderr] 150 | | self.next_byte(); [INFO] [stderr] 151 | | } [INFO] [stderr] | |_________________^ help: try: `while let Some(ch @ '0' ... '9') = self.curr_char() { .. }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: casting u32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/streaming.rs:160:31 [INFO] [stderr] | [INFO] [stderr] 160 | *num = *num*10 + sign*ch.to_digit(10).unwrap() as i64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(ch.to_digit(10).unwrap())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: defining a method called `from_str` on this type; consider implementing the `std::str::FromStr` trait or choosing a less ambiguous name [INFO] [stderr] --> src/util.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | / pub fn from_str(s: &str) -> ByteString { [INFO] [stderr] 12 | | ByteString(s.as_bytes().to_vec()) [INFO] [stderr] 13 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/util.rs:24:7 [INFO] [stderr] | [INFO] [stderr] 24 | / match self { [INFO] [stderr] 25 | | &ByteString(ref v) => &v[..] [INFO] [stderr] 26 | | } [INFO] [stderr] | |_______^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 24 | match *self { [INFO] [stderr] 25 | ByteString(ref v) => &v[..] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/util.rs:38:9 [INFO] [stderr] | [INFO] [stderr] 38 | / match self { [INFO] [stderr] 39 | | &ByteString(ref v) => fmt_bytestring(&v[..], fmt), [INFO] [stderr] 40 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 38 | match *self { [INFO] [stderr] 39 | ByteString(ref v) => fmt_bytestring(&v[..], fmt), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/util.rs:53:9 [INFO] [stderr] | [INFO] [stderr] 53 | / match self { [INFO] [stderr] 54 | | &ByteString(ref v) => v.borrow() [INFO] [stderr] 55 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 53 | match *self { [INFO] [stderr] 54 | ByteString(ref v) => v.borrow() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:308:9 [INFO] [stderr] | [INFO] [stderr] 308 | / match self { [INFO] [stderr] 309 | | &Bencode::Empty => Ok(()), [INFO] [stderr] 310 | | &Bencode::Number(v) => e.emit_i64(v), [INFO] [stderr] 311 | | &Bencode::ByteString(ref v) => e.emit_str(unsafe { str::from_utf8_unchecked(v) }), [INFO] [stderr] 312 | | &Bencode::List(ref v) => v.encode(e), [INFO] [stderr] 313 | | &Bencode::Dict(ref v) => v.encode(e) [INFO] [stderr] 314 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 308 | match *self { [INFO] [stderr] 309 | Bencode::Empty => Ok(()), [INFO] [stderr] 310 | Bencode::Number(v) => e.emit_i64(v), [INFO] [stderr] 311 | Bencode::ByteString(ref v) => e.emit_str(unsafe { str::from_utf8_unchecked(v) }), [INFO] [stderr] 312 | Bencode::List(ref v) => v.encode(e), [INFO] [stderr] 313 | Bencode::Dict(ref v) => v.encode(e) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:338:9 [INFO] [stderr] | [INFO] [stderr] 338 | / match bencode { [INFO] [stderr] 339 | | &Bencode::ByteString(ref v) => { [INFO] [stderr] 340 | | if v.len() == 0 { [INFO] [stderr] 341 | | Ok(()) [INFO] [stderr] ... | [INFO] [stderr] 346 | | _ => Err(()) [INFO] [stderr] 347 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 338 | match *bencode { [INFO] [stderr] 339 | Bencode::ByteString(ref v) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/bencode.rs:340:20 [INFO] [stderr] | [INFO] [stderr] 340 | if v.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `v.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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:353:9 [INFO] [stderr] | [INFO] [stderr] 353 | / match self { [INFO] [stderr] 354 | | &Some(ref v) => v.to_bencode(), [INFO] [stderr] 355 | | &None => Bencode::ByteString(b"nil".to_vec()) [INFO] [stderr] 356 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 353 | match *self { [INFO] [stderr] 354 | Some(ref v) => v.to_bencode(), [INFO] [stderr] 355 | None => Bencode::ByteString(b"nil".to_vec()) [INFO] [stderr] | [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/bencode.rs:364:9 [INFO] [stderr] | [INFO] [stderr] 364 | / match bencode { [INFO] [stderr] 365 | | &Bencode::ByteString(ref v) => { [INFO] [stderr] 366 | | if v == b"nil" { [INFO] [stderr] 367 | | return Ok(None) [INFO] [stderr] ... | [INFO] [stderr] 370 | | _ => () [INFO] [stderr] 371 | | } [INFO] [stderr] | |_________^ [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] help: try this [INFO] [stderr] | [INFO] [stderr] 364 | if let &Bencode::ByteString(ref v) = bencode { [INFO] [stderr] 365 | if v == b"nil" { [INFO] [stderr] 366 | return Ok(None) [INFO] [stderr] 367 | } [INFO] [stderr] 368 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:364:9 [INFO] [stderr] | [INFO] [stderr] 364 | / match bencode { [INFO] [stderr] 365 | | &Bencode::ByteString(ref v) => { [INFO] [stderr] 366 | | if v == b"nil" { [INFO] [stderr] 367 | | return Ok(None) [INFO] [stderr] ... | [INFO] [stderr] 370 | | _ => () [INFO] [stderr] 371 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 364 | match *bencode { [INFO] [stderr] 365 | Bencode::ByteString(ref v) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/bencode.rs:372:48 [INFO] [stderr] | [INFO] [stderr] 372 | FromBencode::from_bencode(bencode).map(|v| Some(v)) [INFO] [stderr] | ^^^^^^^^^^^ help: remove closure as shown: `Some` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:392:13 [INFO] [stderr] | [INFO] [stderr] 392 | / match bencode { [INFO] [stderr] 393 | | &Bencode::Number(v) => match FromPrimitive::from_i64(v) { [INFO] [stderr] 394 | | Some(n) => Ok(n), [INFO] [stderr] 395 | | None => Err(NumFromBencodeError::OutOfRange(v)), [INFO] [stderr] 396 | | }, [INFO] [stderr] 397 | | _ => Err(NumFromBencodeError::InvalidType), [INFO] [stderr] 398 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] ... [INFO] [stderr] 404 | derive_num_from_bencode!(isize); [INFO] [stderr] | -------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: casting i8 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bencode.rs:377:59 [INFO] [stderr] | [INFO] [stderr] 377 | fn to_bencode(&self) -> Bencode { Bencode::Number(*self as i64) } [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `i64::from(*self)` [INFO] [stderr] ... [INFO] [stderr] 406 | derive_num_to_bencode!(i8); [INFO] [stderr] | --------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:392:13 [INFO] [stderr] | [INFO] [stderr] 392 | / match bencode { [INFO] [stderr] 393 | | &Bencode::Number(v) => match FromPrimitive::from_i64(v) { [INFO] [stderr] 394 | | Some(n) => Ok(n), [INFO] [stderr] 395 | | None => Err(NumFromBencodeError::OutOfRange(v)), [INFO] [stderr] 396 | | }, [INFO] [stderr] 397 | | _ => Err(NumFromBencodeError::InvalidType), [INFO] [stderr] 398 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] ... [INFO] [stderr] 407 | derive_num_from_bencode!(i8); [INFO] [stderr] | ----------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: casting i16 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bencode.rs:377:59 [INFO] [stderr] | [INFO] [stderr] 377 | fn to_bencode(&self) -> Bencode { Bencode::Number(*self as i64) } [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `i64::from(*self)` [INFO] [stderr] ... [INFO] [stderr] 409 | derive_num_to_bencode!(i16); [INFO] [stderr] | ---------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:392:13 [INFO] [stderr] | [INFO] [stderr] 392 | / match bencode { [INFO] [stderr] 393 | | &Bencode::Number(v) => match FromPrimitive::from_i64(v) { [INFO] [stderr] 394 | | Some(n) => Ok(n), [INFO] [stderr] 395 | | None => Err(NumFromBencodeError::OutOfRange(v)), [INFO] [stderr] 396 | | }, [INFO] [stderr] 397 | | _ => Err(NumFromBencodeError::InvalidType), [INFO] [stderr] 398 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] ... [INFO] [stderr] 410 | derive_num_from_bencode!(i16); [INFO] [stderr] | ------------------------------ in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: casting i32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bencode.rs:377:59 [INFO] [stderr] | [INFO] [stderr] 377 | fn to_bencode(&self) -> Bencode { Bencode::Number(*self as i64) } [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `i64::from(*self)` [INFO] [stderr] ... [INFO] [stderr] 412 | derive_num_to_bencode!(i32); [INFO] [stderr] | ---------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:392:13 [INFO] [stderr] | [INFO] [stderr] 392 | / match bencode { [INFO] [stderr] 393 | | &Bencode::Number(v) => match FromPrimitive::from_i64(v) { [INFO] [stderr] 394 | | Some(n) => Ok(n), [INFO] [stderr] 395 | | None => Err(NumFromBencodeError::OutOfRange(v)), [INFO] [stderr] 396 | | }, [INFO] [stderr] 397 | | _ => Err(NumFromBencodeError::InvalidType), [INFO] [stderr] 398 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] ... [INFO] [stderr] 413 | derive_num_from_bencode!(i32); [INFO] [stderr] | ------------------------------ in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:392:13 [INFO] [stderr] | [INFO] [stderr] 392 | / match bencode { [INFO] [stderr] 393 | | &Bencode::Number(v) => match FromPrimitive::from_i64(v) { [INFO] [stderr] 394 | | Some(n) => Ok(n), [INFO] [stderr] 395 | | None => Err(NumFromBencodeError::OutOfRange(v)), [INFO] [stderr] 396 | | }, [INFO] [stderr] 397 | | _ => Err(NumFromBencodeError::InvalidType), [INFO] [stderr] 398 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] ... [INFO] [stderr] 416 | derive_num_from_bencode!(i64); [INFO] [stderr] | ------------------------------ in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:392:13 [INFO] [stderr] | [INFO] [stderr] 392 | / match bencode { [INFO] [stderr] 393 | | &Bencode::Number(v) => match FromPrimitive::from_i64(v) { [INFO] [stderr] 394 | | Some(n) => Ok(n), [INFO] [stderr] 395 | | None => Err(NumFromBencodeError::OutOfRange(v)), [INFO] [stderr] 396 | | }, [INFO] [stderr] 397 | | _ => Err(NumFromBencodeError::InvalidType), [INFO] [stderr] 398 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] ... [INFO] [stderr] 419 | derive_num_from_bencode!(usize); [INFO] [stderr] | -------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bencode.rs:377:59 [INFO] [stderr] | [INFO] [stderr] 377 | fn to_bencode(&self) -> Bencode { Bencode::Number(*self as i64) } [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `i64::from(*self)` [INFO] [stderr] ... [INFO] [stderr] 421 | derive_num_to_bencode!(u8); [INFO] [stderr] | --------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:392:13 [INFO] [stderr] | [INFO] [stderr] 392 | / match bencode { [INFO] [stderr] 393 | | &Bencode::Number(v) => match FromPrimitive::from_i64(v) { [INFO] [stderr] 394 | | Some(n) => Ok(n), [INFO] [stderr] 395 | | None => Err(NumFromBencodeError::OutOfRange(v)), [INFO] [stderr] 396 | | }, [INFO] [stderr] 397 | | _ => Err(NumFromBencodeError::InvalidType), [INFO] [stderr] 398 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] ... [INFO] [stderr] 422 | derive_num_from_bencode!(u8); [INFO] [stderr] | ----------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: casting u16 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bencode.rs:377:59 [INFO] [stderr] | [INFO] [stderr] 377 | fn to_bencode(&self) -> Bencode { Bencode::Number(*self as i64) } [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `i64::from(*self)` [INFO] [stderr] ... [INFO] [stderr] 424 | derive_num_to_bencode!(u16); [INFO] [stderr] | ---------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:392:13 [INFO] [stderr] | [INFO] [stderr] 392 | / match bencode { [INFO] [stderr] 393 | | &Bencode::Number(v) => match FromPrimitive::from_i64(v) { [INFO] [stderr] 394 | | Some(n) => Ok(n), [INFO] [stderr] 395 | | None => Err(NumFromBencodeError::OutOfRange(v)), [INFO] [stderr] 396 | | }, [INFO] [stderr] 397 | | _ => Err(NumFromBencodeError::InvalidType), [INFO] [stderr] 398 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] ... [INFO] [stderr] 425 | derive_num_from_bencode!(u16); [INFO] [stderr] | ------------------------------ in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: casting u32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bencode.rs:377:59 [INFO] [stderr] | [INFO] [stderr] 377 | fn to_bencode(&self) -> Bencode { Bencode::Number(*self as i64) } [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `i64::from(*self)` [INFO] [stderr] ... [INFO] [stderr] 427 | derive_num_to_bencode!(u32); [INFO] [stderr] | ---------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:392:13 [INFO] [stderr] | [INFO] [stderr] 392 | / match bencode { [INFO] [stderr] 393 | | &Bencode::Number(v) => match FromPrimitive::from_i64(v) { [INFO] [stderr] 394 | | Some(n) => Ok(n), [INFO] [stderr] 395 | | None => Err(NumFromBencodeError::OutOfRange(v)), [INFO] [stderr] 396 | | }, [INFO] [stderr] 397 | | _ => Err(NumFromBencodeError::InvalidType), [INFO] [stderr] 398 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] ... [INFO] [stderr] 428 | derive_num_from_bencode!(u32); [INFO] [stderr] | ------------------------------ in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:392:13 [INFO] [stderr] | [INFO] [stderr] 392 | / match bencode { [INFO] [stderr] 393 | | &Bencode::Number(v) => match FromPrimitive::from_i64(v) { [INFO] [stderr] 394 | | Some(n) => Ok(n), [INFO] [stderr] 395 | | None => Err(NumFromBencodeError::OutOfRange(v)), [INFO] [stderr] 396 | | }, [INFO] [stderr] 397 | | _ => Err(NumFromBencodeError::InvalidType), [INFO] [stderr] 398 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] ... [INFO] [stderr] 431 | derive_num_from_bencode!(u64); [INFO] [stderr] | ------------------------------ in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:452:9 [INFO] [stderr] | [INFO] [stderr] 452 | / match bencode { [INFO] [stderr] 453 | | &Bencode::ByteString(ref v) => { [INFO] [stderr] 454 | | let len = v.len(); [INFO] [stderr] 455 | | match len == size_of::() { [INFO] [stderr] ... | [INFO] [stderr] 460 | | _ => Err(InvalidType), [INFO] [stderr] 461 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 452 | match *bencode { [INFO] [stderr] 453 | Bencode::ByteString(ref v) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/bencode.rs:455:17 [INFO] [stderr] | [INFO] [stderr] 455 | / match len == size_of::() { [INFO] [stderr] 456 | | true => Ok(Cursor::new(&v[..]).read_f32::().unwrap()), [INFO] [stderr] 457 | | false => Err(InvalidLen(len)), [INFO] [stderr] 458 | | } [INFO] [stderr] | |_________________^ help: consider using an if/else expression: `if len == size_of::() { Ok(Cursor::new(&v[..]).read_f32::().unwrap()) } else { Err(InvalidLen(len)) }` [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:478:9 [INFO] [stderr] | [INFO] [stderr] 478 | / match bencode { [INFO] [stderr] 479 | | &Bencode::ByteString(ref v) => { [INFO] [stderr] 480 | | let len = v.len(); [INFO] [stderr] 481 | | match len == size_of::() { [INFO] [stderr] ... | [INFO] [stderr] 486 | | _ => Err(InvalidType), [INFO] [stderr] 487 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 478 | match *bencode { [INFO] [stderr] 479 | Bencode::ByteString(ref v) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/bencode.rs:481:17 [INFO] [stderr] | [INFO] [stderr] 481 | / match len == size_of::() { [INFO] [stderr] 482 | | true => Ok(Cursor::new(&v[..]).read_f64::().unwrap()), [INFO] [stderr] 483 | | false => Err(InvalidLen(len)), [INFO] [stderr] 484 | | } [INFO] [stderr] | |_________________^ help: consider using an if/else expression: `if len == size_of::() { Ok(Cursor::new(&v[..]).read_f64::().unwrap()) } else { Err(InvalidLen(len)) }` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:511:9 [INFO] [stderr] | [INFO] [stderr] 511 | / match bencode { [INFO] [stderr] 512 | | &Bencode::ByteString(ref v) => { [INFO] [stderr] 513 | | if v == b"true" { [INFO] [stderr] 514 | | Ok(true) [INFO] [stderr] ... | [INFO] [stderr] 521 | | _ => Err(BoolFromBencodeError::NotAString) [INFO] [stderr] 522 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 511 | match *bencode { [INFO] [stderr] 512 | Bencode::ByteString(ref v) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:579:9 [INFO] [stderr] | [INFO] [stderr] 579 | / match bencode { [INFO] [stderr] 580 | | &Bencode::ByteString(ref v) => std::str::from_utf8(v).map(|s| s.to_string()).map_err(FromUtf8), [INFO] [stderr] 581 | | _ => Err(InvalidType), [INFO] [stderr] 582 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 579 | match *bencode { [INFO] [stderr] 580 | Bencode::ByteString(ref v) => std::str::from_utf8(v).map(|s| s.to_string()).map_err(FromUtf8), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:600:9 [INFO] [stderr] | [INFO] [stderr] 600 | / match bencode { [INFO] [stderr] 601 | | &Bencode::List(ref es) => { [INFO] [stderr] 602 | | let mut list = Vec::new(); [INFO] [stderr] 603 | | for e in es.iter() { [INFO] [stderr] ... | [INFO] [stderr] 611 | | _ => Err(VecFromBencodeError::InvalidType), [INFO] [stderr] 612 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 600 | match *bencode { [INFO] [stderr] 601 | Bencode::List(ref es) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:635:19 [INFO] [stderr] | [INFO] [stderr] 635 | let res = match $bencode { [INFO] [stderr] | ___________________^ [INFO] [stderr] 636 | | &Bencode::Dict(ref map) => { [INFO] [stderr] 637 | | let mut m = $mty::new(); [INFO] [stderr] 638 | | for (key, value) in map.iter() { [INFO] [stderr] ... | [INFO] [stderr] 652 | | _ => Err(MapFromBencodeError::InvalidType), [INFO] [stderr] 653 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] ... [INFO] [stderr] 667 | map_from_bencode!(BTreeMap, bencode) [INFO] [stderr] | ------------------------------------ in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: impl for `HashMap` should be generalized over different hashers [INFO] [stderr] --> src/bencode.rs:671:34 [INFO] [stderr] | [INFO] [stderr] 671 | impl ToBencode for HashMap { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::implicit_hasher)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_hasher [INFO] [stderr] help: consider adding a type parameter [INFO] [stderr] | [INFO] [stderr] 671 | impl ToBencode for HashMap { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: impl for `HashMap` should be generalized over different hashers [INFO] [stderr] --> src/bencode.rs:677:38 [INFO] [stderr] | [INFO] [stderr] 677 | impl FromBencode for HashMap { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_hasher [INFO] [stderr] help: consider adding a type parameter [INFO] [stderr] | [INFO] [stderr] 677 | impl FromBencode for HashMap { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: ...and use generic constructor [INFO] [stderr] | [INFO] [stderr] 637 | let mut m = HashMap::default(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:635:19 [INFO] [stderr] | [INFO] [stderr] 635 | let res = match $bencode { [INFO] [stderr] | ___________________^ [INFO] [stderr] 636 | | &Bencode::Dict(ref map) => { [INFO] [stderr] 637 | | let mut m = $mty::new(); [INFO] [stderr] 638 | | for (key, value) in map.iter() { [INFO] [stderr] ... | [INFO] [stderr] 652 | | _ => Err(MapFromBencodeError::InvalidType), [INFO] [stderr] 653 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] ... [INFO] [stderr] 680 | map_from_bencode!(HashMap, bencode) [INFO] [stderr] | ----------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/bencode.rs:685:15 [INFO] [stderr] | [INFO] [stderr] 685 | from_iter(buf.iter().map(|b| *b)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `buf.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [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/bencode.rs:702:9 [INFO] [stderr] | [INFO] [stderr] 702 | / match t.encode(&mut encoder) { [INFO] [stderr] 703 | | Err(e) => return Err(e), [INFO] [stderr] 704 | | _ => {} [INFO] [stderr] 705 | | } [INFO] [stderr] | |_________^ help: try this: `if let Err(e) = t.encode(&mut encoder) { return Err(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: length comparison to zero [INFO] [stderr] --> src/bencode.rs:743:12 [INFO] [stderr] | [INFO] [stderr] 743 | if self.writers.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.writers.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bencode.rs:787:71 [INFO] [stderr] | [INFO] [stderr] 787 | fn emit_u8(&mut self, v: u8) -> EncoderResult<()> { self.emit_i64(v as i64) } [INFO] [stderr] | ^^^^^^^^ help: try: `i64::from(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u16 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bencode.rs:789:73 [INFO] [stderr] | [INFO] [stderr] 789 | fn emit_u16(&mut self, v: u16) -> EncoderResult<()> { self.emit_i64(v as i64) } [INFO] [stderr] | ^^^^^^^^ help: try: `i64::from(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bencode.rs:791:73 [INFO] [stderr] | [INFO] [stderr] 791 | fn emit_u32(&mut self, v: u32) -> EncoderResult<()> { self.emit_i64(v as i64) } [INFO] [stderr] | ^^^^^^^^ help: try: `i64::from(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting i8 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bencode.rs:797:71 [INFO] [stderr] | [INFO] [stderr] 797 | fn emit_i8(&mut self, v: i8) -> EncoderResult<()> { self.emit_i64(v as i64) } [INFO] [stderr] | ^^^^^^^^ help: try: `i64::from(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting i16 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bencode.rs:799:73 [INFO] [stderr] | [INFO] [stderr] 799 | fn emit_i16(&mut self, v: i16) -> EncoderResult<()> { self.emit_i64(v as i64) } [INFO] [stderr] | ^^^^^^^^ help: try: `i64::from(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting i32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bencode.rs:801:73 [INFO] [stderr] | [INFO] [stderr] 801 | fn emit_i32(&mut self, v: i32) -> EncoderResult<()> { self.emit_i64(v as i64) } [INFO] [stderr] | ^^^^^^^^ help: try: `i64::from(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/streaming.rs:179:18 [INFO] [stderr] | [INFO] [stderr] 179 | _ => return self.error_msg("Unmatched value ending".to_string()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.error_msg("Unmatched value ending".to_string())` [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: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/bencode.rs:654:9 [INFO] [stderr] | [INFO] [stderr] 654 | res [INFO] [stderr] | ^^^ [INFO] [stderr] ... [INFO] [stderr] 667 | map_from_bencode!(BTreeMap, bencode) [INFO] [stderr] | ------------------------------------ in this macro invocation [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/bencode.rs:635:19 [INFO] [stderr] | [INFO] [stderr] 635 | let res = match $bencode { [INFO] [stderr] | ___________________^ [INFO] [stderr] 636 | | &Bencode::Dict(ref map) => { [INFO] [stderr] 637 | | let mut m = $mty::new(); [INFO] [stderr] 638 | | for (key, value) in map.iter() { [INFO] [stderr] ... | [INFO] [stderr] 652 | | _ => Err(MapFromBencodeError::InvalidType), [INFO] [stderr] 653 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] ... [INFO] [stderr] 667 | map_from_bencode!(BTreeMap, bencode) [INFO] [stderr] | ------------------------------------ in this macro invocation [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/bencode.rs:654:9 [INFO] [stderr] | [INFO] [stderr] 654 | res [INFO] [stderr] | ^^^ [INFO] [stderr] ... [INFO] [stderr] 680 | map_from_bencode!(HashMap, bencode) [INFO] [stderr] | ----------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/bencode.rs:635:19 [INFO] [stderr] | [INFO] [stderr] 635 | let res = match $bencode { [INFO] [stderr] | ___________________^ [INFO] [stderr] 636 | | &Bencode::Dict(ref map) => { [INFO] [stderr] 637 | | let mut m = $mty::new(); [INFO] [stderr] 638 | | for (key, value) in map.iter() { [INFO] [stderr] ... | [INFO] [stderr] 652 | | _ => Err(MapFromBencodeError::InvalidType), [INFO] [stderr] 653 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] ... [INFO] [stderr] 680 | map_from_bencode!(HashMap, bencode) [INFO] [stderr] | ----------------------------------- in this macro invocation [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: unused macro definition [INFO] [stderr] --> src/bencode.rs:710:1 [INFO] [stderr] | [INFO] [stderr] 710 | / macro_rules! tryenc(($e:expr) => ( [INFO] [stderr] 711 | | match $e { [INFO] [stderr] 712 | | Ok(e) => e, [INFO] [stderr] 713 | | Err(e) => { [INFO] [stderr] ... | [INFO] [stderr] 716 | | } [INFO] [stderr] 717 | | )); [INFO] [stderr] | |___^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_macros)] on by default [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/bencode.rs:1268:21 [INFO] [stderr] | [INFO] [stderr] 1268 | None => return Err(Expecting("Bencode", "None".to_string())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err(Expecting("Bencode", "None".to_string()))` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:1220:17 [INFO] [stderr] | [INFO] [stderr] 1220 | / match *v { [INFO] [stderr] 1221 | | &Bencode::Dict(ref m) => { [INFO] [stderr] 1222 | | match m.get(&util::ByteString::from_slice(name.as_bytes())) { [INFO] [stderr] 1223 | | Some(v) => v, [INFO] [stderr] ... | [INFO] [stderr] 1227 | | _ => return Err(Expecting("Dict", format!("{:?}", v))) [INFO] [stderr] 1228 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 1220 | match *(*v) { [INFO] [stderr] 1221 | Bencode::Dict(ref m) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/bencode.rs:1281:76 [INFO] [stderr] | [INFO] [stderr] 1281 | val => return Err(Expecting("List", val.map(|v| v.to_string()).unwrap_or("".to_string()))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| "".to_string())` [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 `unwrap_or` followed by a function call [INFO] [stderr] --> src/bencode.rs:1301:76 [INFO] [stderr] | [INFO] [stderr] 1301 | val => return Err(Expecting("Dict", val.map(|v| v.to_string()).unwrap_or("".to_string()))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| "".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] warning: long literal lacking separators [INFO] [stderr] --> src/bencode.rs:1726:38 [INFO] [stderr] | [INFO] [stderr] 1726 | a: 1234567890, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `1_234_567_890` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/bencode.rs:1726:38 [INFO] [stderr] | [INFO] [stderr] 1726 | a: 1234567890, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `1_234_567_890` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/streaming.rs:127:17 [INFO] [stderr] | [INFO] [stderr] 127 | / loop { [INFO] [stderr] 128 | | match self.curr_char() { [INFO] [stderr] 129 | | Some(ch @ '0' ... '9') => self.parse_digit(ch, sign, &mut num), [INFO] [stderr] 130 | | _ => break [INFO] [stderr] 131 | | } [INFO] [stderr] 132 | | self.next_byte(); [INFO] [stderr] 133 | | } [INFO] [stderr] | |_________________^ help: try: `while let Some(ch @ '0' ... '9') = self.curr_char() { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/streaming.rs:145:17 [INFO] [stderr] | [INFO] [stderr] 145 | / loop { [INFO] [stderr] 146 | | match self.curr_char() { [INFO] [stderr] 147 | | Some(ch @ '0' ... '9') => self.parse_digit(ch, sign, &mut num), [INFO] [stderr] 148 | | _ => break [INFO] [stderr] 149 | | } [INFO] [stderr] 150 | | self.next_byte(); [INFO] [stderr] 151 | | } [INFO] [stderr] | |_________________^ help: try: `while let Some(ch @ '0' ... '9') = self.curr_char() { .. }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: casting u32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/streaming.rs:160:31 [INFO] [stderr] | [INFO] [stderr] 160 | *num = *num*10 + sign*ch.to_digit(10).unwrap() as i64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(ch.to_digit(10).unwrap())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: defining a method called `from_str` on this type; consider implementing the `std::str::FromStr` trait or choosing a less ambiguous name [INFO] [stderr] --> src/util.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | / pub fn from_str(s: &str) -> ByteString { [INFO] [stderr] 12 | | ByteString(s.as_bytes().to_vec()) [INFO] [stderr] 13 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/util.rs:24:7 [INFO] [stderr] | [INFO] [stderr] 24 | / match self { [INFO] [stderr] 25 | | &ByteString(ref v) => &v[..] [INFO] [stderr] 26 | | } [INFO] [stderr] | |_______^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 24 | match *self { [INFO] [stderr] 25 | ByteString(ref v) => &v[..] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/util.rs:38:9 [INFO] [stderr] | [INFO] [stderr] 38 | / match self { [INFO] [stderr] 39 | | &ByteString(ref v) => fmt_bytestring(&v[..], fmt), [INFO] [stderr] 40 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 38 | match *self { [INFO] [stderr] 39 | ByteString(ref v) => fmt_bytestring(&v[..], fmt), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/util.rs:53:9 [INFO] [stderr] | [INFO] [stderr] 53 | / match self { [INFO] [stderr] 54 | | &ByteString(ref v) => v.borrow() [INFO] [stderr] 55 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 53 | match *self { [INFO] [stderr] 54 | ByteString(ref v) => v.borrow() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:308:9 [INFO] [stderr] | [INFO] [stderr] 308 | / match self { [INFO] [stderr] 309 | | &Bencode::Empty => Ok(()), [INFO] [stderr] 310 | | &Bencode::Number(v) => e.emit_i64(v), [INFO] [stderr] 311 | | &Bencode::ByteString(ref v) => e.emit_str(unsafe { str::from_utf8_unchecked(v) }), [INFO] [stderr] 312 | | &Bencode::List(ref v) => v.encode(e), [INFO] [stderr] 313 | | &Bencode::Dict(ref v) => v.encode(e) [INFO] [stderr] 314 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 308 | match *self { [INFO] [stderr] 309 | Bencode::Empty => Ok(()), [INFO] [stderr] 310 | Bencode::Number(v) => e.emit_i64(v), [INFO] [stderr] 311 | Bencode::ByteString(ref v) => e.emit_str(unsafe { str::from_utf8_unchecked(v) }), [INFO] [stderr] 312 | Bencode::List(ref v) => v.encode(e), [INFO] [stderr] 313 | Bencode::Dict(ref v) => v.encode(e) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:338:9 [INFO] [stderr] | [INFO] [stderr] 338 | / match bencode { [INFO] [stderr] 339 | | &Bencode::ByteString(ref v) => { [INFO] [stderr] 340 | | if v.len() == 0 { [INFO] [stderr] 341 | | Ok(()) [INFO] [stderr] ... | [INFO] [stderr] 346 | | _ => Err(()) [INFO] [stderr] 347 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 338 | match *bencode { [INFO] [stderr] 339 | Bencode::ByteString(ref v) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/bencode.rs:340:20 [INFO] [stderr] | [INFO] [stderr] 340 | if v.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `v.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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:353:9 [INFO] [stderr] | [INFO] [stderr] 353 | / match self { [INFO] [stderr] 354 | | &Some(ref v) => v.to_bencode(), [INFO] [stderr] 355 | | &None => Bencode::ByteString(b"nil".to_vec()) [INFO] [stderr] 356 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 353 | match *self { [INFO] [stderr] 354 | Some(ref v) => v.to_bencode(), [INFO] [stderr] 355 | None => Bencode::ByteString(b"nil".to_vec()) [INFO] [stderr] | [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/bencode.rs:364:9 [INFO] [stderr] | [INFO] [stderr] 364 | / match bencode { [INFO] [stderr] 365 | | &Bencode::ByteString(ref v) => { [INFO] [stderr] 366 | | if v == b"nil" { [INFO] [stderr] 367 | | return Ok(None) [INFO] [stderr] ... | [INFO] [stderr] 370 | | _ => () [INFO] [stderr] 371 | | } [INFO] [stderr] | |_________^ [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] help: try this [INFO] [stderr] | [INFO] [stderr] 364 | if let &Bencode::ByteString(ref v) = bencode { [INFO] [stderr] 365 | if v == b"nil" { [INFO] [stderr] 366 | return Ok(None) [INFO] [stderr] 367 | } [INFO] [stderr] 368 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:364:9 [INFO] [stderr] | [INFO] [stderr] 364 | / match bencode { [INFO] [stderr] 365 | | &Bencode::ByteString(ref v) => { [INFO] [stderr] 366 | | if v == b"nil" { [INFO] [stderr] 367 | | return Ok(None) [INFO] [stderr] ... | [INFO] [stderr] 370 | | _ => () [INFO] [stderr] 371 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 364 | match *bencode { [INFO] [stderr] 365 | Bencode::ByteString(ref v) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/bencode.rs:372:48 [INFO] [stderr] | [INFO] [stderr] 372 | FromBencode::from_bencode(bencode).map(|v| Some(v)) [INFO] [stderr] | ^^^^^^^^^^^ help: remove closure as shown: `Some` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:392:13 [INFO] [stderr] | [INFO] [stderr] 392 | / match bencode { [INFO] [stderr] 393 | | &Bencode::Number(v) => match FromPrimitive::from_i64(v) { [INFO] [stderr] 394 | | Some(n) => Ok(n), [INFO] [stderr] 395 | | None => Err(NumFromBencodeError::OutOfRange(v)), [INFO] [stderr] 396 | | }, [INFO] [stderr] 397 | | _ => Err(NumFromBencodeError::InvalidType), [INFO] [stderr] 398 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] ... [INFO] [stderr] 404 | derive_num_from_bencode!(isize); [INFO] [stderr] | -------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: casting i8 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bencode.rs:377:59 [INFO] [stderr] | [INFO] [stderr] 377 | fn to_bencode(&self) -> Bencode { Bencode::Number(*self as i64) } [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `i64::from(*self)` [INFO] [stderr] ... [INFO] [stderr] 406 | derive_num_to_bencode!(i8); [INFO] [stderr] | --------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:392:13 [INFO] [stderr] | [INFO] [stderr] 392 | / match bencode { [INFO] [stderr] 393 | | &Bencode::Number(v) => match FromPrimitive::from_i64(v) { [INFO] [stderr] 394 | | Some(n) => Ok(n), [INFO] [stderr] 395 | | None => Err(NumFromBencodeError::OutOfRange(v)), [INFO] [stderr] 396 | | }, [INFO] [stderr] 397 | | _ => Err(NumFromBencodeError::InvalidType), [INFO] [stderr] 398 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] ... [INFO] [stderr] 407 | derive_num_from_bencode!(i8); [INFO] [stderr] | ----------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: casting i16 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bencode.rs:377:59 [INFO] [stderr] | [INFO] [stderr] 377 | fn to_bencode(&self) -> Bencode { Bencode::Number(*self as i64) } [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `i64::from(*self)` [INFO] [stderr] ... [INFO] [stderr] 409 | derive_num_to_bencode!(i16); [INFO] [stderr] | ---------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:392:13 [INFO] [stderr] | [INFO] [stderr] 392 | / match bencode { [INFO] [stderr] 393 | | &Bencode::Number(v) => match FromPrimitive::from_i64(v) { [INFO] [stderr] 394 | | Some(n) => Ok(n), [INFO] [stderr] 395 | | None => Err(NumFromBencodeError::OutOfRange(v)), [INFO] [stderr] 396 | | }, [INFO] [stderr] 397 | | _ => Err(NumFromBencodeError::InvalidType), [INFO] [stderr] 398 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] ... [INFO] [stderr] 410 | derive_num_from_bencode!(i16); [INFO] [stderr] | ------------------------------ in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: casting i32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bencode.rs:377:59 [INFO] [stderr] | [INFO] [stderr] 377 | fn to_bencode(&self) -> Bencode { Bencode::Number(*self as i64) } [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `i64::from(*self)` [INFO] [stderr] ... [INFO] [stderr] 412 | derive_num_to_bencode!(i32); [INFO] [stderr] | ---------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:392:13 [INFO] [stderr] | [INFO] [stderr] 392 | / match bencode { [INFO] [stderr] 393 | | &Bencode::Number(v) => match FromPrimitive::from_i64(v) { [INFO] [stderr] 394 | | Some(n) => Ok(n), [INFO] [stderr] 395 | | None => Err(NumFromBencodeError::OutOfRange(v)), [INFO] [stderr] 396 | | }, [INFO] [stderr] 397 | | _ => Err(NumFromBencodeError::InvalidType), [INFO] [stderr] 398 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] ... [INFO] [stderr] 413 | derive_num_from_bencode!(i32); [INFO] [stderr] | ------------------------------ in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:392:13 [INFO] [stderr] | [INFO] [stderr] 392 | / match bencode { [INFO] [stderr] 393 | | &Bencode::Number(v) => match FromPrimitive::from_i64(v) { [INFO] [stderr] 394 | | Some(n) => Ok(n), [INFO] [stderr] 395 | | None => Err(NumFromBencodeError::OutOfRange(v)), [INFO] [stderr] 396 | | }, [INFO] [stderr] 397 | | _ => Err(NumFromBencodeError::InvalidType), [INFO] [stderr] 398 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] ... [INFO] [stderr] 416 | derive_num_from_bencode!(i64); [INFO] [stderr] | ------------------------------ in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:392:13 [INFO] [stderr] | [INFO] [stderr] 392 | / match bencode { [INFO] [stderr] 393 | | &Bencode::Number(v) => match FromPrimitive::from_i64(v) { [INFO] [stderr] 394 | | Some(n) => Ok(n), [INFO] [stderr] 395 | | None => Err(NumFromBencodeError::OutOfRange(v)), [INFO] [stderr] 396 | | }, [INFO] [stderr] 397 | | _ => Err(NumFromBencodeError::InvalidType), [INFO] [stderr] 398 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] ... [INFO] [stderr] 419 | derive_num_from_bencode!(usize); [INFO] [stderr] | -------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bencode.rs:377:59 [INFO] [stderr] | [INFO] [stderr] 377 | fn to_bencode(&self) -> Bencode { Bencode::Number(*self as i64) } [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `i64::from(*self)` [INFO] [stderr] ... [INFO] [stderr] 421 | derive_num_to_bencode!(u8); [INFO] [stderr] | --------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:392:13 [INFO] [stderr] | [INFO] [stderr] 392 | / match bencode { [INFO] [stderr] 393 | | &Bencode::Number(v) => match FromPrimitive::from_i64(v) { [INFO] [stderr] 394 | | Some(n) => Ok(n), [INFO] [stderr] 395 | | None => Err(NumFromBencodeError::OutOfRange(v)), [INFO] [stderr] 396 | | }, [INFO] [stderr] 397 | | _ => Err(NumFromBencodeError::InvalidType), [INFO] [stderr] 398 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] ... [INFO] [stderr] 422 | derive_num_from_bencode!(u8); [INFO] [stderr] | ----------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: casting u16 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bencode.rs:377:59 [INFO] [stderr] | [INFO] [stderr] 377 | fn to_bencode(&self) -> Bencode { Bencode::Number(*self as i64) } [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `i64::from(*self)` [INFO] [stderr] ... [INFO] [stderr] 424 | derive_num_to_bencode!(u16); [INFO] [stderr] | ---------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:392:13 [INFO] [stderr] | [INFO] [stderr] 392 | / match bencode { [INFO] [stderr] 393 | | &Bencode::Number(v) => match FromPrimitive::from_i64(v) { [INFO] [stderr] 394 | | Some(n) => Ok(n), [INFO] [stderr] 395 | | None => Err(NumFromBencodeError::OutOfRange(v)), [INFO] [stderr] 396 | | }, [INFO] [stderr] 397 | | _ => Err(NumFromBencodeError::InvalidType), [INFO] [stderr] 398 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] ... [INFO] [stderr] 425 | derive_num_from_bencode!(u16); [INFO] [stderr] | ------------------------------ in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: casting u32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bencode.rs:377:59 [INFO] [stderr] | [INFO] [stderr] 377 | fn to_bencode(&self) -> Bencode { Bencode::Number(*self as i64) } [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `i64::from(*self)` [INFO] [stderr] ... [INFO] [stderr] 427 | derive_num_to_bencode!(u32); [INFO] [stderr] | ---------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:392:13 [INFO] [stderr] | [INFO] [stderr] 392 | / match bencode { [INFO] [stderr] 393 | | &Bencode::Number(v) => match FromPrimitive::from_i64(v) { [INFO] [stderr] 394 | | Some(n) => Ok(n), [INFO] [stderr] 395 | | None => Err(NumFromBencodeError::OutOfRange(v)), [INFO] [stderr] 396 | | }, [INFO] [stderr] 397 | | _ => Err(NumFromBencodeError::InvalidType), [INFO] [stderr] 398 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] ... [INFO] [stderr] 428 | derive_num_from_bencode!(u32); [INFO] [stderr] | ------------------------------ in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:392:13 [INFO] [stderr] | [INFO] [stderr] 392 | / match bencode { [INFO] [stderr] 393 | | &Bencode::Number(v) => match FromPrimitive::from_i64(v) { [INFO] [stderr] 394 | | Some(n) => Ok(n), [INFO] [stderr] 395 | | None => Err(NumFromBencodeError::OutOfRange(v)), [INFO] [stderr] 396 | | }, [INFO] [stderr] 397 | | _ => Err(NumFromBencodeError::InvalidType), [INFO] [stderr] 398 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] ... [INFO] [stderr] 431 | derive_num_from_bencode!(u64); [INFO] [stderr] | ------------------------------ in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:452:9 [INFO] [stderr] | [INFO] [stderr] 452 | / match bencode { [INFO] [stderr] 453 | | &Bencode::ByteString(ref v) => { [INFO] [stderr] 454 | | let len = v.len(); [INFO] [stderr] 455 | | match len == size_of::() { [INFO] [stderr] ... | [INFO] [stderr] 460 | | _ => Err(InvalidType), [INFO] [stderr] 461 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 452 | match *bencode { [INFO] [stderr] 453 | Bencode::ByteString(ref v) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/bencode.rs:455:17 [INFO] [stderr] | [INFO] [stderr] 455 | / match len == size_of::() { [INFO] [stderr] 456 | | true => Ok(Cursor::new(&v[..]).read_f32::().unwrap()), [INFO] [stderr] 457 | | false => Err(InvalidLen(len)), [INFO] [stderr] 458 | | } [INFO] [stderr] | |_________________^ help: consider using an if/else expression: `if len == size_of::() { Ok(Cursor::new(&v[..]).read_f32::().unwrap()) } else { Err(InvalidLen(len)) }` [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:478:9 [INFO] [stderr] | [INFO] [stderr] 478 | / match bencode { [INFO] [stderr] 479 | | &Bencode::ByteString(ref v) => { [INFO] [stderr] 480 | | let len = v.len(); [INFO] [stderr] 481 | | match len == size_of::() { [INFO] [stderr] ... | [INFO] [stderr] 486 | | _ => Err(InvalidType), [INFO] [stderr] 487 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 478 | match *bencode { [INFO] [stderr] 479 | Bencode::ByteString(ref v) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/bencode.rs:481:17 [INFO] [stderr] | [INFO] [stderr] 481 | / match len == size_of::() { [INFO] [stderr] 482 | | true => Ok(Cursor::new(&v[..]).read_f64::().unwrap()), [INFO] [stderr] 483 | | false => Err(InvalidLen(len)), [INFO] [stderr] 484 | | } [INFO] [stderr] | |_________________^ help: consider using an if/else expression: `if len == size_of::() { Ok(Cursor::new(&v[..]).read_f64::().unwrap()) } else { Err(InvalidLen(len)) }` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:511:9 [INFO] [stderr] | [INFO] [stderr] 511 | / match bencode { [INFO] [stderr] 512 | | &Bencode::ByteString(ref v) => { [INFO] [stderr] 513 | | if v == b"true" { [INFO] [stderr] 514 | | Ok(true) [INFO] [stderr] ... | [INFO] [stderr] 521 | | _ => Err(BoolFromBencodeError::NotAString) [INFO] [stderr] 522 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 511 | match *bencode { [INFO] [stderr] 512 | Bencode::ByteString(ref v) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:579:9 [INFO] [stderr] | [INFO] [stderr] 579 | / match bencode { [INFO] [stderr] 580 | | &Bencode::ByteString(ref v) => std::str::from_utf8(v).map(|s| s.to_string()).map_err(FromUtf8), [INFO] [stderr] 581 | | _ => Err(InvalidType), [INFO] [stderr] 582 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 579 | match *bencode { [INFO] [stderr] 580 | Bencode::ByteString(ref v) => std::str::from_utf8(v).map(|s| s.to_string()).map_err(FromUtf8), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:600:9 [INFO] [stderr] | [INFO] [stderr] 600 | / match bencode { [INFO] [stderr] 601 | | &Bencode::List(ref es) => { [INFO] [stderr] 602 | | let mut list = Vec::new(); [INFO] [stderr] 603 | | for e in es.iter() { [INFO] [stderr] ... | [INFO] [stderr] 611 | | _ => Err(VecFromBencodeError::InvalidType), [INFO] [stderr] 612 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 600 | match *bencode { [INFO] [stderr] 601 | Bencode::List(ref es) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:635:19 [INFO] [stderr] | [INFO] [stderr] 635 | let res = match $bencode { [INFO] [stderr] | ___________________^ [INFO] [stderr] 636 | | &Bencode::Dict(ref map) => { [INFO] [stderr] 637 | | let mut m = $mty::new(); [INFO] [stderr] 638 | | for (key, value) in map.iter() { [INFO] [stderr] ... | [INFO] [stderr] 652 | | _ => Err(MapFromBencodeError::InvalidType), [INFO] [stderr] 653 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] ... [INFO] [stderr] 667 | map_from_bencode!(BTreeMap, bencode) [INFO] [stderr] | ------------------------------------ in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: impl for `HashMap` should be generalized over different hashers [INFO] [stderr] --> src/bencode.rs:671:34 [INFO] [stderr] | [INFO] [stderr] 671 | impl ToBencode for HashMap { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::implicit_hasher)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_hasher [INFO] [stderr] help: consider adding a type parameter [INFO] [stderr] | [INFO] [stderr] 671 | impl ToBencode for HashMap { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: impl for `HashMap` should be generalized over different hashers [INFO] [stderr] --> src/bencode.rs:677:38 [INFO] [stderr] | [INFO] [stderr] 677 | impl FromBencode for HashMap { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_hasher [INFO] [stderr] help: consider adding a type parameter [INFO] [stderr] | [INFO] [stderr] 677 | impl FromBencode for HashMap { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: ...and use generic constructor [INFO] [stderr] | [INFO] [stderr] 637 | let mut m = HashMap::default(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:635:19 [INFO] [stderr] | [INFO] [stderr] 635 | let res = match $bencode { [INFO] [stderr] | ___________________^ [INFO] [stderr] 636 | | &Bencode::Dict(ref map) => { [INFO] [stderr] 637 | | let mut m = $mty::new(); [INFO] [stderr] 638 | | for (key, value) in map.iter() { [INFO] [stderr] ... | [INFO] [stderr] 652 | | _ => Err(MapFromBencodeError::InvalidType), [INFO] [stderr] 653 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] ... [INFO] [stderr] 680 | map_from_bencode!(HashMap, bencode) [INFO] [stderr] | ----------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/bencode.rs:685:15 [INFO] [stderr] | [INFO] [stderr] 685 | from_iter(buf.iter().map(|b| *b)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `buf.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [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/bencode.rs:702:9 [INFO] [stderr] | [INFO] [stderr] 702 | / match t.encode(&mut encoder) { [INFO] [stderr] 703 | | Err(e) => return Err(e), [INFO] [stderr] 704 | | _ => {} [INFO] [stderr] 705 | | } [INFO] [stderr] | |_________^ help: try this: `if let Err(e) = t.encode(&mut encoder) { return Err(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: length comparison to zero [INFO] [stderr] --> src/bencode.rs:743:12 [INFO] [stderr] | [INFO] [stderr] 743 | if self.writers.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.writers.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bencode.rs:787:71 [INFO] [stderr] | [INFO] [stderr] 787 | fn emit_u8(&mut self, v: u8) -> EncoderResult<()> { self.emit_i64(v as i64) } [INFO] [stderr] | ^^^^^^^^ help: try: `i64::from(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u16 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bencode.rs:789:73 [INFO] [stderr] | [INFO] [stderr] 789 | fn emit_u16(&mut self, v: u16) -> EncoderResult<()> { self.emit_i64(v as i64) } [INFO] [stderr] | ^^^^^^^^ help: try: `i64::from(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bencode.rs:791:73 [INFO] [stderr] | [INFO] [stderr] 791 | fn emit_u32(&mut self, v: u32) -> EncoderResult<()> { self.emit_i64(v as i64) } [INFO] [stderr] | ^^^^^^^^ help: try: `i64::from(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting i8 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bencode.rs:797:71 [INFO] [stderr] | [INFO] [stderr] 797 | fn emit_i8(&mut self, v: i8) -> EncoderResult<()> { self.emit_i64(v as i64) } [INFO] [stderr] | ^^^^^^^^ help: try: `i64::from(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting i16 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bencode.rs:799:73 [INFO] [stderr] | [INFO] [stderr] 799 | fn emit_i16(&mut self, v: i16) -> EncoderResult<()> { self.emit_i64(v as i64) } [INFO] [stderr] | ^^^^^^^^ help: try: `i64::from(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting i32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/bencode.rs:801:73 [INFO] [stderr] | [INFO] [stderr] 801 | fn emit_i32(&mut self, v: i32) -> EncoderResult<()> { self.emit_i64(v as i64) } [INFO] [stderr] | ^^^^^^^^ help: try: `i64::from(v)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/bencode.rs:1220:17 [INFO] [stderr] | [INFO] [stderr] 1220 | / match *v { [INFO] [stderr] 1221 | | &Bencode::Dict(ref m) => { [INFO] [stderr] 1222 | | match m.get(&util::ByteString::from_slice(name.as_bytes())) { [INFO] [stderr] 1223 | | Some(v) => v, [INFO] [stderr] ... | [INFO] [stderr] 1227 | | _ => return Err(Expecting("Dict", format!("{:?}", v))) [INFO] [stderr] 1228 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 1220 | match *(*v) { [INFO] [stderr] 1221 | Bencode::Dict(ref m) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/bencode.rs:1281:76 [INFO] [stderr] | [INFO] [stderr] 1281 | val => return Err(Expecting("List", val.map(|v| v.to_string()).unwrap_or("".to_string()))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| "".to_string())` [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 `unwrap_or` followed by a function call [INFO] [stderr] --> src/bencode.rs:1301:76 [INFO] [stderr] | [INFO] [stderr] 1301 | val => return Err(Expecting("Dict", val.map(|v| v.to_string()).unwrap_or("".to_string()))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| "".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] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/bencode.rs:1889:71 [INFO] [stderr] | [INFO] [stderr] 1889 | assert_eq!(try_bencode(Bencode::List(vec![Bencode::ByteString("foobar".as_bytes().to_vec()), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"foobar"` [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] Finished dev [unoptimized + debuginfo] target(s) in 4.58s [INFO] running `"docker" "inspect" "21ad4f85eca7dcc44344df5d3f4123b399181f8128a052ddf08eb0eb29982b1e"` [INFO] running `"docker" "rm" "-f" "21ad4f85eca7dcc44344df5d3f4123b399181f8128a052ddf08eb0eb29982b1e"` [INFO] [stdout] 21ad4f85eca7dcc44344df5d3f4123b399181f8128a052ddf08eb0eb29982b1e