[INFO] updating cached repository 0queue/boosttorrent2 [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/0queue/boosttorrent2 [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/0queue/boosttorrent2" "work/ex/clippy-test-run/sources/stable/gh/0queue/boosttorrent2"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/0queue/boosttorrent2'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/0queue/boosttorrent2" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/0queue/boosttorrent2"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/0queue/boosttorrent2'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] f802e3a3a47dc6343090d220240fd157537e06d1 [INFO] sha for GitHub repo 0queue/boosttorrent2: f802e3a3a47dc6343090d220240fd157537e06d1 [INFO] validating manifest of 0queue/boosttorrent2 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 0queue/boosttorrent2 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 0queue/boosttorrent2 [INFO] finished frobbing 0queue/boosttorrent2 [INFO] frobbed toml for 0queue/boosttorrent2 written to work/ex/clippy-test-run/sources/stable/gh/0queue/boosttorrent2/Cargo.toml [INFO] started frobbing 0queue/boosttorrent2 [INFO] finished frobbing 0queue/boosttorrent2 [INFO] frobbed toml for 0queue/boosttorrent2 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/0queue/boosttorrent2/Cargo.toml [INFO] crate 0queue/boosttorrent2 has a lockfile. skipping [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 0queue/boosttorrent2 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-7/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/0queue/boosttorrent2:/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] 55826b2b1c0837f902c48de83d139e2fc95207d7c734b83da0171fe741f754c9 [INFO] running `"docker" "start" "-a" "55826b2b1c0837f902c48de83d139e2fc95207d7c734b83da0171fe741f754c9"` [INFO] [stderr] Compiling case v0.1.0 [INFO] [stderr] Checking replace_with v0.1.1 [INFO] [stderr] Checking simple_logger v1.0.1 [INFO] [stderr] Checking tokio-reactor v0.1.6 [INFO] [stderr] Checking tokio-fs v0.1.4 [INFO] [stderr] Compiling derive-error v0.0.4 [INFO] [stderr] Checking tokio-tcp v0.1.2 [INFO] [stderr] Checking tokio-uds v0.2.3 [INFO] [stderr] Checking tokio-udp v0.1.2 [INFO] [stderr] Checking tokio v0.1.11 [INFO] [stderr] Checking hyper v0.12.13 [INFO] [stderr] Checking boosttorrent2 v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/boostencode/parse/mod.rs:18:14 [INFO] [stderr] | [INFO] [stderr] 18 | _ => return Err(DecodeError::InvalidValue) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err(DecodeError::InvalidValue)` [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: unused import: `std::collections::HashMap` [INFO] [stderr] --> src/metainfo/mod.rs:5:5 [INFO] [stderr] | [INFO] [stderr] 5 | use std::collections::HashMap; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `Receiver` [INFO] [stderr] --> src/server/mod.rs:2:36 [INFO] [stderr] | [INFO] [stderr] 2 | use futures::sync::mpsc::{channel, Receiver, Sender}; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::default::Default` [INFO] [stderr] --> src/server/mod.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | use std::default::Default; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::ops::Deref` [INFO] [stderr] --> src/server/mod.rs:14:5 [INFO] [stderr] | [INFO] [stderr] 14 | use std::ops::Deref; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `future`, `io::Error` [INFO] [stderr] --> src/server/mod.rs:17:5 [INFO] [stderr] | [INFO] [stderr] 17 | io::Error, [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 25 | future, [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/piece/mod.rs:34:9 [INFO] [stderr] | [INFO] [stderr] 34 | return data_hash == self.hash; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `data_hash == self.hash` [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: unused import: `Receiver` [INFO] [stderr] --> src/peer/mod.rs:3:5 [INFO] [stderr] | [INFO] [stderr] 3 | Receiver, [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `AsyncSink` [INFO] [stderr] --> src/peer/mod.rs:13:9 [INFO] [stderr] | [INFO] [stderr] 13 | AsyncSink, [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `derive_error::Error` [INFO] [stderr] --> src/peer/message.rs:3:5 [INFO] [stderr] | [INFO] [stderr] 3 | use derive_error::Error; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/boostencode/parse/mod.rs:18:14 [INFO] [stderr] | [INFO] [stderr] 18 | _ => return Err(DecodeError::InvalidValue) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err(DecodeError::InvalidValue)` [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: unused import: `std::collections::HashMap` [INFO] [stderr] --> src/metainfo/mod.rs:5:5 [INFO] [stderr] | [INFO] [stderr] 5 | use std::collections::HashMap; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Arc`, `RwLock` [INFO] [stderr] --> src/tracker/test.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | Arc, [INFO] [stderr] | ^^^ [INFO] [stderr] 12 | RwLock, [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Receiver` [INFO] [stderr] --> src/server/mod.rs:2:36 [INFO] [stderr] | [INFO] [stderr] 2 | use futures::sync::mpsc::{channel, Receiver, Sender}; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::default::Default` [INFO] [stderr] --> src/server/mod.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | use std::default::Default; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::ops::Deref` [INFO] [stderr] --> src/server/mod.rs:14:5 [INFO] [stderr] | [INFO] [stderr] 14 | use std::ops::Deref; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `future`, `io::Error` [INFO] [stderr] --> src/server/mod.rs:17:5 [INFO] [stderr] | [INFO] [stderr] 17 | io::Error, [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 25 | future, [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/piece/mod.rs:34:9 [INFO] [stderr] | [INFO] [stderr] 34 | return data_hash == self.hash; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `data_hash == self.hash` [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: unused import: `Receiver` [INFO] [stderr] --> src/peer/mod.rs:3:5 [INFO] [stderr] | [INFO] [stderr] 3 | Receiver, [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `AsyncSink` [INFO] [stderr] --> src/peer/mod.rs:13:9 [INFO] [stderr] | [INFO] [stderr] 13 | AsyncSink, [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `derive_error::Error` [INFO] [stderr] --> src/peer/message.rs:3:5 [INFO] [stderr] | [INFO] [stderr] 3 | use derive_error::Error; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused variable: `val` [INFO] [stderr] --> src/metainfo/mod.rs:92:19 [INFO] [stderr] | [INFO] [stderr] 92 | fn from_value(val: &Value) -> Result where Self: Sized { [INFO] [stderr] | ^^^ help: consider using `_val` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `finished_piece` [INFO] [stderr] --> src/server/mod.rs:159:39 [INFO] [stderr] | [INFO] [stderr] 159 | Ok(Async::Ready(Some((finished_piece, new_piece_sender, availible_pieces)))) => { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider using `_finished_piece` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `new_piece_sender` [INFO] [stderr] --> src/server/mod.rs:159:55 [INFO] [stderr] | [INFO] [stderr] 159 | Ok(Async::Ready(Some((finished_piece, new_piece_sender, availible_pieces)))) => { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using `_new_piece_sender` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `availible_pieces` [INFO] [stderr] --> src/server/mod.rs:159:73 [INFO] [stderr] | [INFO] [stderr] 159 | Ok(Async::Ready(Some((finished_piece, new_piece_sender, availible_pieces)))) => { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using `_availible_pieces` instead [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Failure` [INFO] [stderr] --> src/tracker/mod.rs:76:5 [INFO] [stderr] | [INFO] [stderr] 76 | Failure(String), [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Stopped` [INFO] [stderr] --> src/tracker/mod.rs:99:5 [INFO] [stderr] | [INFO] [stderr] 99 | Stopped, [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Completed` [INFO] [stderr] --> src/tracker/mod.rs:100:5 [INFO] [stderr] | [INFO] [stderr] 100 | Completed, [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `cancel` [INFO] [stderr] --> src/tracker/mod.rs:232:5 [INFO] [stderr] | [INFO] [stderr] 232 | pub fn cancel(&mut self, left: u64, uploaded: u64, downloaded: u64) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `finish` [INFO] [stderr] --> src/tracker/mod.rs:237:5 [INFO] [stderr] | [INFO] [stderr] 237 | pub fn finish(&mut self, left: u64, uploaded: u64, downloaded: u64) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `refresh` [INFO] [stderr] --> src/tracker/mod.rs:242:5 [INFO] [stderr] | [INFO] [stderr] 242 | pub fn refresh(&mut self, left: u64, uploaded: u64, downloaded: u64) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `data` [INFO] [stderr] --> src/piece/mod.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | data: Vec, [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `hasher` [INFO] [stderr] --> src/piece/mod.rs:10:5 [INFO] [stderr] | [INFO] [stderr] 10 | hasher: Sha1, [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `hash` [INFO] [stderr] --> src/piece/mod.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | hash: [u8; 20], [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `sub_pieces` [INFO] [stderr] --> src/piece/mod.rs:14:5 [INFO] [stderr] | [INFO] [stderr] 14 | sub_pieces: BitVec [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/piece/mod.rs:18:5 [INFO] [stderr] | [INFO] [stderr] 18 | pub fn new(piece_size: u32, piece_hash: [u8;20]) -> Self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `verify` [INFO] [stderr] --> src/piece/mod.rs:29:5 [INFO] [stderr] | [INFO] [stderr] 29 | pub fn verify(&mut self) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `uploaded_sender` [INFO] [stderr] --> src/peer/mod.rs:25:5 [INFO] [stderr] | [INFO] [stderr] 25 | uploaded_sender: Sender, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `downloaded_sender` [INFO] [stderr] --> src/peer/mod.rs:26:5 [INFO] [stderr] | [INFO] [stderr] 26 | downloaded_sender: Sender, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `finished_piece_sender` [INFO] [stderr] --> src/peer/mod.rs:29:5 [INFO] [stderr] | [INFO] [stderr] 29 | finished_piece_sender: Sender<(Piece, Sender, BitVec)>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `peers_pieces` [INFO] [stderr] --> src/peer/mod.rs:30:5 [INFO] [stderr] | [INFO] [stderr] 30 | peers_pieces: BitVec, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/boostencode/parse/mod.rs:117:11 [INFO] [stderr] | [INFO] [stderr] 117 | while bytes.len() > 0 && bytes[0] as char >= '0' && bytes[0] as char <= '9' { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!bytes.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: length comparison to zero [INFO] [stderr] --> src/boostencode/mod.rs:48:12 [INFO] [stderr] | [INFO] [stderr] 48 | if bytes.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!bytes.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 character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/mod.rs:59:26 [INFO] [stderr] | [INFO] [stderr] 59 | res.push(':' as u8); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::char_lit_as_u8)] on by default [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b':' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/mod.rs:67:36 [INFO] [stderr] | [INFO] [stderr] 67 | let mut res = vec!['l' as u8]; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'l' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/boostencode/mod.rs:68:22 [INFO] [stderr] | [INFO] [stderr] 68 | vals.into_iter().for_each(|v| res.append(&mut v.encode())); [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: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/mod.rs:69:26 [INFO] [stderr] | [INFO] [stderr] 69 | res.push('e' as u8); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'e' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/mod.rs:74:36 [INFO] [stderr] | [INFO] [stderr] 74 | let mut res = vec!['d' as u8]; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'd' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/mod.rs:83:26 [INFO] [stderr] | [INFO] [stderr] 83 | res.push('e' as u8); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'e' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/boostencode/mod.rs:131:76 [INFO] [stderr] | [INFO] [stderr] 131 | Value::BString(bytes) => write!(f, "{}", str::from_utf8(bytes).unwrap_or(format!("<{} bytes>", bytes.len()).as_ref())), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| format!("<{} bytes>", bytes.len()).as_ref())` [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: unused `std::result::Result` that must be used [INFO] [stderr] --> src/boostencode/mod.rs:137:25 [INFO] [stderr] | [INFO] [stderr] 137 | write!(f, ", "); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [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: unused `std::result::Result` that must be used [INFO] [stderr] --> src/boostencode/mod.rs:140:21 [INFO] [stderr] | [INFO] [stderr] 140 | write!(f, "{}", val); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [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: unused `std::result::Result` that must be used [INFO] [stderr] --> src/boostencode/mod.rs:147:17 [INFO] [stderr] | [INFO] [stderr] 147 | writeln!(f, "{{"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [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: unused `std::result::Result` that must be used [INFO] [stderr] --> src/boostencode/mod.rs:149:21 [INFO] [stderr] | [INFO] [stderr] 149 | writeln!(f, " {} => {}", str::from_utf8(k).unwrap_or("[...bytes...]"), v); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [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 `ok_or` followed by a function call [INFO] [stderr] --> src/metainfo/mod.rs:71:30 [INFO] [stderr] | [INFO] [stderr] 71 | let map = val.dict().ok_or("Single file not a dictionary".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Single file not a dictionary".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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/metainfo/mod.rs:74:14 [INFO] [stderr] | [INFO] [stderr] 74 | .ok_or("Missing key: name".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Missing key: name".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/metainfo/mod.rs:73:33 [INFO] [stderr] | [INFO] [stderr] 73 | let file_name = map.get("name".as_bytes()).and_then(Value::bstring_utf8) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"name"` [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/metainfo/mod.rs:77:35 [INFO] [stderr] | [INFO] [stderr] 77 | .map(|i| *i as usize).ok_or("Missing key: length".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Missing key: length".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/metainfo/mod.rs:76:30 [INFO] [stderr] | [INFO] [stderr] 76 | let length = map.get("length".as_bytes()).and_then(Value::integer) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"length"` [INFO] [stderr] | [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/metainfo/mod.rs:79:30 [INFO] [stderr] | [INFO] [stderr] 79 | let md5sum = map.get("md5".as_bytes()).and_then(Value::bstring_utf8); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"md5"` [INFO] [stderr] | [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/metainfo/mod.rs:101:30 [INFO] [stderr] | [INFO] [stderr] 101 | let map = val.dict().ok_or("File info not a dictionary".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "File info not a dictionary".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/metainfo/mod.rs:102:24 [INFO] [stderr] | [INFO] [stderr] 102 | match (map.get("length".as_bytes()), map.get("files".as_bytes())) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"length"` [INFO] [stderr] | [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/metainfo/mod.rs:102:54 [INFO] [stderr] | [INFO] [stderr] 102 | match (map.get("length".as_bytes()), map.get("files".as_bytes())) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"files"` [INFO] [stderr] | [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: redundant closure found [INFO] [stderr] --> src/metainfo/mod.rs:103:64 [INFO] [stderr] | [INFO] [stderr] 103 | (Some(_), None) => SingleFile::from_value(val).map(|f| FileInfo::Single(f)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `FileInfo::Single` [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: redundant closure found [INFO] [stderr] --> src/metainfo/mod.rs:104:63 [INFO] [stderr] | [INFO] [stderr] 104 | (None, Some(_)) => MultiFile::from_value(val).map(|f| FileInfo::Multi(f)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `FileInfo::Multi` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/metainfo/mod.rs:124:30 [INFO] [stderr] | [INFO] [stderr] 124 | let map = val.dict().ok_or("Info not a dictionary".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Info not a dictionary".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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/metainfo/mod.rs:128:14 [INFO] [stderr] | [INFO] [stderr] 128 | .ok_or("Missing key: piece length".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Missing key: piece length".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/metainfo/mod.rs:126:36 [INFO] [stderr] | [INFO] [stderr] 126 | let piece_length = map.get("piece length".as_bytes()).and_then(Value::integer) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"piece length"` [INFO] [stderr] | [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/metainfo/mod.rs:136:37 [INFO] [stderr] | [INFO] [stderr] 136 | }).collect::>()).ok_or("Missking key: pieces".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Missking key: pieces".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/metainfo/mod.rs:130:30 [INFO] [stderr] | [INFO] [stderr] 130 | let pieces = map.get("pieces".as_bytes()).and_then(Value::bstring) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"pieces"` [INFO] [stderr] | [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/metainfo/mod.rs:138:31 [INFO] [stderr] | [INFO] [stderr] 138 | let private = map.get("private".as_bytes()).and_then(Value::integer) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"private"` [INFO] [stderr] | [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/metainfo/mod.rs:156:30 [INFO] [stderr] | [INFO] [stderr] 156 | let map = val.dict().ok_or("Not a dictionary".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Not a dictionary".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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/metainfo/mod.rs:158:51 [INFO] [stderr] | [INFO] [stderr] 158 | let info_val = map.get("info".as_bytes()).ok_or("Missing key: info".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Missing key: info".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/metainfo/mod.rs:158:32 [INFO] [stderr] | [INFO] [stderr] 158 | let info_val = map.get("info".as_bytes()).ok_or("Missing key: info".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"info"` [INFO] [stderr] | [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/metainfo/mod.rs:162:85 [INFO] [stderr] | [INFO] [stderr] 162 | let announce = map.get("announce".as_bytes()).and_then(Value::bstring_utf8).ok_or("Missing key: announce".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Missing key: announce".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/metainfo/mod.rs:162:32 [INFO] [stderr] | [INFO] [stderr] 162 | let announce = map.get("announce".as_bytes()).and_then(Value::bstring_utf8).ok_or("Missing key: announce".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"announce"` [INFO] [stderr] | [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/metainfo/mod.rs:164:37 [INFO] [stderr] | [INFO] [stderr] 164 | let announce_list = map.get("announce-list".as_bytes()).and_then(Value::list) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"announce-list"` [INFO] [stderr] | [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/metainfo/mod.rs:167:37 [INFO] [stderr] | [INFO] [stderr] 167 | let creation_date = map.get("creation date".as_bytes()).and_then(Value::integer) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"creation date"` [INFO] [stderr] | [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/metainfo/mod.rs:170:31 [INFO] [stderr] | [INFO] [stderr] 170 | let comment = map.get("comment".as_bytes()).and_then(Value::bstring_utf8); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"comment"` [INFO] [stderr] | [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/metainfo/mod.rs:172:34 [INFO] [stderr] | [INFO] [stderr] 172 | let created_by = map.get("created by".as_bytes()).and_then(Value::bstring_utf8); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"created by"` [INFO] [stderr] | [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/metainfo/mod.rs:174:32 [INFO] [stderr] | [INFO] [stderr] 174 | let encoding = map.get("encoding".as_bytes()).and_then(Value::bstring_utf8); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"encoding"` [INFO] [stderr] | [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/metainfo/mod.rs:190:39 [INFO] [stderr] | [INFO] [stderr] 190 | fn interpret_announce_list(tiers: &Vec) -> Option> { [INFO] [stderr] | ^^^^^^^^^^^ help: change this to: `&[Value]` [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/tracker/mod.rs:117:30 [INFO] [stderr] | [INFO] [stderr] 117 | let map = val.dict().ok_or("Not a dictionary".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Not a dictionary".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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/tracker/mod.rs:122:14 [INFO] [stderr] | [INFO] [stderr] 122 | .ok_or("Missing key: peer id".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Missing key: peer id".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/tracker/mod.rs:120:17 [INFO] [stderr] | [INFO] [stderr] 120 | map.get("peer id".as_bytes()).and_then(Value::bstring) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"peer id"` [INFO] [stderr] | [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/tracker/mod.rs:127:14 [INFO] [stderr] | [INFO] [stderr] 127 | .ok_or("Missing key: ip".to_string())? [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Missing key: ip".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/tracker/mod.rs:125:26 [INFO] [stderr] | [INFO] [stderr] 125 | let ip = map.get("ip".as_bytes()).and_then(Value::bstring_utf8) [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"ip"` [INFO] [stderr] | [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/tracker/mod.rs:132:14 [INFO] [stderr] | [INFO] [stderr] 132 | .ok_or("Missing key: port".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Missing key: port".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/tracker/mod.rs:130:28 [INFO] [stderr] | [INFO] [stderr] 130 | let port = map.get("port".as_bytes()).and_then(Value::integer) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"port"` [INFO] [stderr] | [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/tracker/mod.rs:145:30 [INFO] [stderr] | [INFO] [stderr] 145 | let map = val.dict().ok_or("Not a dictionary".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Not a dictionary".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/tracker/mod.rs:147:36 [INFO] [stderr] | [INFO] [stderr] 147 | if let Some(msg) = map.get("failure reason".as_bytes()) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"failure reason"` [INFO] [stderr] | [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/tracker/mod.rs:148:43 [INFO] [stderr] | [INFO] [stderr] 148 | return Err(msg.bstring_utf8().unwrap_or("unknown failure reason".to_string())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| "unknown failure reason".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/tracker/mod.rs:151:35 [INFO] [stderr] | [INFO] [stderr] 151 | let warning_msg = map.get("warning message".as_bytes()).and_then(Value::bstring_utf8); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"warning message"` [INFO] [stderr] | [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/tracker/mod.rs:156:14 [INFO] [stderr] | [INFO] [stderr] 156 | .ok_or("Missing key: interval".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Missing key: interval".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/tracker/mod.rs:154:32 [INFO] [stderr] | [INFO] [stderr] 154 | let interval = map.get("interval".as_bytes()).and_then(Value::integer) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"interval"` [INFO] [stderr] | [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/tracker/mod.rs:158:36 [INFO] [stderr] | [INFO] [stderr] 158 | let min_interval = map.get("min interval".as_bytes()).and_then(Value::integer) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"min interval"` [INFO] [stderr] | [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/tracker/mod.rs:161:34 [INFO] [stderr] | [INFO] [stderr] 161 | let tracker_id = map.get("tracker id".as_bytes()).and_then(Value::bstring_utf8); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"tracker id"` [INFO] [stderr] | [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/tracker/mod.rs:165:14 [INFO] [stderr] | [INFO] [stderr] 165 | .ok_or("Missing key: complete".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Missing key: complete".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/tracker/mod.rs:163:32 [INFO] [stderr] | [INFO] [stderr] 163 | let complete = map.get("complete".as_bytes()).and_then(Value::integer) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"complete"` [INFO] [stderr] | [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/tracker/mod.rs:169:14 [INFO] [stderr] | [INFO] [stderr] 169 | .ok_or("Missing key: incomplete".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Missing key: incomplete".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/tracker/mod.rs:167:34 [INFO] [stderr] | [INFO] [stderr] 167 | let incomplete = map.get("incomplete".as_bytes()).and_then(Value::integer) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"incomplete"` [INFO] [stderr] | [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/tracker/mod.rs:171:55 [INFO] [stderr] | [INFO] [stderr] 171 | let peers = match map.get("peers".as_bytes()).ok_or("Missing key: peers".to_string())? { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Missing key: peers".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/tracker/mod.rs:171:35 [INFO] [stderr] | [INFO] [stderr] 171 | let peers = match map.get("peers".as_bytes()).ok_or("Missing key: peers".to_string())? { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"peers"` [INFO] [stderr] | [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: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/tracker/mod.rs:180:33 [INFO] [stderr] | [INFO] [stderr] 180 | let port = (peer_slice[0] as u16 * 256) + peer_slice[1] as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(peer_slice[0])` [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: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/tracker/mod.rs:180:63 [INFO] [stderr] | [INFO] [stderr] 180 | let port = (peer_slice[0] as u16 * 256) + peer_slice[1] as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(peer_slice[1])` [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 seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/tracker/mod.rs:268:9 [INFO] [stderr] | [INFO] [stderr] 268 | / match event { [INFO] [stderr] 269 | | Some(e) => { [INFO] [stderr] 270 | | req_uri.push_str("event"); [INFO] [stderr] 271 | | req_uri.push('='); [INFO] [stderr] ... | [INFO] [stderr] 275 | | None => () [INFO] [stderr] 276 | | } [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] 268 | if let Some(e) = event { [INFO] [stderr] 269 | req_uri.push_str("event"); [INFO] [stderr] 270 | req_uri.push('='); [INFO] [stderr] 271 | req_uri.push_str(&e.to_string()); [INFO] [stderr] 272 | req_uri.push('&') [INFO] [stderr] 273 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/tracker/mod.rs:294:37 [INFO] [stderr] | [INFO] [stderr] 294 | client.get(uri).map_err(|e| TrackerError::ConnectionError(e)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `TrackerError::ConnectionError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/tracker/mod.rs:305:26 [INFO] [stderr] | [INFO] [stderr] 305 | .map_err(|e| TrackerError::ConnectionError(e)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `TrackerError::ConnectionError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/tracker/mod.rs:307:48 [INFO] [stderr] | [INFO] [stderr] 307 | Value::decode(&resp_bytes).map_err(|e| TrackerError::DecodeError(e)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `TrackerError::DecodeError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/server/mod.rs:60:13 [INFO] [stderr] | [INFO] [stderr] 60 | peer_id.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try removing the `clone` call: `peer_id` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/server/mod.rs:62:13 [INFO] [stderr] | [INFO] [stderr] 62 | meta.info_hash.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `meta.info_hash` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/server/mod.rs:129:42 [INFO] [stderr] | [INFO] [stderr] 129 | self.info_hash.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.info_hash` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/server/mod.rs:130:42 [INFO] [stderr] | [INFO] [stderr] 130 | self.peer_id.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.peer_id` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/server/mod.rs:143:9 [INFO] [stderr] | [INFO] [stderr] 143 | / loop { [INFO] [stderr] 144 | | match self.uploaded_stream.poll() { [INFO] [stderr] 145 | | Ok(Async::Ready(Some(update))) => self.uploaded += update as u64, [INFO] [stderr] 146 | | _ => break, [INFO] [stderr] 147 | | } [INFO] [stderr] 148 | | } [INFO] [stderr] | |_________^ help: try: `while let Ok(Async::Ready(Some(update))) = self.uploaded_stream.poll() { .. }` [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: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/server/mod.rs:145:68 [INFO] [stderr] | [INFO] [stderr] 145 | Ok(Async::Ready(Some(update))) => self.uploaded += update as u64, [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `u64::from(update)` [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: this loop could be written as a `while let` loop [INFO] [stderr] --> src/server/mod.rs:149:9 [INFO] [stderr] | [INFO] [stderr] 149 | / loop { [INFO] [stderr] 150 | | match self.downloaded_stream.poll() { [INFO] [stderr] 151 | | Ok(Async::Ready(Some(update))) => self.downloaded += update as u64, [INFO] [stderr] 152 | | _ => break, [INFO] [stderr] 153 | | } [INFO] [stderr] 154 | | } [INFO] [stderr] | |_________^ help: try: `while let Ok(Async::Ready(Some(update))) = self.downloaded_stream.poll() { .. }` [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 u64 may become silently lossy if types change [INFO] [stderr] --> src/server/mod.rs:151:70 [INFO] [stderr] | [INFO] [stderr] 151 | Ok(Async::Ready(Some(update))) => self.downloaded += update as u64, [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `u64::from(update)` [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: this loop could be written as a `while let` loop [INFO] [stderr] --> src/server/mod.rs:157:9 [INFO] [stderr] | [INFO] [stderr] 157 | / loop { [INFO] [stderr] 158 | | match self.piece_stream.poll() { [INFO] [stderr] 159 | | Ok(Async::Ready(Some((finished_piece, new_piece_sender, availible_pieces)))) => { [INFO] [stderr] 160 | | // TODO verify and write off the finished piece and either kill the peer or give [INFO] [stderr] ... | [INFO] [stderr] 164 | | } [INFO] [stderr] 165 | | } [INFO] [stderr] | |_________^ help: try: `while let Ok(Async::Ready(Some((finished_piece, new_piece_sender, availible_pieces)))) = self.piece_stream.poll() { .. }` [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: redundant closure found [INFO] [stderr] --> src/peer/message.rs:136:22 [INFO] [stderr] | [INFO] [stderr] 136 | .map(|m| Some(m)) [INFO] [stderr] | ^^^^^^^^^^^ help: remove closure as shown: `Some` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/peer/message.rs:135:21 [INFO] [stderr] | [INFO] [stderr] 135 | message.ok_or(io::Error::new(io::ErrorKind::Other, "Invalid message id")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| io::Error::new(io::ErrorKind::Other, "Invalid message id"))` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/peer/mod.rs:46:69 [INFO] [stderr] | [INFO] [stderr] 46 | let _res = conn.start_send(message::Message::Handshake((info_hash.clone(), peer_id.clone()).into())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `info_hash` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/peer/mod.rs:46:88 [INFO] [stderr] | [INFO] [stderr] 46 | let _res = conn.start_send(message::Message::Handshake((info_hash.clone(), peer_id.clone()).into())); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try removing the `clone` call: `peer_id` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [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/peer/mod.rs:72:21 [INFO] [stderr] | [INFO] [stderr] 72 | / match message { [INFO] [stderr] 73 | | message::Message::Handshake(item) => { [INFO] [stderr] 74 | | if self.info_hash != item.info_hash { [INFO] [stderr] 75 | | error!("The info hash sent by a peer does not match ours"); [INFO] [stderr] ... | [INFO] [stderr] 86 | | _ => {} [INFO] [stderr] 87 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [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] 72 | if let message::Message::Handshake(item) = message { [INFO] [stderr] 73 | if self.info_hash != item.info_hash { [INFO] [stderr] 74 | error!("The info hash sent by a peer does not match ours"); [INFO] [stderr] 75 | return Err(()) [INFO] [stderr] 76 | } [INFO] [stderr] 77 | if !self.initiates { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/peer/mod.rs:81:42 [INFO] [stderr] | [INFO] [stderr] 81 | (self.info_hash.clone(), self.peer_id.clone()).into() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.info_hash` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/peer/mod.rs:81:66 [INFO] [stderr] | [INFO] [stderr] 81 | (self.info_hash.clone(), self.peer_id.clone()).into() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.peer_id` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: unused variable: `request_` [INFO] [stderr] --> src/tracker/test.rs:18:20 [INFO] [stderr] | [INFO] [stderr] 18 | fn service_handler(request_: Request) -> Response { [INFO] [stderr] | ^^^^^^^^ help: consider using `_request_` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `val` [INFO] [stderr] --> src/metainfo/mod.rs:92:19 [INFO] [stderr] | [INFO] [stderr] 92 | fn from_value(val: &Value) -> Result where Self: Sized { [INFO] [stderr] | ^^^ help: consider using `_val` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `finished_piece` [INFO] [stderr] --> src/server/mod.rs:159:39 [INFO] [stderr] | [INFO] [stderr] 159 | Ok(Async::Ready(Some((finished_piece, new_piece_sender, availible_pieces)))) => { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider using `_finished_piece` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `new_piece_sender` [INFO] [stderr] --> src/server/mod.rs:159:55 [INFO] [stderr] | [INFO] [stderr] 159 | Ok(Async::Ready(Some((finished_piece, new_piece_sender, availible_pieces)))) => { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using `_new_piece_sender` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `availible_pieces` [INFO] [stderr] --> src/server/mod.rs:159:73 [INFO] [stderr] | [INFO] [stderr] 159 | Ok(Async::Ready(Some((finished_piece, new_piece_sender, availible_pieces)))) => { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using `_availible_pieces` instead [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Failure` [INFO] [stderr] --> src/tracker/mod.rs:76:5 [INFO] [stderr] | [INFO] [stderr] 76 | Failure(String), [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Stopped` [INFO] [stderr] --> src/tracker/mod.rs:99:5 [INFO] [stderr] | [INFO] [stderr] 99 | Stopped, [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Completed` [INFO] [stderr] --> src/tracker/mod.rs:100:5 [INFO] [stderr] | [INFO] [stderr] 100 | Completed, [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `cancel` [INFO] [stderr] --> src/tracker/mod.rs:232:5 [INFO] [stderr] | [INFO] [stderr] 232 | pub fn cancel(&mut self, left: u64, uploaded: u64, downloaded: u64) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `finish` [INFO] [stderr] --> src/tracker/mod.rs:237:5 [INFO] [stderr] | [INFO] [stderr] 237 | pub fn finish(&mut self, left: u64, uploaded: u64, downloaded: u64) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `refresh` [INFO] [stderr] --> src/tracker/mod.rs:242:5 [INFO] [stderr] | [INFO] [stderr] 242 | pub fn refresh(&mut self, left: u64, uploaded: u64, downloaded: u64) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `data` [INFO] [stderr] --> src/piece/mod.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | data: Vec, [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `hasher` [INFO] [stderr] --> src/piece/mod.rs:10:5 [INFO] [stderr] | [INFO] [stderr] 10 | hasher: Sha1, [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `hash` [INFO] [stderr] --> src/piece/mod.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | hash: [u8; 20], [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `sub_pieces` [INFO] [stderr] --> src/piece/mod.rs:14:5 [INFO] [stderr] | [INFO] [stderr] 14 | sub_pieces: BitVec [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/piece/mod.rs:18:5 [INFO] [stderr] | [INFO] [stderr] 18 | pub fn new(piece_size: u32, piece_hash: [u8;20]) -> Self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `verify` [INFO] [stderr] --> src/piece/mod.rs:29:5 [INFO] [stderr] | [INFO] [stderr] 29 | pub fn verify(&mut self) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `uploaded_sender` [INFO] [stderr] --> src/peer/mod.rs:25:5 [INFO] [stderr] | [INFO] [stderr] 25 | uploaded_sender: Sender, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `downloaded_sender` [INFO] [stderr] --> src/peer/mod.rs:26:5 [INFO] [stderr] | [INFO] [stderr] 26 | downloaded_sender: Sender, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `finished_piece_sender` [INFO] [stderr] --> src/peer/mod.rs:29:5 [INFO] [stderr] | [INFO] [stderr] 29 | finished_piece_sender: Sender<(Piece, Sender, BitVec)>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `peers_pieces` [INFO] [stderr] --> src/peer/mod.rs:30:5 [INFO] [stderr] | [INFO] [stderr] 30 | peers_pieces: BitVec, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/parse/test.rs:16:41 [INFO] [stderr] | [INFO] [stderr] 16 | assert_eq!(val, Value::BString(vec!['s' as u8, 'p' as u8, 'a' as u8, 'm' as u8])); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::char_lit_as_u8)] on by default [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b's' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/parse/test.rs:16:52 [INFO] [stderr] | [INFO] [stderr] 16 | assert_eq!(val, Value::BString(vec!['s' as u8, 'p' as u8, 'a' as u8, 'm' as u8])); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'p' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/parse/test.rs:16:63 [INFO] [stderr] | [INFO] [stderr] 16 | assert_eq!(val, Value::BString(vec!['s' as u8, 'p' as u8, 'a' as u8, 'm' as u8])); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'a' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/parse/test.rs:16:74 [INFO] [stderr] | [INFO] [stderr] 16 | assert_eq!(val, Value::BString(vec!['s' as u8, 'p' as u8, 'a' as u8, 'm' as u8])); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'm' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/parse/test.rs:57:59 [INFO] [stderr] | [INFO] [stderr] 57 | assert_eq!(val1, Value::List(vec![Value::BString(vec!['s' as u8, 'p' as u8, 'a' as u8, 'm' as u8]), Value::Integer(123)])) [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b's' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/parse/test.rs:57:70 [INFO] [stderr] | [INFO] [stderr] 57 | assert_eq!(val1, Value::List(vec![Value::BString(vec!['s' as u8, 'p' as u8, 'a' as u8, 'm' as u8]), Value::Integer(123)])) [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'p' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/parse/test.rs:57:81 [INFO] [stderr] | [INFO] [stderr] 57 | assert_eq!(val1, Value::List(vec![Value::BString(vec!['s' as u8, 'p' as u8, 'a' as u8, 'm' as u8]), Value::Integer(123)])) [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'a' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/parse/test.rs:57:92 [INFO] [stderr] | [INFO] [stderr] 57 | assert_eq!(val1, Value::List(vec![Value::BString(vec!['s' as u8, 'p' as u8, 'a' as u8, 'm' as u8]), Value::Integer(123)])) [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'm' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/parse/test.rs:66:21 [INFO] [stderr] | [INFO] [stderr] 66 | map.insert(vec!['h' as u8, 'e' as u8, 'l' as u8, 'l' as u8, 'o' as u8], Value::BString(vec!['w' as u8, 'o' as u8, 'r' as u8, 'l' as u8, 'd' as u8])); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'h' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/parse/test.rs:66:32 [INFO] [stderr] | [INFO] [stderr] 66 | map.insert(vec!['h' as u8, 'e' as u8, 'l' as u8, 'l' as u8, 'o' as u8], Value::BString(vec!['w' as u8, 'o' as u8, 'r' as u8, 'l' as u8, 'd' as u8])); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'e' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/parse/test.rs:66:43 [INFO] [stderr] | [INFO] [stderr] 66 | map.insert(vec!['h' as u8, 'e' as u8, 'l' as u8, 'l' as u8, 'o' as u8], Value::BString(vec!['w' as u8, 'o' as u8, 'r' as u8, 'l' as u8, 'd' as u8])); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'l' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/parse/test.rs:66:54 [INFO] [stderr] | [INFO] [stderr] 66 | map.insert(vec!['h' as u8, 'e' as u8, 'l' as u8, 'l' as u8, 'o' as u8], Value::BString(vec!['w' as u8, 'o' as u8, 'r' as u8, 'l' as u8, 'd' as u8])); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'l' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/parse/test.rs:66:65 [INFO] [stderr] | [INFO] [stderr] 66 | map.insert(vec!['h' as u8, 'e' as u8, 'l' as u8, 'l' as u8, 'o' as u8], Value::BString(vec!['w' as u8, 'o' as u8, 'r' as u8, 'l' as u8, 'd' as u8])); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'o' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/parse/test.rs:66:97 [INFO] [stderr] | [INFO] [stderr] 66 | map.insert(vec!['h' as u8, 'e' as u8, 'l' as u8, 'l' as u8, 'o' as u8], Value::BString(vec!['w' as u8, 'o' as u8, 'r' as u8, 'l' as u8, 'd' as u8])); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'w' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/parse/test.rs:66:108 [INFO] [stderr] | [INFO] [stderr] 66 | map.insert(vec!['h' as u8, 'e' as u8, 'l' as u8, 'l' as u8, 'o' as u8], Value::BString(vec!['w' as u8, 'o' as u8, 'r' as u8, 'l' as u8, 'd' as u8])); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'o' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/parse/test.rs:66:119 [INFO] [stderr] | [INFO] [stderr] 66 | map.insert(vec!['h' as u8, 'e' as u8, 'l' as u8, 'l' as u8, 'o' as u8], Value::BString(vec!['w' as u8, 'o' as u8, 'r' as u8, 'l' as u8, 'd' as u8])); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'r' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/parse/test.rs:66:130 [INFO] [stderr] | [INFO] [stderr] 66 | map.insert(vec!['h' as u8, 'e' as u8, 'l' as u8, 'l' as u8, 'o' as u8], Value::BString(vec!['w' as u8, 'o' as u8, 'r' as u8, 'l' as u8, 'd' as u8])); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'l' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/parse/test.rs:66:141 [INFO] [stderr] | [INFO] [stderr] 66 | map.insert(vec!['h' as u8, 'e' as u8, 'l' as u8, 'l' as u8, 'o' as u8], Value::BString(vec!['w' as u8, 'o' as u8, 'r' as u8, 'l' as u8, 'd' as u8])); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'd' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/parse/test.rs:67:21 [INFO] [stderr] | [INFO] [stderr] 67 | map.insert(vec!['s' as u8, 'p' as u8, 'a' as u8, 'm' as u8], Value::Integer(123)); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b's' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/parse/test.rs:67:32 [INFO] [stderr] | [INFO] [stderr] 67 | map.insert(vec!['s' as u8, 'p' as u8, 'a' as u8, 'm' as u8], Value::Integer(123)); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'p' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/parse/test.rs:67:43 [INFO] [stderr] | [INFO] [stderr] 67 | map.insert(vec!['s' as u8, 'p' as u8, 'a' as u8, 'm' as u8], Value::Integer(123)); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'a' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/parse/test.rs:67:54 [INFO] [stderr] | [INFO] [stderr] 67 | map.insert(vec!['s' as u8, 'p' as u8, 'a' as u8, 'm' as u8], Value::Integer(123)); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'm' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/boostencode/parse/mod.rs:117:11 [INFO] [stderr] | [INFO] [stderr] 117 | while bytes.len() > 0 && bytes[0] as char >= '0' && bytes[0] as char <= '9' { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!bytes.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: length comparison to zero [INFO] [stderr] --> src/boostencode/mod.rs:48:12 [INFO] [stderr] | [INFO] [stderr] 48 | if bytes.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!bytes.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 character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/mod.rs:59:26 [INFO] [stderr] | [INFO] [stderr] 59 | res.push(':' as u8); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b':' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/mod.rs:67:36 [INFO] [stderr] | [INFO] [stderr] 67 | let mut res = vec!['l' as u8]; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'l' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the Vec [INFO] [stderr] --> src/boostencode/mod.rs:68:22 [INFO] [stderr] | [INFO] [stderr] 68 | vals.into_iter().for_each(|v| res.append(&mut v.encode())); [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: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/mod.rs:69:26 [INFO] [stderr] | [INFO] [stderr] 69 | res.push('e' as u8); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'e' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/mod.rs:74:36 [INFO] [stderr] | [INFO] [stderr] 74 | let mut res = vec!['d' as u8]; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'd' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/boostencode/mod.rs:83:26 [INFO] [stderr] | [INFO] [stderr] 83 | res.push('e' as u8); [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'e' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/boostencode/mod.rs:131:76 [INFO] [stderr] | [INFO] [stderr] 131 | Value::BString(bytes) => write!(f, "{}", str::from_utf8(bytes).unwrap_or(format!("<{} bytes>", bytes.len()).as_ref())), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| format!("<{} bytes>", bytes.len()).as_ref())` [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: unused `std::result::Result` that must be used [INFO] [stderr] --> src/boostencode/mod.rs:137:25 [INFO] [stderr] | [INFO] [stderr] 137 | write!(f, ", "); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [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: unused `std::result::Result` that must be used [INFO] [stderr] --> src/boostencode/mod.rs:140:21 [INFO] [stderr] | [INFO] [stderr] 140 | write!(f, "{}", val); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [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: unused `std::result::Result` that must be used [INFO] [stderr] --> src/boostencode/mod.rs:147:17 [INFO] [stderr] | [INFO] [stderr] 147 | writeln!(f, "{{"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [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: unused `std::result::Result` that must be used [INFO] [stderr] --> src/boostencode/mod.rs:149:21 [INFO] [stderr] | [INFO] [stderr] 149 | writeln!(f, " {} => {}", str::from_utf8(k).unwrap_or("[...bytes...]"), v); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/metainfo/test.rs:21:51 [INFO] [stderr] | [INFO] [stderr] 21 | bytes("name") => Value::BString(Vec::from("test_file.mp3".as_bytes())), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"test_file.mp3"` [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/metainfo/mod.rs:71:30 [INFO] [stderr] | [INFO] [stderr] 71 | let map = val.dict().ok_or("Single file not a dictionary".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Single file not a dictionary".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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/metainfo/mod.rs:74:14 [INFO] [stderr] | [INFO] [stderr] 74 | .ok_or("Missing key: name".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Missing key: name".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/metainfo/mod.rs:73:33 [INFO] [stderr] | [INFO] [stderr] 73 | let file_name = map.get("name".as_bytes()).and_then(Value::bstring_utf8) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"name"` [INFO] [stderr] | [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/metainfo/mod.rs:77:35 [INFO] [stderr] | [INFO] [stderr] 77 | .map(|i| *i as usize).ok_or("Missing key: length".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Missing key: length".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/metainfo/mod.rs:76:30 [INFO] [stderr] | [INFO] [stderr] 76 | let length = map.get("length".as_bytes()).and_then(Value::integer) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"length"` [INFO] [stderr] | [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/metainfo/mod.rs:79:30 [INFO] [stderr] | [INFO] [stderr] 79 | let md5sum = map.get("md5".as_bytes()).and_then(Value::bstring_utf8); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"md5"` [INFO] [stderr] | [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/metainfo/mod.rs:101:30 [INFO] [stderr] | [INFO] [stderr] 101 | let map = val.dict().ok_or("File info not a dictionary".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "File info not a dictionary".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/metainfo/mod.rs:102:24 [INFO] [stderr] | [INFO] [stderr] 102 | match (map.get("length".as_bytes()), map.get("files".as_bytes())) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"length"` [INFO] [stderr] | [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/metainfo/mod.rs:102:54 [INFO] [stderr] | [INFO] [stderr] 102 | match (map.get("length".as_bytes()), map.get("files".as_bytes())) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"files"` [INFO] [stderr] | [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: redundant closure found [INFO] [stderr] --> src/metainfo/mod.rs:103:64 [INFO] [stderr] | [INFO] [stderr] 103 | (Some(_), None) => SingleFile::from_value(val).map(|f| FileInfo::Single(f)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `FileInfo::Single` [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: redundant closure found [INFO] [stderr] --> src/metainfo/mod.rs:104:63 [INFO] [stderr] | [INFO] [stderr] 104 | (None, Some(_)) => MultiFile::from_value(val).map(|f| FileInfo::Multi(f)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `FileInfo::Multi` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/metainfo/mod.rs:124:30 [INFO] [stderr] | [INFO] [stderr] 124 | let map = val.dict().ok_or("Info not a dictionary".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Info not a dictionary".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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/metainfo/mod.rs:128:14 [INFO] [stderr] | [INFO] [stderr] 128 | .ok_or("Missing key: piece length".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Missing key: piece length".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/metainfo/mod.rs:126:36 [INFO] [stderr] | [INFO] [stderr] 126 | let piece_length = map.get("piece length".as_bytes()).and_then(Value::integer) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"piece length"` [INFO] [stderr] | [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/metainfo/mod.rs:136:37 [INFO] [stderr] | [INFO] [stderr] 136 | }).collect::>()).ok_or("Missking key: pieces".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Missking key: pieces".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/metainfo/mod.rs:130:30 [INFO] [stderr] | [INFO] [stderr] 130 | let pieces = map.get("pieces".as_bytes()).and_then(Value::bstring) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"pieces"` [INFO] [stderr] | [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/metainfo/mod.rs:138:31 [INFO] [stderr] | [INFO] [stderr] 138 | let private = map.get("private".as_bytes()).and_then(Value::integer) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"private"` [INFO] [stderr] | [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/metainfo/mod.rs:156:30 [INFO] [stderr] | [INFO] [stderr] 156 | let map = val.dict().ok_or("Not a dictionary".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Not a dictionary".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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/metainfo/mod.rs:158:51 [INFO] [stderr] | [INFO] [stderr] 158 | let info_val = map.get("info".as_bytes()).ok_or("Missing key: info".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Missing key: info".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/metainfo/mod.rs:158:32 [INFO] [stderr] | [INFO] [stderr] 158 | let info_val = map.get("info".as_bytes()).ok_or("Missing key: info".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"info"` [INFO] [stderr] | [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/metainfo/mod.rs:162:85 [INFO] [stderr] | [INFO] [stderr] 162 | let announce = map.get("announce".as_bytes()).and_then(Value::bstring_utf8).ok_or("Missing key: announce".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Missing key: announce".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/metainfo/mod.rs:162:32 [INFO] [stderr] | [INFO] [stderr] 162 | let announce = map.get("announce".as_bytes()).and_then(Value::bstring_utf8).ok_or("Missing key: announce".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"announce"` [INFO] [stderr] | [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/metainfo/mod.rs:164:37 [INFO] [stderr] | [INFO] [stderr] 164 | let announce_list = map.get("announce-list".as_bytes()).and_then(Value::list) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"announce-list"` [INFO] [stderr] | [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/metainfo/mod.rs:167:37 [INFO] [stderr] | [INFO] [stderr] 167 | let creation_date = map.get("creation date".as_bytes()).and_then(Value::integer) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"creation date"` [INFO] [stderr] | [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/metainfo/mod.rs:170:31 [INFO] [stderr] | [INFO] [stderr] 170 | let comment = map.get("comment".as_bytes()).and_then(Value::bstring_utf8); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"comment"` [INFO] [stderr] | [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/metainfo/mod.rs:172:34 [INFO] [stderr] | [INFO] [stderr] 172 | let created_by = map.get("created by".as_bytes()).and_then(Value::bstring_utf8); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"created by"` [INFO] [stderr] | [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/metainfo/mod.rs:174:32 [INFO] [stderr] | [INFO] [stderr] 174 | let encoding = map.get("encoding".as_bytes()).and_then(Value::bstring_utf8); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"encoding"` [INFO] [stderr] | [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/metainfo/mod.rs:190:39 [INFO] [stderr] | [INFO] [stderr] 190 | fn interpret_announce_list(tiers: &Vec) -> Option> { [INFO] [stderr] | ^^^^^^^^^^^ help: change this to: `&[Value]` [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/tracker/mod.rs:117:30 [INFO] [stderr] | [INFO] [stderr] 117 | let map = val.dict().ok_or("Not a dictionary".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Not a dictionary".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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/tracker/mod.rs:122:14 [INFO] [stderr] | [INFO] [stderr] 122 | .ok_or("Missing key: peer id".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Missing key: peer id".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/tracker/mod.rs:120:17 [INFO] [stderr] | [INFO] [stderr] 120 | map.get("peer id".as_bytes()).and_then(Value::bstring) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"peer id"` [INFO] [stderr] | [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/tracker/mod.rs:127:14 [INFO] [stderr] | [INFO] [stderr] 127 | .ok_or("Missing key: ip".to_string())? [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Missing key: ip".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/tracker/mod.rs:125:26 [INFO] [stderr] | [INFO] [stderr] 125 | let ip = map.get("ip".as_bytes()).and_then(Value::bstring_utf8) [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"ip"` [INFO] [stderr] | [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/tracker/mod.rs:132:14 [INFO] [stderr] | [INFO] [stderr] 132 | .ok_or("Missing key: port".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Missing key: port".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/tracker/mod.rs:130:28 [INFO] [stderr] | [INFO] [stderr] 130 | let port = map.get("port".as_bytes()).and_then(Value::integer) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"port"` [INFO] [stderr] | [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/tracker/mod.rs:145:30 [INFO] [stderr] | [INFO] [stderr] 145 | let map = val.dict().ok_or("Not a dictionary".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Not a dictionary".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/tracker/mod.rs:147:36 [INFO] [stderr] | [INFO] [stderr] 147 | if let Some(msg) = map.get("failure reason".as_bytes()) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"failure reason"` [INFO] [stderr] | [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: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/tracker/mod.rs:148:43 [INFO] [stderr] | [INFO] [stderr] 148 | return Err(msg.bstring_utf8().unwrap_or("unknown failure reason".to_string())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| "unknown failure reason".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/tracker/mod.rs:151:35 [INFO] [stderr] | [INFO] [stderr] 151 | let warning_msg = map.get("warning message".as_bytes()).and_then(Value::bstring_utf8); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"warning message"` [INFO] [stderr] | [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/tracker/mod.rs:156:14 [INFO] [stderr] | [INFO] [stderr] 156 | .ok_or("Missing key: interval".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Missing key: interval".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/tracker/mod.rs:154:32 [INFO] [stderr] | [INFO] [stderr] 154 | let interval = map.get("interval".as_bytes()).and_then(Value::integer) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"interval"` [INFO] [stderr] | [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/tracker/mod.rs:158:36 [INFO] [stderr] | [INFO] [stderr] 158 | let min_interval = map.get("min interval".as_bytes()).and_then(Value::integer) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"min interval"` [INFO] [stderr] | [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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/tracker/mod.rs:161:34 [INFO] [stderr] | [INFO] [stderr] 161 | let tracker_id = map.get("tracker id".as_bytes()).and_then(Value::bstring_utf8); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"tracker id"` [INFO] [stderr] | [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/tracker/mod.rs:165:14 [INFO] [stderr] | [INFO] [stderr] 165 | .ok_or("Missing key: complete".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Missing key: complete".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/tracker/mod.rs:163:32 [INFO] [stderr] | [INFO] [stderr] 163 | let complete = map.get("complete".as_bytes()).and_then(Value::integer) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"complete"` [INFO] [stderr] | [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/tracker/mod.rs:169:14 [INFO] [stderr] | [INFO] [stderr] 169 | .ok_or("Missing key: incomplete".to_string())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Missing key: incomplete".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/tracker/mod.rs:167:34 [INFO] [stderr] | [INFO] [stderr] 167 | let incomplete = map.get("incomplete".as_bytes()).and_then(Value::integer) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"incomplete"` [INFO] [stderr] | [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/tracker/mod.rs:171:55 [INFO] [stderr] | [INFO] [stderr] 171 | let peers = match map.get("peers".as_bytes()).ok_or("Missing key: peers".to_string())? { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| "Missing key: peers".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/tracker/mod.rs:171:35 [INFO] [stderr] | [INFO] [stderr] 171 | let peers = match map.get("peers".as_bytes()).ok_or("Missing key: peers".to_string())? { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"peers"` [INFO] [stderr] | [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: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/tracker/mod.rs:180:33 [INFO] [stderr] | [INFO] [stderr] 180 | let port = (peer_slice[0] as u16 * 256) + peer_slice[1] as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(peer_slice[0])` [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: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/tracker/mod.rs:180:63 [INFO] [stderr] | [INFO] [stderr] 180 | let port = (peer_slice[0] as u16 * 256) + peer_slice[1] as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `u16::from(peer_slice[1])` [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 seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/tracker/mod.rs:268:9 [INFO] [stderr] | [INFO] [stderr] 268 | / match event { [INFO] [stderr] 269 | | Some(e) => { [INFO] [stderr] 270 | | req_uri.push_str("event"); [INFO] [stderr] 271 | | req_uri.push('='); [INFO] [stderr] ... | [INFO] [stderr] 275 | | None => () [INFO] [stderr] 276 | | } [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] 268 | if let Some(e) = event { [INFO] [stderr] 269 | req_uri.push_str("event"); [INFO] [stderr] 270 | req_uri.push('='); [INFO] [stderr] 271 | req_uri.push_str(&e.to_string()); [INFO] [stderr] 272 | req_uri.push('&') [INFO] [stderr] 273 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/tracker/mod.rs:294:37 [INFO] [stderr] | [INFO] [stderr] 294 | client.get(uri).map_err(|e| TrackerError::ConnectionError(e)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `TrackerError::ConnectionError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/tracker/mod.rs:305:26 [INFO] [stderr] | [INFO] [stderr] 305 | .map_err(|e| TrackerError::ConnectionError(e)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `TrackerError::ConnectionError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/tracker/mod.rs:307:48 [INFO] [stderr] | [INFO] [stderr] 307 | Value::decode(&resp_bytes).map_err(|e| TrackerError::DecodeError(e)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `TrackerError::DecodeError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/server/mod.rs:60:13 [INFO] [stderr] | [INFO] [stderr] 60 | peer_id.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try removing the `clone` call: `peer_id` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/server/mod.rs:62:13 [INFO] [stderr] | [INFO] [stderr] 62 | meta.info_hash.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `meta.info_hash` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/server/mod.rs:129:42 [INFO] [stderr] | [INFO] [stderr] 129 | self.info_hash.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.info_hash` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/server/mod.rs:130:42 [INFO] [stderr] | [INFO] [stderr] 130 | self.peer_id.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.peer_id` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/server/mod.rs:143:9 [INFO] [stderr] | [INFO] [stderr] 143 | / loop { [INFO] [stderr] 144 | | match self.uploaded_stream.poll() { [INFO] [stderr] 145 | | Ok(Async::Ready(Some(update))) => self.uploaded += update as u64, [INFO] [stderr] 146 | | _ => break, [INFO] [stderr] 147 | | } [INFO] [stderr] 148 | | } [INFO] [stderr] | |_________^ help: try: `while let Ok(Async::Ready(Some(update))) = self.uploaded_stream.poll() { .. }` [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: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/server/mod.rs:145:68 [INFO] [stderr] | [INFO] [stderr] 145 | Ok(Async::Ready(Some(update))) => self.uploaded += update as u64, [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `u64::from(update)` [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: this loop could be written as a `while let` loop [INFO] [stderr] --> src/server/mod.rs:149:9 [INFO] [stderr] | [INFO] [stderr] 149 | / loop { [INFO] [stderr] 150 | | match self.downloaded_stream.poll() { [INFO] [stderr] 151 | | Ok(Async::Ready(Some(update))) => self.downloaded += update as u64, [INFO] [stderr] 152 | | _ => break, [INFO] [stderr] 153 | | } [INFO] [stderr] 154 | | } [INFO] [stderr] | |_________^ help: try: `while let Ok(Async::Ready(Some(update))) = self.downloaded_stream.poll() { .. }` [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 u64 may become silently lossy if types change [INFO] [stderr] --> src/server/mod.rs:151:70 [INFO] [stderr] | [INFO] [stderr] 151 | Ok(Async::Ready(Some(update))) => self.downloaded += update as u64, [INFO] [stderr] | ^^^^^^^^^^^^^ help: try: `u64::from(update)` [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: this loop could be written as a `while let` loop [INFO] [stderr] --> src/server/mod.rs:157:9 [INFO] [stderr] | [INFO] [stderr] 157 | / loop { [INFO] [stderr] 158 | | match self.piece_stream.poll() { [INFO] [stderr] 159 | | Ok(Async::Ready(Some((finished_piece, new_piece_sender, availible_pieces)))) => { [INFO] [stderr] 160 | | // TODO verify and write off the finished piece and either kill the peer or give [INFO] [stderr] ... | [INFO] [stderr] 164 | | } [INFO] [stderr] 165 | | } [INFO] [stderr] | |_________^ help: try: `while let Ok(Async::Ready(Some((finished_piece, new_piece_sender, availible_pieces)))) = self.piece_stream.poll() { .. }` [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: redundant closure found [INFO] [stderr] --> src/peer/message.rs:136:22 [INFO] [stderr] | [INFO] [stderr] 136 | .map(|m| Some(m)) [INFO] [stderr] | ^^^^^^^^^^^ help: remove closure as shown: `Some` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/peer/message.rs:135:21 [INFO] [stderr] | [INFO] [stderr] 135 | message.ok_or(io::Error::new(io::ErrorKind::Other, "Invalid message id")) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| io::Error::new(io::ErrorKind::Other, "Invalid message id"))` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/peer/mod.rs:46:69 [INFO] [stderr] | [INFO] [stderr] 46 | let _res = conn.start_send(message::Message::Handshake((info_hash.clone(), peer_id.clone()).into())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `info_hash` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/peer/mod.rs:46:88 [INFO] [stderr] | [INFO] [stderr] 46 | let _res = conn.start_send(message::Message::Handshake((info_hash.clone(), peer_id.clone()).into())); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: try removing the `clone` call: `peer_id` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [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/peer/mod.rs:72:21 [INFO] [stderr] | [INFO] [stderr] 72 | / match message { [INFO] [stderr] 73 | | message::Message::Handshake(item) => { [INFO] [stderr] 74 | | if self.info_hash != item.info_hash { [INFO] [stderr] 75 | | error!("The info hash sent by a peer does not match ours"); [INFO] [stderr] ... | [INFO] [stderr] 86 | | _ => {} [INFO] [stderr] 87 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [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] 72 | if let message::Message::Handshake(item) = message { [INFO] [stderr] 73 | if self.info_hash != item.info_hash { [INFO] [stderr] 74 | error!("The info hash sent by a peer does not match ours"); [INFO] [stderr] 75 | return Err(()) [INFO] [stderr] 76 | } [INFO] [stderr] 77 | if !self.initiates { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/peer/mod.rs:81:42 [INFO] [stderr] | [INFO] [stderr] 81 | (self.info_hash.clone(), self.peer_id.clone()).into() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.info_hash` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/peer/mod.rs:81:66 [INFO] [stderr] | [INFO] [stderr] 81 | (self.info_hash.clone(), self.peer_id.clone()).into() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.peer_id` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 21.87s [INFO] running `"docker" "inspect" "55826b2b1c0837f902c48de83d139e2fc95207d7c734b83da0171fe741f754c9"` [INFO] running `"docker" "rm" "-f" "55826b2b1c0837f902c48de83d139e2fc95207d7c734b83da0171fe741f754c9"` [INFO] [stdout] 55826b2b1c0837f902c48de83d139e2fc95207d7c734b83da0171fe741f754c9