[INFO] updating cached repository https://github.com/kstola2/torrent-client-rust
[INFO] running `"git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "-c" "remote.origin.fetch=refs/heads/*:refs/heads/*" "fetch" "origin" "--force" "--prune"`
[INFO] running `"git" "rev-parse" "HEAD"`
[INFO] [stdout] 70d6dbc28fdb558b0e5209637525cdea7319b93b
[INFO] checking kstola2/torrent-client-rust against master#209b2be09fcaff937480d1fbbe8b31646e361c7a for pr-70917
[INFO] running `"git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fkstola2%2Ftorrent-client-rust" "/workspace/builds/worker-7/source"`
[INFO] [stderr] Cloning into '/workspace/builds/worker-7/source'...
[INFO] [stderr] done.
[INFO] validating manifest of git repo https://github.com/kstola2/torrent-client-rust on toolchain 209b2be09fcaff937480d1fbbe8b31646e361c7a
[INFO] running `"/workspace/cargo-home/bin/cargo" "+209b2be09fcaff937480d1fbbe8b31646e361c7a" "read-manifest" "--manifest-path" "Cargo.toml"`
[INFO] started tweaking git repo https://github.com/kstola2/torrent-client-rust
[INFO] finished tweaking git repo https://github.com/kstola2/torrent-client-rust
[INFO] tweaked toml for git repo https://github.com/kstola2/torrent-client-rust written to /workspace/builds/worker-7/source/Cargo.toml
[INFO] running `"/workspace/cargo-home/bin/cargo" "+209b2be09fcaff937480d1fbbe8b31646e361c7a" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"`
[INFO] running `"/workspace/cargo-home/bin/cargo" "+209b2be09fcaff937480d1fbbe8b31646e361c7a" "fetch" "--locked" "--manifest-path" "Cargo.toml"`
[INFO] running `"docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "MAP_USER_ID=0" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--network" "none" "rustops/crates-build-env" "/opt/rustwide/cargo-home/bin/cargo" "+209b2be09fcaff937480d1fbbe8b31646e361c7a" "check" "--frozen" "--all" "--all-targets"`
[INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.
[INFO] [stdout] c26b3a7c586b9827fc50c1cc8a0cbef3431c31e39d352419ae5127bcdc512c19
[INFO] running `"docker" "start" "-a" "c26b3a7c586b9827fc50c1cc8a0cbef3431c31e39d352419ae5127bcdc512c19"`
[INFO] [stderr]    Compiling syn v1.0.17
[INFO] [stderr]     Checking futures-io v0.3.4
[INFO] [stderr]     Checking async-task v1.3.1
[INFO] [stderr]     Checking want v0.3.0
[INFO] [stderr]     Checking mio v0.6.21
[INFO] [stderr]     Checking native-tls v0.2.4
[INFO] [stderr]     Checking rust-crypto v0.2.36
[INFO] [stderr]     Checking serde_urlencoded v0.6.1
[INFO] [stderr]     Checking mio-uds v0.6.7
[INFO] [stderr]     Checking async-std v1.5.0
[INFO] [stderr]    Compiling futures-macro v0.3.4
[INFO] [stderr]    Compiling tokio-macros v0.2.5
[INFO] [stderr]    Compiling pin-project-internal v0.4.8
[INFO] [stderr]     Checking tokio v0.2.18
[INFO] [stderr]     Checking futures-util v0.3.4
[INFO] [stderr]     Checking pin-project v0.4.8
[INFO] [stderr]     Checking futures-executor v0.3.4
[INFO] [stderr]     Checking tokio-util v0.3.1
[INFO] [stderr]     Checking tokio-tls v0.3.0
[INFO] [stderr]     Checking futures v0.3.4
[INFO] [stderr]     Checking h2 v0.2.4
[INFO] [stderr]     Checking hyper v0.13.4
[INFO] [stderr]     Checking hyper-tls v0.4.1
[INFO] [stderr]     Checking reqwest v0.10.4
[INFO] [stderr]     Checking torrent_client v0.1.0 (/opt/rustwide/workdir)
[INFO] [stderr] warning: unused import: `byteorder::WriteBytesExt`
[INFO] [stderr]  --> src/message.rs:9:5
[INFO] [stderr]   |
[INFO] [stderr] 9 | use byteorder::WriteBytesExt;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::borrow::Borrow`
[INFO] [stderr]  --> src/tracker.rs:1:5
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::borrow::Borrow;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `http::Request`
[INFO] [stderr]  --> src/tracker.rs:4:5
[INFO] [stderr]   |
[INFO] [stderr] 4 | use http::Request;
[INFO] [stderr]   |     ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `ParseError`
[INFO] [stderr]  --> src/tracker.rs:5:11
[INFO] [stderr]   |
[INFO] [stderr] 5 | use url::{ParseError, Url};
[INFO] [stderr]   |           ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `url::form_urlencoded::Parse`
[INFO] [stderr]  --> src/tracker.rs:6:5
[INFO] [stderr]   |
[INFO] [stderr] 6 | use url::form_urlencoded::Parse;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::borrow::Borrow`
[INFO] [stderr]  --> src/client.rs:1:5
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::borrow::Borrow;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Read`
[INFO] [stderr]  --> src/client.rs:3:15
[INFO] [stderr]   |
[INFO] [stderr] 3 | use std::io::{Read, Write};
[INFO] [stderr]   |               ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `byteorder::WriteBytesExt`
[INFO] [stderr]  --> src/message.rs:9:5
[INFO] [stderr]   |
[INFO] [stderr] 9 | use byteorder::WriteBytesExt;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::borrow::Borrow`
[INFO] [stderr]  --> src/tracker.rs:1:5
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::borrow::Borrow;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `http::Request`
[INFO] [stderr]  --> src/tracker.rs:4:5
[INFO] [stderr]   |
[INFO] [stderr] 4 | use http::Request;
[INFO] [stderr]   |     ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `ParseError`
[INFO] [stderr]  --> src/tracker.rs:5:11
[INFO] [stderr]   |
[INFO] [stderr] 5 | use url::{ParseError, Url};
[INFO] [stderr]   |           ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `url::form_urlencoded::Parse`
[INFO] [stderr]  --> src/tracker.rs:6:5
[INFO] [stderr]   |
[INFO] [stderr] 6 | use url::form_urlencoded::Parse;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::borrow::Borrow`
[INFO] [stderr]  --> src/client.rs:1:5
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::borrow::Borrow;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Read`
[INFO] [stderr]  --> src/client.rs:3:15
[INFO] [stderr]   |
[INFO] [stderr] 3 | use std::io::{Read, Write};
[INFO] [stderr]   |               ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unreachable expression
[INFO] [stderr]   --> src/torrentfile.rs:85:9
[INFO] [stderr]    |
[INFO] [stderr] 84 |         return None;
[INFO] [stderr]    |         ----------- any code following this expression is unreachable
[INFO] [stderr] 85 |         unimplemented!()
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^ unreachable expression
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unreachable_code)]` on by default
[INFO] [stderr]    = note: this warning originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `num_bytes`
[INFO] [stderr]   --> src/handshake.rs:39:9
[INFO] [stderr]    |
[INFO] [stderr] 39 |     let num_bytes = reader.read_to_end(&mut handshake_buf)?;
[INFO] [stderr]    |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_num_bytes`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_variables)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `file`
[INFO] [stderr]   --> src/torrentfile.rs:39:9
[INFO] [stderr]    |
[INFO] [stderr] 39 |     let file = File::open(path);
[INFO] [stderr]    |         ^^^^ help: if this is intentional, prefix it with an underscore: `_file`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `bto`
[INFO] [stderr]   --> src/torrentfile.rs:40:9
[INFO] [stderr]    |
[INFO] [stderr] 40 |     let bto = BencodeTorrent {
[INFO] [stderr]    |         ^^^ help: if this is intentional, prefix it with an underscore: `_bto`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `peer_id`
[INFO] [stderr]   --> src/torrentfile.rs:32:13
[INFO] [stderr]    |
[INFO] [stderr] 32 |         let peer_id = [0u8; 20];
[INFO] [stderr]    |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_peer_id`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `path`
[INFO] [stderr]   --> src/torrentfile.rs:31:32
[INFO] [stderr]    |
[INFO] [stderr] 31 |     fn download_to_file(&self, path: String) {
[INFO] [stderr]    |                                ^^^^ help: if this is intentional, prefix it with an underscore: `_path`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `port`
[INFO] [stderr]   --> src/tracker.rs:17:56
[INFO] [stderr]    |
[INFO] [stderr] 17 |     pub fn build_tracker_url(&self, peer_id: [u8; 20], port: u16) -> Result<String, Box<dyn Error>> {
[INFO] [stderr]    |                                                        ^^^^ help: if this is intentional, prefix it with an underscore: `_port`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `resp`
[INFO] [stderr]   --> src/tracker.rs:39:13
[INFO] [stderr]    |
[INFO] [stderr] 39 |         let resp = reqwest::blocking::get(url.as_str())?;
[INFO] [stderr]    |             ^^^^ help: if this is intentional, prefix it with an underscore: `_resp`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `tracker_resp`
[INFO] [stderr]   --> src/tracker.rs:40:13
[INFO] [stderr]    |
[INFO] [stderr] 40 |         let tracker_resp = BencodeTrackerResp { interval: 0, peers: "".to_string() };
[INFO] [stderr]    |             ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tracker_resp`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `choked`
[INFO] [stderr]   --> src/client.rs:53:9
[INFO] [stderr]    |
[INFO] [stderr] 53 |     let choked = true;
[INFO] [stderr]    |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_choked`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `pw`
[INFO] [stderr]   --> src/p2p.rs:88:20
[INFO] [stderr]    |
[INFO] [stderr] 88 | fn check_integrity(pw: PieceWork, buf: Vec<u8>) {
[INFO] [stderr]    |                    ^^ help: if this is intentional, prefix it with an underscore: `_pw`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `buf`
[INFO] [stderr]   --> src/p2p.rs:88:35
[INFO] [stderr]    |
[INFO] [stderr] 88 | fn check_integrity(pw: PieceWork, buf: Vec<u8>) {
[INFO] [stderr]    |                                   ^^^ help: if this is intentional, prefix it with an underscore: `_buf`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `peer`
[INFO] [stderr]   --> src/p2p.rs:93:34
[INFO] [stderr]    |
[INFO] [stderr] 93 |     pub fn start_download_worker(peer: Peer) {
[INFO] [stderr]    |                                  ^^^^ help: if this is intentional, prefix it with an underscore: `_peer`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/message.rs:98:13
[INFO] [stderr]    |
[INFO] [stderr] 98 |         let mut buf: [u8; 4] = unsafe { transmute(length.to_be_bytes()) };
[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/peers.rs:11:18
[INFO] [stderr]    |
[INFO] [stderr] 11 | pub fn unmarshal(mut peers_bin: Vec<u8>) -> Option<Vec<Peer>> {
[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/client.rs:37:22
[INFO] [stderr]    |
[INFO] [stderr] 37 | pub fn recv_bitfield(mut conn: &TcpStream) -> Result<Bitfield, Box<dyn Error>> {
[INFO] [stderr]    |                      ----^^^^
[INFO] [stderr]    |                      |
[INFO] [stderr]    |                      help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unreachable expression
[INFO] [stderr]   --> src/torrentfile.rs:85:9
[INFO] [stderr]    |
[INFO] [stderr] 84 |         return None;
[INFO] [stderr]    |         ----------- any code following this expression is unreachable
[INFO] [stderr] 85 |         unimplemented!()
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^ unreachable expression
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unreachable_code)]` on by default
[INFO] [stderr]    = note: this warning originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/p2p.rs:65:27
[INFO] [stderr]    |
[INFO] [stderr] 65 | fn attempt_download_piece(mut client: Client, pw: PieceWork) -> Result<Vec<u8>, Box<dyn Error>> {
[INFO] [stderr]    |                           ----^^^^^^
[INFO] [stderr]    |                           |
[INFO] [stderr]    |                           help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused attribute
[INFO] [stderr]  --> src/bitfield.rs:1:1
[INFO] [stderr]   |
[INFO] [stderr] 1 | #[macro_use]
[INFO] [stderr]   | ^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_attributes)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: comparison is useless due to type limits
[INFO] [stderr]   --> src/bitfield.rs:26:12
[INFO] [stderr]    |
[INFO] [stderr] 26 |         if byte_index < 0 || byte_index >= self.len() {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_comparisons)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: comparison is useless due to type limits
[INFO] [stderr]   --> src/bitfield.rs:35:12
[INFO] [stderr]    |
[INFO] [stderr] 35 |         if byte_index < 0 || byte_index >= self.len() {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `Port` should have an upper case name
[INFO] [stderr]  --> src/torrentfile.rs:4:11
[INFO] [stderr]   |
[INFO] [stderr] 4 | pub const Port: u16 = 6881;
[INFO] [stderr]   |           ^^^^ help: convert the identifier to upper case: `PORT`
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(non_upper_case_globals)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused `std::result::Result` that must be used
[INFO] [stderr]   --> src/client.rs:25:5
[INFO] [stderr]    |
[INFO] [stderr] 25 |     conn.set_read_timeout(Option::from(Duration::from_secs(30)));
[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/client.rs:26:5
[INFO] [stderr]    |
[INFO] [stderr] 26 |     conn.set_write_timeout(Option::from(Duration::from_secs(30)));
[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/client.rs:38:5
[INFO] [stderr]    |
[INFO] [stderr] 38 |     conn.set_read_timeout(Option::from(Duration::from_secs(30)));
[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/client.rs:39:5
[INFO] [stderr]    |
[INFO] [stderr] 39 |     conn.set_write_timeout(Option::from(Duration::from_secs(30)));
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr] 
[INFO] [stderr] warning: constant `max_block_size` should have an upper case name
[INFO] [stderr]   --> src/p2p.rs:11:7
[INFO] [stderr]    |
[INFO] [stderr] 11 | const max_block_size: u32 = 16384;
[INFO] [stderr]    |       ^^^^^^^^^^^^^^ help: convert the identifier to upper case: `MAX_BLOCK_SIZE`
[INFO] [stderr] 
[INFO] [stderr] warning: constant `max_back_log` should have an upper case name
[INFO] [stderr]   --> src/p2p.rs:12:7
[INFO] [stderr]    |
[INFO] [stderr] 12 | const max_back_log: usize = 5;
[INFO] [stderr]    |       ^^^^^^^^^^^^ help: convert the identifier to upper case: `MAX_BACK_LOG`
[INFO] [stderr] 
[INFO] [stderr] warning: unused `std::result::Result` that must be used
[INFO] [stderr]   --> src/p2p.rs:68:5
[INFO] [stderr]    |
[INFO] [stderr] 68 |     client.conn.set_read_timeout(Option::from(Duration::from_secs(30)));
[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/p2p.rs:69:5
[INFO] [stderr]    |
[INFO] [stderr] 69 |     client.conn.set_write_timeout(Option::from(Duration::from_secs(30)));
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `num_bytes`
[INFO] [stderr]   --> src/handshake.rs:39:9
[INFO] [stderr]    |
[INFO] [stderr] 39 |     let num_bytes = reader.read_to_end(&mut handshake_buf)?;
[INFO] [stderr]    |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_num_bytes`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_variables)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `file`
[INFO] [stderr]   --> src/torrentfile.rs:39:9
[INFO] [stderr]    |
[INFO] [stderr] 39 |     let file = File::open(path);
[INFO] [stderr]    |         ^^^^ help: if this is intentional, prefix it with an underscore: `_file`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `bto`
[INFO] [stderr]   --> src/torrentfile.rs:40:9
[INFO] [stderr]    |
[INFO] [stderr] 40 |     let bto = BencodeTorrent {
[INFO] [stderr]    |         ^^^ help: if this is intentional, prefix it with an underscore: `_bto`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `peer_id`
[INFO] [stderr]   --> src/torrentfile.rs:32:13
[INFO] [stderr]    |
[INFO] [stderr] 32 |         let peer_id = [0u8; 20];
[INFO] [stderr]    |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_peer_id`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `path`
[INFO] [stderr]   --> src/torrentfile.rs:31:32
[INFO] [stderr]    |
[INFO] [stderr] 31 |     fn download_to_file(&self, path: String) {
[INFO] [stderr]    |                                ^^^^ help: if this is intentional, prefix it with an underscore: `_path`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `port`
[INFO] [stderr]   --> src/tracker.rs:17:56
[INFO] [stderr]    |
[INFO] [stderr] 17 |     pub fn build_tracker_url(&self, peer_id: [u8; 20], port: u16) -> Result<String, Box<dyn Error>> {
[INFO] [stderr]    |                                                        ^^^^ help: if this is intentional, prefix it with an underscore: `_port`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `resp`
[INFO] [stderr]   --> src/tracker.rs:39:13
[INFO] [stderr]    |
[INFO] [stderr] 39 |         let resp = reqwest::blocking::get(url.as_str())?;
[INFO] [stderr]    |             ^^^^ help: if this is intentional, prefix it with an underscore: `_resp`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `tracker_resp`
[INFO] [stderr]   --> src/tracker.rs:40:13
[INFO] [stderr]    |
[INFO] [stderr] 40 |         let tracker_resp = BencodeTrackerResp { interval: 0, peers: "".to_string() };
[INFO] [stderr]    |             ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tracker_resp`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `choked`
[INFO] [stderr]   --> src/client.rs:53:9
[INFO] [stderr]    |
[INFO] [stderr] 53 |     let choked = true;
[INFO] [stderr]    |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_choked`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `pw`
[INFO] [stderr]   --> src/p2p.rs:88:20
[INFO] [stderr]    |
[INFO] [stderr] 88 | fn check_integrity(pw: PieceWork, buf: Vec<u8>) {
[INFO] [stderr]    |                    ^^ help: if this is intentional, prefix it with an underscore: `_pw`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `buf`
[INFO] [stderr]   --> src/p2p.rs:88:35
[INFO] [stderr]    |
[INFO] [stderr] 88 | fn check_integrity(pw: PieceWork, buf: Vec<u8>) {
[INFO] [stderr]    |                                   ^^^ help: if this is intentional, prefix it with an underscore: `_buf`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `peer`
[INFO] [stderr]   --> src/p2p.rs:93:34
[INFO] [stderr]    |
[INFO] [stderr] 93 |     pub fn start_download_worker(peer: Peer) {
[INFO] [stderr]    |                                  ^^^^ help: if this is intentional, prefix it with an underscore: `_peer`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/message.rs:98:13
[INFO] [stderr]    |
[INFO] [stderr] 98 |         let mut buf: [u8; 4] = unsafe { transmute(length.to_be_bytes()) };
[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/peers.rs:11:18
[INFO] [stderr]    |
[INFO] [stderr] 11 | pub fn unmarshal(mut peers_bin: Vec<u8>) -> Option<Vec<Peer>> {
[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/client.rs:37:22
[INFO] [stderr]    |
[INFO] [stderr] 37 | pub fn recv_bitfield(mut conn: &TcpStream) -> Result<Bitfield, Box<dyn Error>> {
[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/p2p.rs:65:27
[INFO] [stderr]    |
[INFO] [stderr] 65 | fn attempt_download_piece(mut client: Client, pw: PieceWork) -> Result<Vec<u8>, Box<dyn Error>> {
[INFO] [stderr]    |                           ----^^^^^^
[INFO] [stderr]    |                           |
[INFO] [stderr]    |                           help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused attribute
[INFO] [stderr]  --> src/bitfield.rs:1:1
[INFO] [stderr]   |
[INFO] [stderr] 1 | #[macro_use]
[INFO] [stderr]   | ^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_attributes)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: comparison is useless due to type limits
[INFO] [stderr]   --> src/bitfield.rs:26:12
[INFO] [stderr]    |
[INFO] [stderr] 26 |         if byte_index < 0 || byte_index >= self.len() {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_comparisons)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: comparison is useless due to type limits
[INFO] [stderr]   --> src/bitfield.rs:35:12
[INFO] [stderr]    |
[INFO] [stderr] 35 |         if byte_index < 0 || byte_index >= self.len() {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `Port` should have an upper case name
[INFO] [stderr]  --> src/torrentfile.rs:4:11
[INFO] [stderr]   |
[INFO] [stderr] 4 | pub const Port: u16 = 6881;
[INFO] [stderr]   |           ^^^^ help: convert the identifier to upper case: `PORT`
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(non_upper_case_globals)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused `std::result::Result` that must be used
[INFO] [stderr]   --> src/client.rs:25:5
[INFO] [stderr]    |
[INFO] [stderr] 25 |     conn.set_read_timeout(Option::from(Duration::from_secs(30)));
[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/client.rs:26:5
[INFO] [stderr]    |
[INFO] [stderr] 26 |     conn.set_write_timeout(Option::from(Duration::from_secs(30)));
[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/client.rs:38:5
[INFO] [stderr]    |
[INFO] [stderr] 38 |     conn.set_read_timeout(Option::from(Duration::from_secs(30)));
[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/client.rs:39:5
[INFO] [stderr]    |
[INFO] [stderr] 39 |     conn.set_write_timeout(Option::from(Duration::from_secs(30)));
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr] 
[INFO] [stderr] warning: constant `max_block_size` should have an upper case name
[INFO] [stderr]   --> src/p2p.rs:11:7
[INFO] [stderr]    |
[INFO] [stderr] 11 | const max_block_size: u32 = 16384;
[INFO] [stderr]    |       ^^^^^^^^^^^^^^ help: convert the identifier to upper case: `MAX_BLOCK_SIZE`
[INFO] [stderr] 
[INFO] [stderr] warning: constant `max_back_log` should have an upper case name
[INFO] [stderr]   --> src/p2p.rs:12:7
[INFO] [stderr]    |
[INFO] [stderr] 12 | const max_back_log: usize = 5;
[INFO] [stderr]    |       ^^^^^^^^^^^^ help: convert the identifier to upper case: `MAX_BACK_LOG`
[INFO] [stderr] 
[INFO] [stderr] warning: unused `std::result::Result` that must be used
[INFO] [stderr]   --> src/p2p.rs:68:5
[INFO] [stderr]    |
[INFO] [stderr] 68 |     client.conn.set_read_timeout(Option::from(Duration::from_secs(30)));
[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/p2p.rs:69:5
[INFO] [stderr]    |
[INFO] [stderr] 69 |     client.conn.set_write_timeout(Option::from(Duration::from_secs(30)));
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr] 
[INFO] [stderr] error[E0252]: the name `TcpListener` is defined multiple times
[INFO] [stderr]   --> tests/client_test.rs:10:5
[INFO] [stderr]    |
[INFO] [stderr] 4  | use std::net::{SocketAddr, TcpStream, TcpListener};
[INFO] [stderr]    |                                       ----------- previous import of the type `TcpListener` here
[INFO] [stderr] ...
[INFO] [stderr] 10 | use async_std::net::TcpListener;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^ `TcpListener` reimported here
[INFO] [stderr]    |
[INFO] [stderr]    = note: `TcpListener` must be defined only once in the type namespace of this module
[INFO] [stderr] help: you can use `as` to change the binding name of the import
[INFO] [stderr]    |
[INFO] [stderr] 10 | use async_std::net::TcpListener as OtherTcpListener;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::error::Error`
[INFO] [stderr]  --> tests/client_test.rs:3:5
[INFO] [stderr]   |
[INFO] [stderr] 3 | use std::error::Error;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `SocketAddr`, `TcpListener`, `TcpStream`
[INFO] [stderr]  --> tests/client_test.rs:4:16
[INFO] [stderr]   |
[INFO] [stderr] 4 | use std::net::{SocketAddr, TcpStream, TcpListener};
[INFO] [stderr]   |                ^^^^^^^^^^  ^^^^^^^^^  ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Future`, `task`
[INFO] [stderr]  --> tests/client_test.rs:6:15
[INFO] [stderr]   |
[INFO] [stderr] 6 | use futures::{task, Future};
[INFO] [stderr]   |               ^^^^  ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `async_std::net::TcpListener`
[INFO] [stderr]   --> tests/client_test.rs:10:5
[INFO] [stderr]    |
[INFO] [stderr] 10 | use async_std::net::TcpListener;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `n`
[INFO] [stderr]   --> tests/message_test.rs:68:16
[INFO] [stderr]    |
[INFO] [stderr] 68 |             Ok(n) => {
[INFO] [stderr]    |                ^ help: if this is intentional, prefix it with an underscore: `_n`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_variables)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `n`
[INFO] [stderr]   --> tests/message_test.rs:87:16
[INFO] [stderr]    |
[INFO] [stderr] 87 |             Ok(n) => {
[INFO] [stderr]    |                ^ help: if this is intentional, prefix it with an underscore: `_n`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `n`
[INFO] [stderr]    --> tests/message_test.rs:107:16
[INFO] [stderr]     |
[INFO] [stderr] 107 |             Ok(n) => {
[INFO] [stderr]     |                ^ help: if this is intentional, prefix it with an underscore: `_n`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `n`
[INFO] [stderr]    --> tests/message_test.rs:127:16
[INFO] [stderr]     |
[INFO] [stderr] 127 |             Ok(n) => {
[INFO] [stderr]     |                ^ help: if this is intentional, prefix it with an underscore: `_n`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `n`
[INFO] [stderr]    --> tests/message_test.rs:147:16
[INFO] [stderr]     |
[INFO] [stderr] 147 |             Ok(n) => {
[INFO] [stderr]     |                ^ help: if this is intentional, prefix it with an underscore: `_n`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `output`
[INFO] [stderr]    --> tests/message_test.rs:162:13
[INFO] [stderr]     |
[INFO] [stderr] 162 |         let output = 4u32;
[INFO] [stderr]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_output`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `output`
[INFO] [stderr]    --> tests/message_test.rs:177:13
[INFO] [stderr]     |
[INFO] [stderr] 177 |         let output = 4u32;
[INFO] [stderr]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_output`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `output`
[INFO] [stderr]    --> tests/message_test.rs:192:13
[INFO] [stderr]     |
[INFO] [stderr] 192 |         let output = 4u32;
[INFO] [stderr]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_output`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `output`
[INFO] [stderr]    --> tests/message_test.rs:207:13
[INFO] [stderr]     |
[INFO] [stderr] 207 |         let output = 4u32;
[INFO] [stderr]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_output`
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `url::Url`
[INFO] [stderr]  --> tests/tracker_tests.rs:5:9
[INFO] [stderr]   |
[INFO] [stderr] 5 |     use url::Url;
[INFO] [stderr]   |         ^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stderr] 
[INFO] [stderr] error: aborting due to previous error
[INFO] [stderr] 
[INFO] [stderr] For more information about this error, try `rustc --explain E0252`.
[INFO] [stderr] error: could not compile `torrent_client`.
[INFO] [stderr] 
[INFO] [stderr] To learn more, run the command again with --verbose.
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stderr] error: build failed
[INFO] running `"docker" "inspect" "c26b3a7c586b9827fc50c1cc8a0cbef3431c31e39d352419ae5127bcdc512c19"`
[INFO] running `"docker" "rm" "-f" "c26b3a7c586b9827fc50c1cc8a0cbef3431c31e39d352419ae5127bcdc512c19"`
[INFO] [stdout] c26b3a7c586b9827fc50c1cc8a0cbef3431c31e39d352419ae5127bcdc512c19
