[INFO] cloning repository lolney/rust-bittorrent-client [INFO] running `"git" "clone" "--bare" "git://github.com/lolney/rust-bittorrent-client.git" "work/cache/sources/gh/lolney/rust-bittorrent-client"` [INFO] [stderr] Cloning into bare repository 'work/cache/sources/gh/lolney/rust-bittorrent-client'... [INFO] running `"git" "clone" "work/cache/sources/gh/lolney/rust-bittorrent-client" "work/ex/pr-61874/sources/master#9f06855064ed06a50c496577b21ca50f92a2e67d/gh/lolney/rust-bittorrent-client"` [INFO] [stderr] Cloning into 'work/ex/pr-61874/sources/master#9f06855064ed06a50c496577b21ca50f92a2e67d/gh/lolney/rust-bittorrent-client'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/lolney/rust-bittorrent-client" "work/ex/pr-61874/sources/try#d3301713b54af69ca9de941a8c6b0d8287dbd6df/gh/lolney/rust-bittorrent-client"` [INFO] [stderr] Cloning into 'work/ex/pr-61874/sources/try#d3301713b54af69ca9de941a8c6b0d8287dbd6df/gh/lolney/rust-bittorrent-client'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 9ce6960e58321e13d8f2041ec6a8c748102c3359 [INFO] sha for GitHub repo lolney/rust-bittorrent-client: 9ce6960e58321e13d8f2041ec6a8c748102c3359 [INFO] validating manifest of lolney/rust-bittorrent-client on toolchain master#9f06855064ed06a50c496577b21ca50f92a2e67d [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+9f06855064ed06a50c496577b21ca50f92a2e67d-alt" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of lolney/rust-bittorrent-client on toolchain try#d3301713b54af69ca9de941a8c6b0d8287dbd6df [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+d3301713b54af69ca9de941a8c6b0d8287dbd6df-alt" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing lolney/rust-bittorrent-client [INFO] finished frobbing lolney/rust-bittorrent-client [INFO] frobbed toml for lolney/rust-bittorrent-client written to work/ex/pr-61874/sources/master#9f06855064ed06a50c496577b21ca50f92a2e67d/gh/lolney/rust-bittorrent-client/Cargo.toml [INFO] started frobbing lolney/rust-bittorrent-client [INFO] finished frobbing lolney/rust-bittorrent-client [INFO] frobbed toml for lolney/rust-bittorrent-client written to work/ex/pr-61874/sources/try#d3301713b54af69ca9de941a8c6b0d8287dbd6df/gh/lolney/rust-bittorrent-client/Cargo.toml [INFO] crate lolney/rust-bittorrent-client already has a lockfile, it will not be regenerated [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+9f06855064ed06a50c496577b21ca50f92a2e67d-alt" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded cursive_table_view v0.4.2 [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+d3301713b54af69ca9de941a8c6b0d8287dbd6df-alt" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] checking lolney/rust-bittorrent-client against try#d3301713b54af69ca9de941a8c6b0d8287dbd6df for pr-61874 [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/pr-61874/worker-2/try#d3301713b54af69ca9de941a8c6b0d8287dbd6df:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/pr-61874/sources/try#d3301713b54af69ca9de941a8c6b0d8287dbd6df/gh/lolney/rust-bittorrent-client:/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" "+d3301713b54af69ca9de941a8c6b0d8287dbd6df-alt" "check" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 148361f4be10fab380ad2ea91811113d0121b18e4c0a6e408a4cdf3c4e41505d [INFO] running `"docker" "start" "-a" "148361f4be10fab380ad2ea91811113d0121b18e4c0a6e408a4cdf3c4e41505d"` [INFO] [stderr] Checking indexmap v0.4.1 [INFO] [stderr] Compiling rocket_codegen v0.4.0-rc.2 [INFO] [stderr] Compiling rocket v0.4.0-rc.2 [INFO] [stderr] Compiling ncurses v5.97.0 [INFO] [stderr] Checking crossbeam-epoch v0.6.1 [INFO] [stderr] Checking tokio-timer v0.2.8 [INFO] [stderr] Checking rand v0.4.3 [INFO] [stderr] Checking atty v0.2.11 [INFO] [stderr] Compiling ring v0.13.5 [INFO] [stderr] Checking mio v0.6.16 [INFO] [stderr] Checking futures-cpupool v0.1.8 [INFO] [stderr] Compiling hyper v0.10.15 [INFO] [stderr] Checking parking_lot_core v0.3.1 [INFO] [stderr] Checking tokio-io v0.1.10 [INFO] [stderr] Checking http v0.1.14 [INFO] [stderr] Checking crossbeam-deque v0.6.2 [INFO] [stderr] Checking priority-queue v0.5.2 [INFO] [stderr] Checking regex v1.1.0 [INFO] [stderr] Checking parking_lot v0.6.4 [INFO] [stderr] Checking num-bigint v0.1.44 [INFO] [stderr] Checking tokio-codec v0.1.1 [INFO] [stderr] Checking mio-uds v0.6.7 [INFO] [stderr] Checking mio-extras v2.0.5 [INFO] [stderr] Checking tokio-threadpool v0.1.9 [INFO] [stderr] Checking cookie v0.11.0 [INFO] [stderr] Checking tokio-reactor v0.1.7 [INFO] [stderr] Checking num-rational v0.1.42 [INFO] [stderr] Checking tokio-fs v0.1.4 [INFO] [stderr] Checking env_logger v0.6.0 [INFO] [stderr] Checking rocket_http v0.4.0-rc.2 [INFO] [stderr] Checking num v0.1.42 [INFO] [stderr] Checking tokio-tcp v0.1.2 [INFO] [stderr] Checking inotify v0.6.1 [INFO] [stderr] Checking tokio-udp v0.1.3 [INFO] [stderr] Checking tokio-uds v0.2.4 [INFO] [stderr] Checking cursive v0.7.5 [INFO] [stderr] Checking tokio v0.1.13 [INFO] [stderr] Checking notify v4.0.6 [INFO] [stderr] Checking h2 v0.1.14 [INFO] [stderr] Checking cursive_table_view v0.4.2 [INFO] [stderr] Checking hyper v0.12.17 [INFO] [stderr] Checking rocket_cors v0.4.0-rc.2 [INFO] [stderr] Checking rocket_contrib v0.4.0-rc.2 [INFO] [stderr] Checking rust-bittorrent-client v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stderr] --> src/bittorrent/mod.rs:181:32 [INFO] [stderr] | [INFO] [stderr] 181 | fn cause(&self) -> Option<&Error> { [INFO] [stderr] | ^^^^^ help: use `dyn`: `dyn Error` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(bare_trait_objects)] on by default [INFO] [stderr] [INFO] [stderr] warning: `...` range patterns are deprecated [INFO] [stderr] --> src/bittorrent/bedecoder.rs:21:12 [INFO] [stderr] | [INFO] [stderr] 21 | '0'...'9' => parse_str(inbytes, i), [INFO] [stderr] | ^^^ help: use `..=` for an inclusive range [INFO] [stderr] | [INFO] [stderr] = note: #[warn(ellipsis_inclusive_range_patterns)] on by default [INFO] [stderr] [INFO] [stderr] warning: `...` range patterns are deprecated [INFO] [stderr] --> src/bittorrent/bedecoder.rs:47:16 [INFO] [stderr] | [INFO] [stderr] 47 | '0'...'9' => true, [INFO] [stderr] | ^^^ help: use `..=` for an inclusive range [INFO] [stderr] [INFO] [stderr] warning: `...` range patterns are deprecated [INFO] [stderr] --> src/bittorrent/bedecoder.rs:113:12 [INFO] [stderr] | [INFO] [stderr] 113 | '0'...'9' => true, [INFO] [stderr] | ^^^ help: use `..=` for an inclusive range [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Piece`, `torrent` [INFO] [stderr] --> src/bittorrent/manager.rs:6:83 [INFO] [stderr] | [INFO] [stderr] 6 | metainfo::MetaInfo, peer::Action, peer::Peer, peer::PeerInfo, timers::Timers, torrent, [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] 7 | torrent_runtime::TorrentRuntime, tracker::Tracker, Hash, ParseError, Piece, [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stderr] --> src/bittorrent/manager.rs:51:32 [INFO] [stderr] | [INFO] [stderr] 51 | fn cause(&self) -> Option<&Error> { [INFO] [stderr] | ^^^^^ help: use `dyn`: `dyn Error` [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Deserialize`, `Serialize` [INFO] [stderr] --> src/bittorrent/metainfo.rs:5:13 [INFO] [stderr] | [INFO] [stderr] 5 | use serde::{Deserialize, Serialize}; [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused macro definition [INFO] [stderr] --> src/bittorrent/peer.rs:62:1 [INFO] [stderr] | [INFO] [stderr] 62 | / macro_rules! byte_slice_from_u32s { [INFO] [stderr] 63 | | ($($int:expr),*) => { [INFO] [stderr] 64 | | { [INFO] [stderr] 65 | | let mut vec = Vec::::new(); [INFO] [stderr] ... | [INFO] [stderr] 72 | | }; [INFO] [stderr] 73 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_macros)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused macro definition [INFO] [stderr] --> src/bittorrent/peer.rs:75:1 [INFO] [stderr] | [INFO] [stderr] 75 | / macro_rules! message_calc_length { [INFO] [stderr] 76 | | ($id:expr$(, $other:expr)*) => { [INFO] [stderr] 77 | | { [INFO] [stderr] 78 | | let mut len : u32 = 1; [INFO] [stderr] ... | [INFO] [stderr] 87 | | }; [INFO] [stderr] 88 | | } [INFO] [stderr] | |_^ [INFO] [stderr] [INFO] [stderr] warning: unused macro definition [INFO] [stderr] --> src/bittorrent/torrent.rs:421:1 [INFO] [stderr] | [INFO] [stderr] 421 | / macro_rules! piece { [INFO] [stderr] 422 | | ($i:expr, $n:expr) => { [INFO] [stderr] 423 | | Piece { [INFO] [stderr] 424 | | index: 0, [INFO] [stderr] ... | [INFO] [stderr] 428 | | }; [INFO] [stderr] 429 | | } [INFO] [stderr] | |_^ [INFO] [stderr] [INFO] [stderr] warning: unused macro definition [INFO] [stderr] --> src/bittorrent/torrent.rs:431:1 [INFO] [stderr] | [INFO] [stderr] 431 | / macro_rules! fpiece { [INFO] [stderr] 432 | | ($b:expr, $n:expr) => { [INFO] [stderr] 433 | | FilePiece { [INFO] [stderr] 434 | | path: Default::default(), [INFO] [stderr] ... | [INFO] [stderr] 438 | | }; [INFO] [stderr] 439 | | } [INFO] [stderr] | |_^ [INFO] [stderr] [INFO] [stderr] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stderr] --> src/bittorrent/mod.rs:181:32 [INFO] [stderr] | [INFO] [stderr] 181 | fn cause(&self) -> Option<&Error> { [INFO] [stderr] | ^^^^^ help: use `dyn`: `dyn Error` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(bare_trait_objects)] on by default [INFO] [stderr] [INFO] [stderr] warning: `...` range patterns are deprecated [INFO] [stderr] --> src/bittorrent/bedecoder.rs:21:12 [INFO] [stderr] | [INFO] [stderr] 21 | '0'...'9' => parse_str(inbytes, i), [INFO] [stderr] | ^^^ help: use `..=` for an inclusive range [INFO] [stderr] | [INFO] [stderr] = note: #[warn(ellipsis_inclusive_range_patterns)] on by default [INFO] [stderr] [INFO] [stderr] warning: `...` range patterns are deprecated [INFO] [stderr] --> src/bittorrent/bedecoder.rs:47:16 [INFO] [stderr] | [INFO] [stderr] 47 | '0'...'9' => true, [INFO] [stderr] | ^^^ help: use `..=` for an inclusive range [INFO] [stderr] [INFO] [stderr] warning: `...` range patterns are deprecated [INFO] [stderr] --> src/bittorrent/bedecoder.rs:113:12 [INFO] [stderr] | [INFO] [stderr] 113 | '0'...'9' => true, [INFO] [stderr] | ^^^ help: use `..=` for an inclusive range [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Piece`, `torrent` [INFO] [stderr] --> src/bittorrent/manager.rs:6:83 [INFO] [stderr] | [INFO] [stderr] 6 | metainfo::MetaInfo, peer::Action, peer::Peer, peer::PeerInfo, timers::Timers, torrent, [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] 7 | torrent_runtime::TorrentRuntime, tracker::Tracker, Hash, ParseError, Piece, [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stderr] --> src/bittorrent/manager.rs:51:32 [INFO] [stderr] | [INFO] [stderr] 51 | fn cause(&self) -> Option<&Error> { [INFO] [stderr] | ^^^^^ help: use `dyn`: `dyn Error` [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Deserialize`, `Serialize` [INFO] [stderr] --> src/bittorrent/metainfo.rs:5:13 [INFO] [stderr] | [INFO] [stderr] 5 | use serde::{Deserialize, Serialize}; [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::str` [INFO] [stderr] --> src/bittorrent/metainfo.rs:525:9 [INFO] [stderr] | [INFO] [stderr] 525 | use std::str; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `bittorrent::utils::gen_random_bytes` [INFO] [stderr] --> src/bittorrent/torrent_runtime.rs:357:9 [INFO] [stderr] | [INFO] [stderr] 357 | use bittorrent::utils::gen_random_bytes; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Piece`, `metainfo::BTFile` [INFO] [stderr] --> src/bittorrent/torrent_runtime.rs:358:22 [INFO] [stderr] | [INFO] [stderr] 358 | use bittorrent::{metainfo::BTFile, Piece}; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::path::PathBuf` [INFO] [stderr] --> src/bittorrent/torrent_runtime.rs:359:9 [INFO] [stderr] | [INFO] [stderr] 359 | use std::path::PathBuf; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `ok` [INFO] [stderr] --> src/bittorrent/tracker.rs:363:27 [INFO] [stderr] | [INFO] [stderr] 363 | use futures::future::{ok, Future}; [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::time::Duration` [INFO] [stderr] --> src/bittorrent/tracker.rs:365:9 [INFO] [stderr] | [INFO] [stderr] 365 | use std::time::Duration; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `tokio::run` [INFO] [stderr] --> src/bittorrent/tracker.rs:366:9 [INFO] [stderr] | [INFO] [stderr] 366 | use tokio::run; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Request` [INFO] [stderr] --> src/bittorrent/tracker.rs:368:16 [INFO] [stderr] | [INFO] [stderr] 368 | use http::{Request, Response}; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `hyper::server::conn::Http` [INFO] [stderr] --> src/bittorrent/tracker.rs:370:9 [INFO] [stderr] | [INFO] [stderr] 370 | use hyper::server::conn::Http; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stderr] --> src/bittorrent/tracker.rs:419:23 [INFO] [stderr] | [INFO] [stderr] 419 | let make: Box TrackerPeer> = if binary { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use `dyn`: `dyn Fn(usize) -> TrackerPeer` [INFO] [stderr] [INFO] [stderr] warning: unreachable statement [INFO] [stderr] --> src/bittorrent/manager.rs:1261:9 [INFO] [stderr] | [INFO] [stderr] 1261 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: unreachable statement [INFO] [stderr] --> src/bittorrent/manager.rs:1261:9 [INFO] [stderr] | [INFO] [stderr] 1261 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: unreachable expression [INFO] [stderr] --> src/bittorrent/peer.rs:296:9 [INFO] [stderr] | [INFO] [stderr] 296 | Ok(Action::None) [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unreachable expression [INFO] [stderr] --> src/bittorrent/peer.rs:296:9 [INFO] [stderr] | [INFO] [stderr] 296 | Ok(Action::None) [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/bittorrent/manager.rs:190:13 [INFO] [stderr] | [INFO] [stderr] 189 | Paused => 0, [INFO] [stderr] | ------ matches any value [INFO] [stderr] 190 | Running => 1, [INFO] [stderr] | ^^^^^^^ unreachable pattern [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_patterns)] on by default [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/bittorrent/manager.rs:191:13 [INFO] [stderr] | [INFO] [stderr] 189 | Paused => 0, [INFO] [stderr] | ------ matches any value [INFO] [stderr] 190 | Running => 1, [INFO] [stderr] 191 | Complete => 2, [INFO] [stderr] | ^^^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unused variable: `ioerror` [INFO] [stderr] --> src/bittorrent/mod.rs:175:45 [INFO] [stderr] | [INFO] [stderr] 175 | &ParseError::IO(ref string, ref ioerror) => string.as_str(), [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_ioerror` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `error` [INFO] [stderr] --> src/bittorrent/mod.rs:176:48 [INFO] [stderr] | [INFO] [stderr] 176 | &ParseError::Hyper(ref string, ref error) => string.as_str(), [INFO] [stderr] | ^^^^^ help: consider prefixing with an underscore: `_error` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `error` [INFO] [stderr] --> src/bittorrent/mod.rs:177:46 [INFO] [stderr] | [INFO] [stderr] 177 | &ParseError::Uri(ref string, ref error) => string.as_str(), [INFO] [stderr] | ^^^^^ help: consider prefixing with an underscore: `_error` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `string` [INFO] [stderr] --> src/bittorrent/mod.rs:183:36 [INFO] [stderr] | [INFO] [stderr] 183 | &ParseError::Parse(ref string) => None, [INFO] [stderr] | ^^^^^^ help: consider prefixing with an underscore: `_string` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `string` [INFO] [stderr] --> src/bittorrent/mod.rs:184:33 [INFO] [stderr] | [INFO] [stderr] 184 | &ParseError::IO(ref string, ref ioerror) => Some(ioerror), [INFO] [stderr] | ^^^^^^ help: consider prefixing with an underscore: `_string` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `string` [INFO] [stderr] --> src/bittorrent/mod.rs:185:36 [INFO] [stderr] | [INFO] [stderr] 185 | &ParseError::Hyper(ref string, ref error) => Some(error), [INFO] [stderr] | ^^^^^^ help: consider prefixing with an underscore: `_string` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `string` [INFO] [stderr] --> src/bittorrent/mod.rs:186:34 [INFO] [stderr] | [INFO] [stderr] 186 | &ParseError::Uri(ref string, ref error) => Some(error), [INFO] [stderr] | ^^^^^^ help: consider prefixing with an underscore: `_string` [INFO] [stderr] [INFO] [stderr] warning: value assigned to `key` is never read [INFO] [stderr] --> src/bittorrent/bedecoder.rs:94:17 [INFO] [stderr] | [INFO] [stderr] 94 | let mut key = Default::default(); [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_assignments)] on by default [INFO] [stderr] = help: maybe it is overwritten before being read? [INFO] [stderr] [INFO] [stderr] warning: unused variable: `e` [INFO] [stderr] --> src/bittorrent/bedecoder.rs:136:13 [INFO] [stderr] | [INFO] [stderr] 136 | Err(e) => BencodeT::ByteString(Vec::from(bytes)), [INFO] [stderr] | ^ help: consider prefixing with an underscore: `_e` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `Paused` [INFO] [stderr] --> src/bittorrent/manager.rs:189:13 [INFO] [stderr] | [INFO] [stderr] 189 | Paused => 0, [INFO] [stderr] | ^^^^^^ help: consider prefixing with an underscore: `_Paused` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `Running` [INFO] [stderr] --> src/bittorrent/manager.rs:190:13 [INFO] [stderr] | [INFO] [stderr] 190 | Running => 1, [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_Running` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `Complete` [INFO] [stderr] --> src/bittorrent/manager.rs:191:13 [INFO] [stderr] | [INFO] [stderr] 191 | Complete => 2, [INFO] [stderr] | ^^^^^^^^ help: consider prefixing with an underscore: `_Complete` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `torrent` [INFO] [stderr] --> src/bittorrent/manager.rs:408:13 [INFO] [stderr] | [INFO] [stderr] 408 | for torrent in torrents!(self).iter() { [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_torrent` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `e` [INFO] [stderr] --> src/bittorrent/manager.rs:650:32 [INFO] [stderr] | [INFO] [stderr] 650 | if let Err(e) = self.stream.write(&Peer::bitfield(&torrent.bitfield())) { [INFO] [stderr] | ^ help: consider prefixing with an underscore: `_e` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `n` [INFO] [stderr] --> src/bittorrent/manager.rs:874:16 [INFO] [stderr] | [INFO] [stderr] 874 | Ok(n) => { [INFO] [stderr] | ^ help: consider prefixing with an underscore: `_n` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `peer_id` [INFO] [stderr] --> src/bittorrent/manager.rs:877:44 [INFO] [stderr] | [INFO] [stderr] 877 | Handshake::Initiator { peer_id, info_hash } => { [INFO] [stderr] | ^^^^^^^ help: try ignoring the field: `peer_id: _` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `k` [INFO] [stderr] --> src/bittorrent/manager.rs:1190:28 [INFO] [stderr] | [INFO] [stderr] 1190 | .filter(|&(k, v)| !v.peer_choking && v.info_hash == *info_hash) [INFO] [stderr] | ^ help: consider prefixing with an underscore: `_k` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `v` [INFO] [stderr] --> src/bittorrent/manager.rs:1191:27 [INFO] [stderr] | [INFO] [stderr] 1191 | .map(|(k, v)| k.clone()) [INFO] [stderr] | ^ help: consider prefixing with an underscore: `_v` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `length` [INFO] [stderr] --> src/bittorrent/metainfo.rs:189:17 [INFO] [stderr] | [INFO] [stderr] 189 | length, [INFO] [stderr] | ^^^^^^ help: try ignoring the field: `length: _` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `md5sum` [INFO] [stderr] --> src/bittorrent/metainfo.rs:190:21 [INFO] [stderr] | [INFO] [stderr] 190 | ref md5sum, [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: try ignoring the field: `md5sum: _` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `files` [INFO] [stderr] --> src/bittorrent/metainfo.rs:194:21 [INFO] [stderr] | [INFO] [stderr] 194 | ref files, [INFO] [stderr] | ----^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: try ignoring the field: `files: _` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `md5sum` [INFO] [stderr] --> src/bittorrent/metainfo.rs:204:21 [INFO] [stderr] | [INFO] [stderr] 204 | ref md5sum, [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: try ignoring the field: `md5sum: _` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `name` [INFO] [stderr] --> src/bittorrent/metainfo.rs:202:21 [INFO] [stderr] | [INFO] [stderr] 202 | ref name, [INFO] [stderr] | ----^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: try ignoring the field: `name: _` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `name` [INFO] [stderr] --> src/bittorrent/metainfo.rs:207:21 [INFO] [stderr] | [INFO] [stderr] 207 | ref name, [INFO] [stderr] | ----^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: try ignoring the field: `name: _` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `files` [INFO] [stderr] --> src/bittorrent/metainfo.rs:226:21 [INFO] [stderr] | [INFO] [stderr] 226 | let files = hm.get("files").unwrap(); [INFO] [stderr] | ^^^^^ help: consider prefixing with an underscore: `_files` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `files` [INFO] [stderr] --> src/bittorrent/metainfo.rs:389:19 [INFO] [stderr] | [INFO] [stderr] 389 | pub fn create(files: Vec) -> Result<(), ParseError> { [INFO] [stderr] | ^^^^^ help: consider prefixing with an underscore: `_files` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `i` [INFO] [stderr] --> src/bittorrent/torrent_runtime.rs:57:22 [INFO] [stderr] | [INFO] [stderr] 57 | if let Some((i, priority)) = self.peek() { [INFO] [stderr] | ^ help: consider prefixing with an underscore: `_i` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `e` [INFO] [stderr] --> src/bittorrent/tracker.rs:140:17 [INFO] [stderr] | [INFO] [stderr] 140 | Err(e) => Err(parse_error!("IP string incorrectly formatted: {}", ip)), [INFO] [stderr] | ^ help: consider prefixing with an underscore: `_e` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `peer_id` [INFO] [stderr] --> src/bittorrent/tracker.rs:148:21 [INFO] [stderr] | [INFO] [stderr] 148 | ref peer_id, [INFO] [stderr] | ----^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: try ignoring the field: `peer_id: _` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `url` [INFO] [stderr] --> src/bittorrent/tracker.rs:302:16 [INFO] [stderr] | [INFO] [stderr] 302 | pub fn new(url: String) {} [INFO] [stderr] | ^^^ help: consider prefixing with an underscore: `_url` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/manager.rs:624:13 [INFO] [stderr] | [INFO] [stderr] 624 | let mut $torrent = torrents.get_mut(&hash).unwrap(); [INFO] [stderr] | ----^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] ... [INFO] [stderr] 719 | torrent_lock_return!(torrent_state, peer, torrent); [INFO] [stderr] | --------------------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/manager.rs:624:13 [INFO] [stderr] | [INFO] [stderr] 624 | let mut $torrent = torrents.get_mut(&hash).unwrap(); [INFO] [stderr] | ----^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] ... [INFO] [stderr] 744 | torrent_lock_return!(torrent_state, peer, torrent); [INFO] [stderr] | --------------------------------------------------- in this macro invocation [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/manager.rs:624:13 [INFO] [stderr] | [INFO] [stderr] 624 | let mut $torrent = torrents.get_mut(&hash).unwrap(); [INFO] [stderr] | ----^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] ... [INFO] [stderr] 779 | torrent_lock_return!(torrent_state, peer, torrent); [INFO] [stderr] | --------------------------------------------------- in this macro invocation [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/manager.rs:1182:25 [INFO] [stderr] | [INFO] [stderr] 1182 | for (info_hash, mut torrent) in torrents [INFO] [stderr] | ----^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/manager.rs:1242:25 [INFO] [stderr] | [INFO] [stderr] 1242 | let mut torrents = torrents!(self); [INFO] [stderr] | ----^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/manager.rs:1243:25 [INFO] [stderr] | [INFO] [stderr] 1243 | let mut torrent = torrents.get(&newpeer.info_hash).unwrap(); [INFO] [stderr] | ----^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/manager.rs:1273:23 [INFO] [stderr] | [INFO] [stderr] 1273 | for (peer_id, mut comm) in self.peers.iter_mut() { [INFO] [stderr] | ----^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/manager.rs:1308:21 [INFO] [stderr] | [INFO] [stderr] 1308 | let mut bitfield = self.bitfields.get_mut(&peer_id).unwrap(); [INFO] [stderr] | ----^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/manager.rs:1334:21 [INFO] [stderr] | [INFO] [stderr] 1334 | let mut bitfield = self.bitfields.get_mut(&peer_id).unwrap(); [INFO] [stderr] | ----^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/bittorrent/manager.rs:190:13 [INFO] [stderr] | [INFO] [stderr] 189 | Paused => 0, [INFO] [stderr] | ------ matches any value [INFO] [stderr] 190 | Running => 1, [INFO] [stderr] | ^^^^^^^ unreachable pattern [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_patterns)] on by default [INFO] [stderr] [INFO] [stderr] warning: unreachable pattern [INFO] [stderr] --> src/bittorrent/manager.rs:191:13 [INFO] [stderr] | [INFO] [stderr] 189 | Paused => 0, [INFO] [stderr] | ------ matches any value [INFO] [stderr] 190 | Running => 1, [INFO] [stderr] 191 | Complete => 2, [INFO] [stderr] | ^^^^^^^^ unreachable pattern [INFO] [stderr] [INFO] [stderr] warning: unused variable: `ioerror` [INFO] [stderr] --> src/bittorrent/mod.rs:175:45 [INFO] [stderr] | [INFO] [stderr] 175 | &ParseError::IO(ref string, ref ioerror) => string.as_str(), [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_ioerror` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `error` [INFO] [stderr] --> src/bittorrent/mod.rs:176:48 [INFO] [stderr] | [INFO] [stderr] 176 | &ParseError::Hyper(ref string, ref error) => string.as_str(), [INFO] [stderr] | ^^^^^ help: consider prefixing with an underscore: `_error` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `error` [INFO] [stderr] --> src/bittorrent/mod.rs:177:46 [INFO] [stderr] | [INFO] [stderr] 177 | &ParseError::Uri(ref string, ref error) => string.as_str(), [INFO] [stderr] | ^^^^^ help: consider prefixing with an underscore: `_error` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `string` [INFO] [stderr] --> src/bittorrent/mod.rs:183:36 [INFO] [stderr] | [INFO] [stderr] 183 | &ParseError::Parse(ref string) => None, [INFO] [stderr] | ^^^^^^ help: consider prefixing with an underscore: `_string` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `string` [INFO] [stderr] --> src/bittorrent/mod.rs:184:33 [INFO] [stderr] | [INFO] [stderr] 184 | &ParseError::IO(ref string, ref ioerror) => Some(ioerror), [INFO] [stderr] | ^^^^^^ help: consider prefixing with an underscore: `_string` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `string` [INFO] [stderr] --> src/bittorrent/mod.rs:185:36 [INFO] [stderr] | [INFO] [stderr] 185 | &ParseError::Hyper(ref string, ref error) => Some(error), [INFO] [stderr] | ^^^^^^ help: consider prefixing with an underscore: `_string` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `string` [INFO] [stderr] --> src/bittorrent/mod.rs:186:34 [INFO] [stderr] | [INFO] [stderr] 186 | &ParseError::Uri(ref string, ref error) => Some(error), [INFO] [stderr] | ^^^^^^ help: consider prefixing with an underscore: `_string` [INFO] [stderr] [INFO] [stderr] warning: value assigned to `key` is never read [INFO] [stderr] --> src/bittorrent/bedecoder.rs:94:17 [INFO] [stderr] | [INFO] [stderr] 94 | let mut key = Default::default(); [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_assignments)] on by default [INFO] [stderr] = help: maybe it is overwritten before being read? [INFO] [stderr] [INFO] [stderr] warning: unused variable: `e` [INFO] [stderr] --> src/bittorrent/bedecoder.rs:136:13 [INFO] [stderr] | [INFO] [stderr] 136 | Err(e) => BencodeT::ByteString(Vec::from(bytes)), [INFO] [stderr] | ^ help: consider prefixing with an underscore: `_e` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `l4` [INFO] [stderr] --> src/bittorrent/bedecoder.rs:259:13 [INFO] [stderr] | [INFO] [stderr] 259 | let l4 = BencodeT::List(vec![l1, l2]); [INFO] [stderr] | ^^ help: consider prefixing with an underscore: `_l4` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `sstrings` [INFO] [stderr] --> src/bittorrent/bencoder.rs:82:14 [INFO] [stderr] | [INFO] [stderr] 82 | let (sstrings, sbencoded) = create_strings(); [INFO] [stderr] | ^^^^^^^^ help: consider prefixing with an underscore: `_sstrings` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `istrings` [INFO] [stderr] --> src/bittorrent/bencoder.rs:83:14 [INFO] [stderr] | [INFO] [stderr] 83 | let (istrings, ibencoded) = create_ints(); [INFO] [stderr] | ^^^^^^^^ help: consider prefixing with an underscore: `_istrings` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `ibencoded` [INFO] [stderr] --> src/bittorrent/bencoder.rs:83:24 [INFO] [stderr] | [INFO] [stderr] 83 | let (istrings, ibencoded) = create_ints(); [INFO] [stderr] | ^^^^^^^^^ help: consider prefixing with an underscore: `_ibencoded` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `sstrings` [INFO] [stderr] --> src/bittorrent/bencoder.rs:99:14 [INFO] [stderr] | [INFO] [stderr] 99 | let (sstrings, sbencoded) = create_strings(); [INFO] [stderr] | ^^^^^^^^ help: consider prefixing with an underscore: `_sstrings` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `istrings` [INFO] [stderr] --> src/bittorrent/bencoder.rs:100:14 [INFO] [stderr] | [INFO] [stderr] 100 | let (istrings, ibencoded) = create_ints(); [INFO] [stderr] | ^^^^^^^^ help: consider prefixing with an underscore: `_istrings` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `ibencoded` [INFO] [stderr] --> src/bittorrent/bencoder.rs:100:24 [INFO] [stderr] | [INFO] [stderr] 100 | let (istrings, ibencoded) = create_ints(); [INFO] [stderr] | ^^^^^^^^^ help: consider prefixing with an underscore: `_ibencoded` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `Paused` [INFO] [stderr] --> src/bittorrent/manager.rs:189:13 [INFO] [stderr] | [INFO] [stderr] 189 | Paused => 0, [INFO] [stderr] | ^^^^^^ help: consider prefixing with an underscore: `_Paused` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `Running` [INFO] [stderr] --> src/bittorrent/manager.rs:190:13 [INFO] [stderr] | [INFO] [stderr] 190 | Running => 1, [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_Running` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `Complete` [INFO] [stderr] --> src/bittorrent/manager.rs:191:13 [INFO] [stderr] | [INFO] [stderr] 191 | Complete => 2, [INFO] [stderr] | ^^^^^^^^ help: consider prefixing with an underscore: `_Complete` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `torrent` [INFO] [stderr] --> src/bittorrent/manager.rs:408:13 [INFO] [stderr] | [INFO] [stderr] 408 | for torrent in torrents!(self).iter() { [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_torrent` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `e` [INFO] [stderr] --> src/bittorrent/manager.rs:650:32 [INFO] [stderr] | [INFO] [stderr] 650 | if let Err(e) = self.stream.write(&Peer::bitfield(&torrent.bitfield())) { [INFO] [stderr] | ^ help: consider prefixing with an underscore: `_e` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `n` [INFO] [stderr] --> src/bittorrent/manager.rs:874:16 [INFO] [stderr] | [INFO] [stderr] 874 | Ok(n) => { [INFO] [stderr] | ^ help: consider prefixing with an underscore: `_n` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `peer_id` [INFO] [stderr] --> src/bittorrent/manager.rs:877:44 [INFO] [stderr] | [INFO] [stderr] 877 | Handshake::Initiator { peer_id, info_hash } => { [INFO] [stderr] | ^^^^^^^ help: try ignoring the field: `peer_id: _` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `k` [INFO] [stderr] --> src/bittorrent/manager.rs:1190:28 [INFO] [stderr] | [INFO] [stderr] 1190 | .filter(|&(k, v)| !v.peer_choking && v.info_hash == *info_hash) [INFO] [stderr] | ^ help: consider prefixing with an underscore: `_k` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `v` [INFO] [stderr] --> src/bittorrent/manager.rs:1191:27 [INFO] [stderr] | [INFO] [stderr] 1191 | .map(|(k, v)| k.clone()) [INFO] [stderr] | ^ help: consider prefixing with an underscore: `_v` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `manager_send` [INFO] [stderr] --> src/bittorrent/manager.rs:1461:13 [INFO] [stderr] | [INFO] [stderr] 1461 | manager_send, [INFO] [stderr] | ^^^^^^^^^^^^ help: consider prefixing with an underscore: `_manager_send` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `npieces` [INFO] [stderr] --> src/bittorrent/manager.rs:1464:13 [INFO] [stderr] | [INFO] [stderr] 1464 | npieces, [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_npieces` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `npieces` [INFO] [stderr] --> src/bittorrent/manager.rs:1411:17 [INFO] [stderr] | [INFO] [stderr] 1411 | let npieces = torrent.npieces(); [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_npieces` [INFO] [stderr] ... [INFO] [stderr] 1459 | / controller_setup!( [INFO] [stderr] 1460 | | controller, [INFO] [stderr] 1461 | | manager_send, [INFO] [stderr] 1462 | | torrent_state, [INFO] [stderr] ... | [INFO] [stderr] 1465 | | client [INFO] [stderr] 1466 | | ); [INFO] [stderr] | |__________- in this macro invocation [INFO] [stderr] [INFO] [stderr] warning: unused variable: `client` [INFO] [stderr] --> src/bittorrent/manager.rs:1389:17 [INFO] [stderr] | [INFO] [stderr] 1389 | client [INFO] [stderr] | ^^^^^^ help: consider prefixing with an underscore: `_client` [INFO] [stderr] ... [INFO] [stderr] 1584 | controller_setup!(controller, manager_send, ts, info_hash, npieces); [INFO] [stderr] | -------------------------------------------------------------------- in this macro invocation [INFO] [stderr] [INFO] [stderr] warning: unused variable: `npieces` [INFO] [stderr] --> src/bittorrent/manager.rs:1411:17 [INFO] [stderr] | [INFO] [stderr] 1411 | let npieces = torrent.npieces(); [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_npieces` [INFO] [stderr] ... [INFO] [stderr] 1584 | controller_setup!(controller, manager_send, ts, info_hash, npieces); [INFO] [stderr] | -------------------------------------------------------------------- in this macro invocation [INFO] [stderr] [INFO] [stderr] warning: unused variable: `client` [INFO] [stderr] --> src/bittorrent/manager.rs:1389:17 [INFO] [stderr] | [INFO] [stderr] 1389 | client [INFO] [stderr] | ^^^^^^ help: consider prefixing with an underscore: `_client` [INFO] [stderr] ... [INFO] [stderr] 1639 | controller_setup!(controller, manager_send, ts, info_hash, npieces); [INFO] [stderr] | -------------------------------------------------------------------- in this macro invocation [INFO] [stderr] [INFO] [stderr] warning: unused variable: `npieces` [INFO] [stderr] --> src/bittorrent/manager.rs:1639:68 [INFO] [stderr] | [INFO] [stderr] 1639 | controller_setup!(controller, manager_send, ts, info_hash, npieces); [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_npieces` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `npieces` [INFO] [stderr] --> src/bittorrent/manager.rs:1411:17 [INFO] [stderr] | [INFO] [stderr] 1411 | let npieces = torrent.npieces(); [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_npieces` [INFO] [stderr] ... [INFO] [stderr] 1639 | controller_setup!(controller, manager_send, ts, info_hash, npieces); [INFO] [stderr] | -------------------------------------------------------------------- in this macro invocation [INFO] [stderr] [INFO] [stderr] warning: unused variable: `req` [INFO] [stderr] --> src/bittorrent/manager.rs:1666:39 [INFO] [stderr] | [INFO] [stderr] 1666 | if let ManagerUpdate::Request(req) = peer_comm_2.recv() { [INFO] [stderr] | ^^^ help: consider prefixing with an underscore: `_req` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `length` [INFO] [stderr] --> src/bittorrent/metainfo.rs:189:17 [INFO] [stderr] | [INFO] [stderr] 189 | length, [INFO] [stderr] | ^^^^^^ help: try ignoring the field: `length: _` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `md5sum` [INFO] [stderr] --> src/bittorrent/metainfo.rs:190:21 [INFO] [stderr] | [INFO] [stderr] 190 | ref md5sum, [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: try ignoring the field: `md5sum: _` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `files` [INFO] [stderr] --> src/bittorrent/metainfo.rs:194:21 [INFO] [stderr] | [INFO] [stderr] 194 | ref files, [INFO] [stderr] | ----^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: try ignoring the field: `files: _` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `md5sum` [INFO] [stderr] --> src/bittorrent/metainfo.rs:204:21 [INFO] [stderr] | [INFO] [stderr] 204 | ref md5sum, [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: try ignoring the field: `md5sum: _` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `name` [INFO] [stderr] --> src/bittorrent/metainfo.rs:202:21 [INFO] [stderr] | [INFO] [stderr] 202 | ref name, [INFO] [stderr] | ----^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: try ignoring the field: `name: _` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `name` [INFO] [stderr] --> src/bittorrent/metainfo.rs:207:21 [INFO] [stderr] | [INFO] [stderr] 207 | ref name, [INFO] [stderr] | ----^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: try ignoring the field: `name: _` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `files` [INFO] [stderr] --> src/bittorrent/metainfo.rs:226:21 [INFO] [stderr] | [INFO] [stderr] 226 | let files = hm.get("files").unwrap(); [INFO] [stderr] | ^^^^^ help: consider prefixing with an underscore: `_files` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `files` [INFO] [stderr] --> src/bittorrent/metainfo.rs:389:19 [INFO] [stderr] | [INFO] [stderr] 389 | pub fn create(files: Vec) -> Result<(), ParseError> { [INFO] [stderr] | ^^^^^ help: consider prefixing with an underscore: `_files` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `i` [INFO] [stderr] --> src/bittorrent/peer.rs:511:13 [INFO] [stderr] | [INFO] [stderr] 511 | for i in 0..QUEUE_LENGTH - 1 { [INFO] [stderr] | ^ help: consider prefixing with an underscore: `_i` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `l` [INFO] [stderr] --> src/bittorrent/peer.rs:81:21 [INFO] [stderr] | [INFO] [stderr] 81 | let l = $other; [INFO] [stderr] | ^ help: consider prefixing with an underscore: `_l` [INFO] [stderr] ... [INFO] [stderr] 523 | let message = message_calc_length!(7u8, 0u32, 0u32, 1u32, 2u32, 3u32); [INFO] [stderr] | ------------------------------------------------------- in this macro invocation [INFO] [stderr] [INFO] [stderr] warning: unused variable: `buf` [INFO] [stderr] --> src/bittorrent/peer.rs:543:17 [INFO] [stderr] | [INFO] [stderr] 543 | let mut buf: [u8; 68] = [0; 68]; [INFO] [stderr] | ^^^ help: consider prefixing with an underscore: `_buf` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `i` [INFO] [stderr] --> src/bittorrent/torrent_runtime.rs:57:22 [INFO] [stderr] | [INFO] [stderr] 57 | if let Some((i, priority)) = self.peek() { [INFO] [stderr] | ^ help: consider prefixing with an underscore: `_i` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `e` [INFO] [stderr] --> src/bittorrent/tracker.rs:140:17 [INFO] [stderr] | [INFO] [stderr] 140 | Err(e) => Err(parse_error!("IP string incorrectly formatted: {}", ip)), [INFO] [stderr] | ^ help: consider prefixing with an underscore: `_e` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `peer_id` [INFO] [stderr] --> src/bittorrent/tracker.rs:148:21 [INFO] [stderr] | [INFO] [stderr] 148 | ref peer_id, [INFO] [stderr] | ----^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: try ignoring the field: `peer_id: _` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `url` [INFO] [stderr] --> src/bittorrent/tracker.rs:302:16 [INFO] [stderr] | [INFO] [stderr] 302 | pub fn new(url: String) {} [INFO] [stderr] | ^^^ help: consider prefixing with an underscore: `_url` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/torrent.rs:358:17 [INFO] [stderr] | [INFO] [stderr] 358 | let mut vec = self.map.get_mut(&piece.index).unwrap(); [INFO] [stderr] | ----^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/tracker.rs:255:25 [INFO] [stderr] | [INFO] [stderr] 255 | let mut chunk = v.body_mut(); [INFO] [stderr] | ----^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: the feature `proc_macro` has been stable since 1.29.0 and no longer requires an attribute to enable [INFO] [stderr] --> src/lib.rs:6:12 [INFO] [stderr] | [INFO] [stderr] 6 | #![feature(proc_macro, generators)] [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(stable_features)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/manager.rs:624:13 [INFO] [stderr] | [INFO] [stderr] 624 | let mut $torrent = torrents.get_mut(&hash).unwrap(); [INFO] [stderr] | ----^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] ... [INFO] [stderr] 719 | torrent_lock_return!(torrent_state, peer, torrent); [INFO] [stderr] | --------------------------------------------------- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/manager.rs:624:13 [INFO] [stderr] | [INFO] [stderr] 624 | let mut $torrent = torrents.get_mut(&hash).unwrap(); [INFO] [stderr] | ----^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] ... [INFO] [stderr] 744 | torrent_lock_return!(torrent_state, peer, torrent); [INFO] [stderr] | --------------------------------------------------- in this macro invocation [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/manager.rs:624:13 [INFO] [stderr] | [INFO] [stderr] 624 | let mut $torrent = torrents.get_mut(&hash).unwrap(); [INFO] [stderr] | ----^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] ... [INFO] [stderr] 779 | torrent_lock_return!(torrent_state, peer, torrent); [INFO] [stderr] | --------------------------------------------------- in this macro invocation [INFO] [stderr] [INFO] [stderr] warning: variable `Paused` should have a snake case name [INFO] [stderr] --> src/bittorrent/manager.rs:189:13 [INFO] [stderr] | [INFO] [stderr] 189 | Paused => 0, [INFO] [stderr] | ^^^^^^ help: convert the identifier to snake case: `paused` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable `Running` should have a snake case name [INFO] [stderr] --> src/bittorrent/manager.rs:190:13 [INFO] [stderr] | [INFO] [stderr] 190 | Running => 1, [INFO] [stderr] | ^^^^^^^ help: convert the identifier to snake case: `running` [INFO] [stderr] [INFO] [stderr] warning: variable `Complete` should have a snake case name [INFO] [stderr] --> src/bittorrent/manager.rs:191:13 [INFO] [stderr] | [INFO] [stderr] 191 | Complete => 2, [INFO] [stderr] | ^^^^^^^^ help: convert the identifier to snake case: `complete` [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:409:13 [INFO] [stderr] | [INFO] [stderr] 409 | Manager::query_tracker(self.clone()); [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] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:724:33 [INFO] [stderr] | [INFO] [stderr] 724 | stream.write(Peer::piece(&pd).as_slice()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:747:29 [INFO] [stderr] | [INFO] [stderr] 747 | comm.send(PeerUpdate::Downloaded(piece.piece.index)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:759:21 [INFO] [stderr] | [INFO] [stderr] 759 | comm.send(PeerUpdate::InterestedChange); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:774:21 [INFO] [stderr] | [INFO] [stderr] 774 | comm.send(PeerUpdate::ChokingChange); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:782:21 [INFO] [stderr] | [INFO] [stderr] 782 | comm.send(PeerUpdate::Have(index)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:791:21 [INFO] [stderr] | [INFO] [stderr] 791 | comm.send(PeerUpdate::Bitfield(bitfield)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:811:17 [INFO] [stderr] | [INFO] [stderr] 811 | self.stream.write(req.as_slice()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:817:21 [INFO] [stderr] | [INFO] [stderr] 817 | self.stream.write(self.peer.choke(true).as_slice()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:824:21 [INFO] [stderr] | [INFO] [stderr] 824 | self.stream.write(self.peer.choke(false).as_slice()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:836:17 [INFO] [stderr] | [INFO] [stderr] 836 | self.stream.write(Peer::have(index).as_slice()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:865:13 [INFO] [stderr] | [INFO] [stderr] 865 | stream.write(&Peer::handshake(&peer_id, &info_hash)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:888:25 [INFO] [stderr] | [INFO] [stderr] 888 | stream.write(&Peer::handshake(&peer_id, &their_info_hash)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:942:9 [INFO] [stderr] | [INFO] [stderr] 942 | / manager_send [INFO] [stderr] 943 | | .send(NewPeerMsg { [INFO] [stderr] 944 | | peer_id: peer.peer_id().clone(), [INFO] [stderr] 945 | | info_hash: peer.info_hash().clone(), [INFO] [stderr] ... | [INFO] [stderr] 951 | | Err(err) [INFO] [stderr] 952 | | }); [INFO] [stderr] | |_______________^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:965:21 [INFO] [stderr] | [INFO] [stderr] 965 | stream.shutdown(Shutdown::Both); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:993:29 [INFO] [stderr] | [INFO] [stderr] 993 | stream.shutdown(Shutdown::Both); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:1136:29 [INFO] [stderr] | [INFO] [stderr] 1136 | / self.peers [INFO] [stderr] 1137 | | .get_mut(peer_id) [INFO] [stderr] 1138 | | .expect("Peer should be in peers list") [INFO] [stderr] 1139 | | .send(ManagerUpdate::Disconnect); [INFO] [stderr] | |_________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:1172:17 [INFO] [stderr] | [INFO] [stderr] 1172 | comm.send(ManagerUpdate::Unchoke); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:1174:17 [INFO] [stderr] | [INFO] [stderr] 1174 | comm.send(ManagerUpdate::Choke); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:1313:21 [INFO] [stderr] | [INFO] [stderr] 1313 | comm.send(ManagerUpdate::Have(index)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:1324:29 [INFO] [stderr] | [INFO] [stderr] 1324 | / self.client_comm [INFO] [stderr] 1325 | | .send(InfoMsg::One(self.create_info(&info_hash, &mut torrent))); [INFO] [stderr] | |________________________________________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: function `checkVec` should have a snake case name [INFO] [stderr] --> src/bittorrent/metainfo.rs:135:4 [INFO] [stderr] | [INFO] [stderr] 135 | fn checkVec( [INFO] [stderr] | ^^^^^^^^ help: convert the identifier to snake case: `check_vec` [INFO] [stderr] [INFO] [stderr] warning: function `_checkVec` should have a snake case name [INFO] [stderr] --> src/bittorrent/metainfo.rs:155:4 [INFO] [stderr] | [INFO] [stderr] 155 | fn _checkVec(vec: Vec) -> Result, ParseError> { [INFO] [stderr] | ^^^^^^^^^ help: convert the identifier to snake case: `_check_vec` [INFO] [stderr] [INFO] [stderr] warning: function `checkHM` should have a snake case name [INFO] [stderr] --> src/bittorrent/metainfo.rs:169:4 [INFO] [stderr] | [INFO] [stderr] 169 | fn checkHM<'a>( [INFO] [stderr] | ^^^^^^^ help: convert the identifier to snake case: `check_hm` [INFO] [stderr] [INFO] [stderr] warning: method `as_BTFiles` should have a snake case name [INFO] [stderr] --> src/bittorrent/metainfo.rs:260:12 [INFO] [stderr] | [INFO] [stderr] 260 | pub fn as_BTFiles(&self, root_directory: &str) -> Vec { [INFO] [stderr] | ^^^^^^^^^^ help: convert the identifier to snake case: `as_btfiles` [INFO] [stderr] [INFO] [stderr] warning: unused `hyper::client::ResponseFuture` that must be used [INFO] [stderr] --> src/bittorrent/tracker.rs:285:13 [INFO] [stderr] | [INFO] [stderr] 285 | self.reqs.remove(index); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: futures do nothing unless polled [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/manager.rs:1182:25 [INFO] [stderr] | [INFO] [stderr] 1182 | for (info_hash, mut torrent) in torrents [INFO] [stderr] | ----^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/manager.rs:1242:25 [INFO] [stderr] | [INFO] [stderr] 1242 | let mut torrents = torrents!(self); [INFO] [stderr] | ----^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/manager.rs:1243:25 [INFO] [stderr] | [INFO] [stderr] 1243 | let mut torrent = torrents.get(&newpeer.info_hash).unwrap(); [INFO] [stderr] | ----^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/manager.rs:1273:23 [INFO] [stderr] | [INFO] [stderr] 1273 | for (peer_id, mut comm) in self.peers.iter_mut() { [INFO] [stderr] | ----^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/manager.rs:1308:21 [INFO] [stderr] | [INFO] [stderr] 1308 | let mut bitfield = self.bitfields.get_mut(&peer_id).unwrap(); [INFO] [stderr] | ----^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/manager.rs:1334:21 [INFO] [stderr] | [INFO] [stderr] 1334 | let mut bitfield = self.bitfields.get_mut(&peer_id).unwrap(); [INFO] [stderr] | ----^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/manager.rs:1422:17 [INFO] [stderr] | [INFO] [stderr] 1422 | let mut $torrent = ts.get_mut($info_hash).unwrap(); [INFO] [stderr] | ----^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] ... [INFO] [stderr] 1471 | get_torrent!(torrent_state, &info_hash, torrent); [INFO] [stderr] | ------------------------------------------------- in this macro invocation [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/manager.rs:1422:17 [INFO] [stderr] | [INFO] [stderr] 1422 | let mut $torrent = ts.get_mut($info_hash).unwrap(); [INFO] [stderr] | ----^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] ... [INFO] [stderr] 1478 | get_torrent!(torrent_state, &info_hash, torrent); [INFO] [stderr] | ------------------------------------------------- in this macro invocation [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/manager.rs:1422:17 [INFO] [stderr] | [INFO] [stderr] 1422 | let mut $torrent = ts.get_mut($info_hash).unwrap(); [INFO] [stderr] | ----^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] ... [INFO] [stderr] 1485 | get_torrent!(torrent_state, &info_hash, torrent); [INFO] [stderr] | ------------------------------------------------- in this macro invocation [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/manager.rs:1492:17 [INFO] [stderr] | [INFO] [stderr] 1492 | let mut ts = torrent_state.torrents.lock().unwrap(); [INFO] [stderr] | ----^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/manager.rs:1629:17 [INFO] [stderr] | [INFO] [stderr] 1629 | let mut state = &controller.torrent_state; [INFO] [stderr] | ----^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/manager.rs:1422:17 [INFO] [stderr] | [INFO] [stderr] 1422 | let mut $torrent = ts.get_mut($info_hash).unwrap(); [INFO] [stderr] | ----^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] ... [INFO] [stderr] 1630 | get_torrent!(state, &info_hash, torrent); [INFO] [stderr] | ----------------------------------------- in this macro invocation [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/manager.rs:1660:17 [INFO] [stderr] | [INFO] [stderr] 1660 | let mut torrent = torrents.get_mut(&info_hash).unwrap(); [INFO] [stderr] | ----^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] error[E0557]: feature has been removed [INFO] [stderr] --> src/bin/webserver/main.rs:1:20 [INFO] [stderr] | [INFO] [stderr] 1 | #![feature(plugin, custom_derive)] [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] error[E0557]: feature has been removed [INFO] [stderr] --> src/bin/webserver/main.rs:1:20 [INFO] [stderr] | [INFO] [stderr] 1 | #![feature(plugin, custom_derive)] [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: subsumed by `#[proc_macro_derive]` [INFO] [stderr] --> src/bin/webserver/main.rs:1:20 [INFO] [stderr] | [INFO] [stderr] 1 | #![feature(plugin, custom_derive)] [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] | [INFO] [stderr] note: subsumed by `#[proc_macro_derive]` [INFO] [stderr] --> src/bin/webserver/main.rs:1:20 [INFO] [stderr] | [INFO] [stderr] 1 | #![feature(plugin, custom_derive)] [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/peer.rs:543:13 [INFO] [stderr] | [INFO] [stderr] 543 | let mut buf: [u8; 68] = [0; 68]; [INFO] [stderr] | ----^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/torrent.rs:358:17 [INFO] [stderr] | [INFO] [stderr] 358 | let mut vec = self.map.get_mut(&piece.index).unwrap(); [INFO] [stderr] | ----^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bittorrent/tracker.rs:255:25 [INFO] [stderr] | [INFO] [stderr] 255 | let mut chunk = v.body_mut(); [INFO] [stderr] | ----^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: the feature `proc_macro` has been stable since 1.29.0 and no longer requires an attribute to enable [INFO] [stderr] --> src/lib.rs:6:12 [INFO] [stderr] | [INFO] [stderr] 6 | #![feature(proc_macro, generators)] [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(stable_features)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable `Paused` should have a snake case name [INFO] [stderr] --> src/bittorrent/manager.rs:189:13 [INFO] [stderr] | [INFO] [stderr] 189 | Paused => 0, [INFO] [stderr] | ^^^^^^ help: convert the identifier to snake case: `paused` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable `Running` should have a snake case name [INFO] [stderr] --> src/bittorrent/manager.rs:190:13 [INFO] [stderr] | [INFO] [stderr] 190 | Running => 1, [INFO] [stderr] | ^^^^^^^ help: convert the identifier to snake case: `running` [INFO] [stderr] [INFO] [stderr] warning: variable `Complete` should have a snake case name [INFO] [stderr] --> src/bittorrent/manager.rs:191:13 [INFO] [stderr] | [INFO] [stderr] 191 | Complete => 2, [INFO] [stderr] | ^^^^^^^^ help: convert the identifier to snake case: `complete` [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:409:13 [INFO] [stderr] | [INFO] [stderr] 409 | Manager::query_tracker(self.clone()); [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] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:724:33 [INFO] [stderr] | [INFO] [stderr] 724 | stream.write(Peer::piece(&pd).as_slice()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:747:29 [INFO] [stderr] | [INFO] [stderr] 747 | comm.send(PeerUpdate::Downloaded(piece.piece.index)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:759:21 [INFO] [stderr] | [INFO] [stderr] 759 | comm.send(PeerUpdate::InterestedChange); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:774:21 [INFO] [stderr] | [INFO] [stderr] 774 | comm.send(PeerUpdate::ChokingChange); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:782:21 [INFO] [stderr] | [INFO] [stderr] 782 | comm.send(PeerUpdate::Have(index)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:791:21 [INFO] [stderr] | [INFO] [stderr] 791 | comm.send(PeerUpdate::Bitfield(bitfield)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:811:17 [INFO] [stderr] | [INFO] [stderr] 811 | self.stream.write(req.as_slice()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:817:21 [INFO] [stderr] | [INFO] [stderr] 817 | self.stream.write(self.peer.choke(true).as_slice()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:824:21 [INFO] [stderr] | [INFO] [stderr] 824 | self.stream.write(self.peer.choke(false).as_slice()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:836:17 [INFO] [stderr] | [INFO] [stderr] 836 | self.stream.write(Peer::have(index).as_slice()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:865:13 [INFO] [stderr] | [INFO] [stderr] 865 | stream.write(&Peer::handshake(&peer_id, &info_hash)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:888:25 [INFO] [stderr] | [INFO] [stderr] 888 | stream.write(&Peer::handshake(&peer_id, &their_info_hash)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:942:9 [INFO] [stderr] | [INFO] [stderr] 942 | / manager_send [INFO] [stderr] 943 | | .send(NewPeerMsg { [INFO] [stderr] 944 | | peer_id: peer.peer_id().clone(), [INFO] [stderr] 945 | | info_hash: peer.info_hash().clone(), [INFO] [stderr] ... | [INFO] [stderr] 951 | | Err(err) [INFO] [stderr] 952 | | }); [INFO] [stderr] | |_______________^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:965:21 [INFO] [stderr] | [INFO] [stderr] 965 | stream.shutdown(Shutdown::Both); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:993:29 [INFO] [stderr] | [INFO] [stderr] 993 | stream.shutdown(Shutdown::Both); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:1136:29 [INFO] [stderr] | [INFO] [stderr] 1136 | / self.peers [INFO] [stderr] 1137 | | .get_mut(peer_id) [INFO] [stderr] 1138 | | .expect("Peer should be in peers list") [INFO] [stderr] 1139 | | .send(ManagerUpdate::Disconnect); [INFO] [stderr] | |_________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:1172:17 [INFO] [stderr] | [INFO] [stderr] 1172 | comm.send(ManagerUpdate::Unchoke); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:1174:17 [INFO] [stderr] | [INFO] [stderr] 1174 | comm.send(ManagerUpdate::Choke); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:1313:21 [INFO] [stderr] | [INFO] [stderr] 1313 | comm.send(ManagerUpdate::Have(index)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:1324:29 [INFO] [stderr] | [INFO] [stderr] 1324 | / self.client_comm [INFO] [stderr] 1325 | | .send(InfoMsg::One(self.create_info(&info_hash, &mut torrent))); [INFO] [stderr] | |________________________________________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:1468:9 [INFO] [stderr] | [INFO] [stderr] 1468 | client.send(ClientMsg::Pause(info_hash)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:1475:9 [INFO] [stderr] | [INFO] [stderr] 1475 | client.send(ClientMsg::Resume(info_hash)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:1482:9 [INFO] [stderr] | [INFO] [stderr] 1482 | client.send(ClientMsg::Resume(info_hash)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:1489:9 [INFO] [stderr] | [INFO] [stderr] 1489 | client.send(ClientMsg::Remove(info_hash)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:1598:9 [INFO] [stderr] | [INFO] [stderr] 1598 | peer_comm.send(PeerUpdate::DownloadSpeed(100)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:1599:9 [INFO] [stderr] | [INFO] [stderr] 1599 | peer_comm.send(PeerUpdate::InterestedChange); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:1600:9 [INFO] [stderr] | [INFO] [stderr] 1600 | peer_comm.send(PeerUpdate::ChokingChange); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:1601:9 [INFO] [stderr] | [INFO] [stderr] 1601 | peer_comm.send(PeerUpdate::Bitfield(BitVec::from_elem(npieces, true))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:1622:9 [INFO] [stderr] | [INFO] [stderr] 1622 | peer_comm.send(PeerUpdate::Disconnect); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:1652:9 [INFO] [stderr] | [INFO] [stderr] 1652 | peer_comm_2.send(PeerUpdate::ChokingChange); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/manager.rs:1653:9 [INFO] [stderr] | [INFO] [stderr] 1653 | peer_comm_2.send(PeerUpdate::Have(0)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: function `checkVec` should have a snake case name [INFO] [stderr] --> src/bittorrent/metainfo.rs:135:4 [INFO] [stderr] | [INFO] [stderr] 135 | fn checkVec( [INFO] [stderr] | ^^^^^^^^ help: convert the identifier to snake case: `check_vec` [INFO] [stderr] [INFO] [stderr] warning: function `_checkVec` should have a snake case name [INFO] [stderr] --> src/bittorrent/metainfo.rs:155:4 [INFO] [stderr] | [INFO] [stderr] 155 | fn _checkVec(vec: Vec) -> Result, ParseError> { [INFO] [stderr] | ^^^^^^^^^ help: convert the identifier to snake case: `_check_vec` [INFO] [stderr] [INFO] [stderr] warning: function `checkHM` should have a snake case name [INFO] [stderr] --> src/bittorrent/metainfo.rs:169:4 [INFO] [stderr] | [INFO] [stderr] 169 | fn checkHM<'a>( [INFO] [stderr] | ^^^^^^^ help: convert the identifier to snake case: `check_hm` [INFO] [stderr] [INFO] [stderr] warning: method `as_BTFiles` should have a snake case name [INFO] [stderr] --> src/bittorrent/metainfo.rs:260:12 [INFO] [stderr] | [INFO] [stderr] 260 | pub fn as_BTFiles(&self, root_directory: &str) -> Vec { [INFO] [stderr] | ^^^^^^^^^^ help: convert the identifier to snake case: `as_btfiles` [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/metainfo.rs:530:9 [INFO] [stderr] | [INFO] [stderr] 530 | metainfo.write("test/bible-out.torrent"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/peer.rs:470:9 [INFO] [stderr] | [INFO] [stderr] 470 | peer.parse_message(&bitfield); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bittorrent/peer.rs:515:9 [INFO] [stderr] | [INFO] [stderr] 515 | peer.parse_request(&request); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `hyper::client::ResponseFuture` that must be used [INFO] [stderr] --> src/bittorrent/tracker.rs:285:13 [INFO] [stderr] | [INFO] [stderr] 285 | self.reqs.remove(index); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: futures do nothing unless polled [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::sync::mpsc::Receiver` [INFO] [stderr] --> src/bin/client/table.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | use std::sync::mpsc::Receiver; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused imports: `BoxView`, `IdView` [INFO] [stderr] --> src/bin/client/table.rs:11:22 [INFO] [stderr] | [INFO] [stderr] 11 | use cursive::views::{BoxView, IdView}; [INFO] [stderr] | ^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `cursive::traits::*` [INFO] [stderr] --> src/bin/client/table.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | use cursive::traits::*; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `cursive::align::HAlign` [INFO] [stderr] --> src/bin/client/table.rs:13:5 [INFO] [stderr] | [INFO] [stderr] 13 | use cursive::align::HAlign; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `TableColumn` [INFO] [stderr] --> src/bin/client/table.rs:16:26 [INFO] [stderr] | [INFO] [stderr] 16 | use cursive_table_view::{TableColumn, TableView, TableViewItem}; [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Manager` [INFO] [stderr] --> src/bin/client/table.rs:17:54 [INFO] [stderr] | [INFO] [stderr] 17 | use bittorrent::bittorrent::manager::{Info, InfoMsg, Manager, Status}; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::sync::mpsc::Receiver` [INFO] [stderr] --> src/bin/client/table.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | use std::sync::mpsc::Receiver; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused imports: `BoxView`, `IdView` [INFO] [stderr] --> src/bin/client/table.rs:11:22 [INFO] [stderr] | [INFO] [stderr] 11 | use cursive::views::{BoxView, IdView}; [INFO] [stderr] | ^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `cursive::traits::*` [INFO] [stderr] --> src/bin/client/table.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | use cursive::traits::*; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `cursive::align::HAlign` [INFO] [stderr] --> src/bin/client/table.rs:13:5 [INFO] [stderr] | [INFO] [stderr] 13 | use cursive::align::HAlign; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `TableColumn` [INFO] [stderr] --> src/bin/client/table.rs:16:26 [INFO] [stderr] | [INFO] [stderr] 16 | use cursive_table_view::{TableColumn, TableView, TableViewItem}; [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Manager` [INFO] [stderr] --> src/bin/client/table.rs:17:54 [INFO] [stderr] | [INFO] [stderr] 17 | use bittorrent::bittorrent::manager::{Info, InfoMsg, Manager, Status}; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unreachable statement [INFO] [stderr] --> src/bin/client/table.rs:130:21 [INFO] [stderr] | [INFO] [stderr] 130 | break; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: unreachable statement [INFO] [stderr] --> src/bin/client/table.rs:130:21 [INFO] [stderr] | [INFO] [stderr] 130 | break; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_code)] on by default [INFO] [stderr] warning: unused variable: `curs` [INFO] [stderr] --> src/bin/client/client.rs:87:10 [INFO] [stderr] | [INFO] [stderr] 87 | fn pause(curs: &mut Cursive) {} [INFO] [stderr] | ^^^^ help: consider prefixing with an underscore: `_curs` [INFO] [stderr] [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `curs` [INFO] [stderr] --> src/bin/client/client.rs:89:11 [INFO] [stderr] | [INFO] [stderr] 89 | fn remove(curs: &mut Cursive) {} [INFO] [stderr] | ^^^^ help: consider prefixing with an underscore: `_curs` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bin/client/client.rs:56:9 [INFO] [stderr] | [INFO] [stderr] 56 | let mut manager = Rc::new(RefCell::new(Manager::new())); [INFO] [stderr] | ----^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bin/client/client.rs:80:8 [INFO] [stderr] | [INFO] [stderr] 80 | fn add(mut manager: Rc>) { [INFO] [stderr] | ----^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `curs` [INFO] [stderr] --> src/bin/client/client.rs:87:10 [INFO] [stderr] | [INFO] [stderr] 87 | fn pause(curs: &mut Cursive) {} [INFO] [stderr] | ^^^^ help: consider prefixing with an underscore: `_curs` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `curs` [INFO] [stderr] --> src/bin/client/client.rs:89:11 [INFO] [stderr] | [INFO] [stderr] 89 | fn remove(curs: &mut Cursive) {} [INFO] [stderr] | ^^^^ help: consider prefixing with an underscore: `_curs` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bin/client/client.rs:56:9 [INFO] [stderr] | [INFO] [stderr] 56 | let mut manager = Rc::new(RefCell::new(Manager::new())); [INFO] [stderr] | ----^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/bin/client/client.rs:80:8 [INFO] [stderr] | [INFO] [stderr] 80 | fn add(mut manager: Rc>) { [INFO] [stderr] | ----^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stderr] --> src/bin/webserver/torrent_state.rs:221:36 [INFO] [stderr] | [INFO] [stderr] 221 | fn unwrap_and_sort(state: &mut TorrentState) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^ help: use `dyn`: `dyn TorrentState` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(bare_trait_objects)] on by default [INFO] [stderr] [INFO] [stderr] warning: struct is never constructed: `Client` [INFO] [stderr] --> src/bin/client/client.rs:13:1 [INFO] [stderr] | [INFO] [stderr] 13 | pub struct Client { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: function is never used: `fake_load` [INFO] [stderr] --> src/bin/client/client.rs:17:1 [INFO] [stderr] | [INFO] [stderr] 17 | fn fake_load(n_max: usize, counter: &Counter) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `push_dialog` [INFO] [stderr] --> src/bin/client/client.rs:25:1 [INFO] [stderr] | [INFO] [stderr] 25 | fn push_dialog(s: &mut Cursive) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `progress` [INFO] [stderr] --> src/bin/client/client.rs:35:1 [INFO] [stderr] | [INFO] [stderr] 35 | fn progress(curs: &Cursive) -> ProgressBar { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `pause` [INFO] [stderr] --> src/bin/client/client.rs:87:1 [INFO] [stderr] | [INFO] [stderr] 87 | fn pause(curs: &mut Cursive) {} [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bin/client/client.rs:81:5 [INFO] [stderr] | [INFO] [stderr] 81 | / manager.borrow_mut().add_torrent( [INFO] [stderr] 82 | | "/path/to/torrent_file.torrent", [INFO] [stderr] 83 | | "/path/to/download/directory", [INFO] [stderr] 84 | | ); [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] [INFO] [stderr] warning: struct is never constructed: `Client` [INFO] [stderr] --> src/bin/client/client.rs:13:1 [INFO] [stderr] | [INFO] [stderr] 13 | pub struct Client { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: function is never used: `fake_load` [INFO] [stderr] --> src/bin/client/client.rs:17:1 [INFO] [stderr] | [INFO] [stderr] 17 | fn fake_load(n_max: usize, counter: &Counter) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `push_dialog` [INFO] [stderr] --> src/bin/client/client.rs:25:1 [INFO] [stderr] | [INFO] [stderr] 25 | fn push_dialog(s: &mut Cursive) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `progress` [INFO] [stderr] --> src/bin/client/client.rs:35:1 [INFO] [stderr] | [INFO] [stderr] 35 | fn progress(curs: &Cursive) -> ProgressBar { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `pause` [INFO] [stderr] --> src/bin/client/client.rs:87:1 [INFO] [stderr] | [INFO] [stderr] 87 | fn pause(curs: &mut Cursive) {} [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/bin/client/client.rs:81:5 [INFO] [stderr] | [INFO] [stderr] 81 | / manager.borrow_mut().add_torrent( [INFO] [stderr] 82 | | "/path/to/torrent_file.torrent", [INFO] [stderr] 83 | | "/path/to/download/directory", [INFO] [stderr] 84 | | ); [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] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] For more information about this error, try `rustc --explain E0557`. [INFO] [stderr] error: Could not compile `rust-bittorrent-client`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] For more information about this error, try `rustc --explain E0557`. [INFO] [stderr] error: Could not compile `rust-bittorrent-client`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "148361f4be10fab380ad2ea91811113d0121b18e4c0a6e408a4cdf3c4e41505d"` [INFO] running `"docker" "rm" "-f" "148361f4be10fab380ad2ea91811113d0121b18e4c0a6e408a4cdf3c4e41505d"` [INFO] [stdout] 148361f4be10fab380ad2ea91811113d0121b18e4c0a6e408a4cdf3c4e41505d