[INFO] updating cached repository https://github.com/itsuy/rust-torrent [INFO] running `Command { std: "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", kill_on_drop: false }` [INFO] [stderr] From https://github.com/itsuy/rust-torrent [INFO] [stderr] 53253d8..cca1687 master -> master [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] cca1687e1887fc0ffdfee8774140c6cfb977e56c [INFO] checking itsuy/rust-torrent against try#6024cfef3a82f9a7688f07054f1650081bad3af5 for pr-74130 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fitsuy%2Frust-torrent" "/workspace/builds/worker-1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-1/source'... [INFO] [stderr] done. [INFO] validating manifest of git repo https://github.com/itsuy/rust-torrent on toolchain 6024cfef3a82f9a7688f07054f1650081bad3af5 [INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+6024cfef3a82f9a7688f07054f1650081bad3af5" "read-manifest" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] started tweaking git repo https://github.com/itsuy/rust-torrent [INFO] finished tweaking git repo https://github.com/itsuy/rust-torrent [INFO] tweaked toml for git repo https://github.com/itsuy/rust-torrent written to /workspace/builds/worker-1/source/Cargo.toml [INFO] crate git repo https://github.com/itsuy/rust-torrent already has a lockfile, it will not be regenerated [INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+6024cfef3a82f9a7688f07054f1650081bad3af5" "fetch" "--locked" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1/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_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--network" "none" "rustops/crates-build-env@sha256:819119df93c0f5eca3f29186f14981ef29945a311854d7222af07488600a2584" "/opt/rustwide/cargo-home/bin/cargo" "+6024cfef3a82f9a7688f07054f1650081bad3af5" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. [INFO] [stdout] 72550d593bbca060f7eecf73815eb71bd34f521c1b61fb13e928f818374984df [INFO] running `Command { std: "docker" "start" "-a" "72550d593bbca060f7eecf73815eb71bd34f521c1b61fb13e928f818374984df", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "72550d593bbca060f7eecf73815eb71bd34f521c1b61fb13e928f818374984df", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "72550d593bbca060f7eecf73815eb71bd34f521c1b61fb13e928f818374984df", kill_on_drop: false }` [INFO] [stdout] 72550d593bbca060f7eecf73815eb71bd34f521c1b61fb13e928f818374984df [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1/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@sha256:819119df93c0f5eca3f29186f14981ef29945a311854d7222af07488600a2584" "/opt/rustwide/cargo-home/bin/cargo" "+6024cfef3a82f9a7688f07054f1650081bad3af5" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 0593f715024bc1edcb5a6a891a25c1f6b5dd0fae42a33360b5413c38ceb140d2 [INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. [INFO] running `Command { std: "docker" "start" "-a" "0593f715024bc1edcb5a6a891a25c1f6b5dd0fae42a33360b5413c38ceb140d2", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.71 [INFO] [stderr] Compiling version_check v0.9.2 [INFO] [stderr] Compiling proc-macro2 v1.0.18 [INFO] [stderr] Compiling unicode-xid v0.2.0 [INFO] [stderr] Checking cfg-if v0.1.10 [INFO] [stderr] Compiling autocfg v1.0.0 [INFO] [stderr] Checking lazy_static v1.4.0 [INFO] [stderr] Checking itoa v0.4.6 [INFO] [stderr] Compiling cc v1.0.54 [INFO] [stderr] Compiling pkg-config v0.3.17 [INFO] [stderr] Checking slab v0.4.2 [INFO] [stderr] Checking bytes v0.5.4 [INFO] [stderr] Checking futures-core v0.3.5 [INFO] [stderr] Compiling bitflags v1.2.1 [INFO] [stderr] Checking pin-project-lite v0.1.4 [INFO] [stderr] Checking tinyvec v0.3.3 [INFO] [stderr] Checking foreign-types-shared v0.1.1 [INFO] [stderr] Checking matches v0.1.8 [INFO] [stderr] Compiling getrandom v0.1.14 [INFO] [stderr] Compiling openssl v0.10.29 [INFO] [stderr] Compiling httparse v1.3.4 [INFO] [stderr] Checking pin-utils v0.1.0 [INFO] [stderr] Checking futures-sink v0.3.5 [INFO] [stderr] Compiling ryu v1.0.5 [INFO] [stderr] Compiling native-tls v0.2.4 [INFO] [stderr] Checking openssl-probe v0.1.2 [INFO] [stderr] Checking try-lock v0.2.2 [INFO] [stderr] Checking percent-encoding v2.1.0 [INFO] [stderr] Compiling serde_json v1.0.55 [INFO] [stderr] Compiling byteorder v1.3.4 [INFO] [stderr] Compiling encoding_rs v0.8.23 [INFO] [stderr] Checking dtoa v0.4.6 [INFO] [stderr] Checking tower-service v0.3.0 [INFO] [stderr] Checking ppv-lite86 v0.2.8 [INFO] [stderr] Checking mime v0.3.16 [INFO] [stderr] Checking regex-syntax v0.6.18 [INFO] [stderr] Checking difference v2.0.0 [INFO] [stderr] Checking rustc-serialize v0.3.24 [INFO] [stderr] Checking sha1 v0.6.0 [INFO] [stderr] Checking hex v0.4.2 [INFO] [stderr] Checking bencodex v0.1.3 [INFO] [stderr] Checking thread_local v1.0.1 [INFO] [stderr] Checking foreign-types v0.3.2 [INFO] [stderr] Checking unicode-bidi v0.3.4 [INFO] [stderr] Checking futures-channel v0.3.5 [INFO] [stderr] Checking unicode-normalization v0.1.13 [INFO] [stderr] Checking http v0.2.1 [INFO] [stderr] Checking log v0.4.8 [INFO] [stderr] Compiling unicase v2.6.0 [INFO] [stderr] Compiling proc-macro-error-attr v1.0.3 [INFO] [stderr] Compiling standback v0.2.9 [INFO] [stderr] Compiling proc-macro-error v1.0.3 [INFO] [stderr] Compiling time v0.2.16 [INFO] [stderr] Compiling indexmap v1.4.0 [INFO] [stderr] Compiling num-traits v0.2.12 [INFO] [stderr] Checking aho-corasick v0.7.13 [INFO] [stderr] Checking want v0.3.0 [INFO] [stderr] Compiling quote v1.0.2 [INFO] [stderr] Compiling syn v1.0.33 [INFO] [stderr] Compiling mime_guess v2.0.3 [INFO] [stderr] Checking net2 v0.2.33 [INFO] [stderr] Checking iovec v0.1.4 [INFO] [stderr] Checking signal-hook-registry v1.2.0 [INFO] [stderr] Checking num_cpus v1.12.0 [INFO] [stderr] Checking time v0.1.42 [INFO] [stderr] Checking socket2 v0.3.11 [INFO] [stderr] Checking atty v0.2.14 [INFO] [stderr] Checking idna v0.2.0 [INFO] [stderr] Compiling openssl-sys v0.9.58 [INFO] [stderr] Checking rand_core v0.5.1 [INFO] [stderr] Checking mio v0.6.21 [INFO] [stderr] Checking colored v1.9.3 [INFO] [stderr] Checking rand_chacha v0.2.2 [INFO] [stderr] Checking rand v0.7.3 [INFO] [stderr] Checking mio-uds v0.6.7 [INFO] [stderr] Checking url v2.1.1 [INFO] [stderr] Checking num-traits v0.1.43 [INFO] [stderr] Checking http-body v0.3.1 [INFO] [stderr] Checking serde_urlencoded v0.6.1 [INFO] [stderr] Checking regex v1.3.9 [INFO] [stderr] Checking bencode v0.1.16 [INFO] [stderr] Compiling syn-mid v0.5.0 [INFO] [stderr] Compiling tokio-macros v0.2.4 [INFO] [stderr] Compiling pin-project-internal v0.4.22 [INFO] [stderr] Compiling time-macros-impl v0.1.1 [INFO] [stderr] Checking time-macros v0.1.0 [INFO] [stderr] Checking tokio v0.2.11 [INFO] [stderr] Compiling extend v0.1.2 [INFO] [stderr] Checking pin-project v0.4.22 [INFO] [stderr] Checking futures-util v0.3.5 [INFO] [stderr] Checking assert-json-diff v1.0.3 [INFO] [stderr] Checking mockito v0.26.0 [INFO] [stderr] Checking tokio-util v0.3.1 [INFO] [stderr] Checking tokio-tls v0.3.1 [INFO] [stderr] Checking h2 v0.2.5 [INFO] [stderr] Checking hyper v0.13.6 [INFO] [stderr] Checking hyper-tls v0.4.1 [INFO] [stderr] Checking reqwest v0.10.6 [INFO] [stderr] Checking rust-torrent v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `new_handshake` [INFO] [stdout] --> src/client.rs:2:24 [INFO] [stdout] | [INFO] [stdout] 2 | use crate::handshake::{new_handshake, read_handshake, serialize_handshake, Handshake}; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BigEndian`, `ReadBytesExt` [INFO] [stdout] --> src/client.rs:5:17 [INFO] [stdout] | [INFO] [stdout] 5 | use byteorder::{BigEndian, ReadBytesExt}; [INFO] [stdout] | ^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fmt` [INFO] [stdout] --> src/client.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | use std::fmt; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::io::prelude::*` [INFO] [stdout] --> src/client.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | use std::io::prelude::*; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Ipv4Addr`, `SocketAddrV4` [INFO] [stdout] --> src/client.rs:9:16 [INFO] [stdout] | [INFO] [stdout] 9 | use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4, TcpStream}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::sync::mpsc` [INFO] [stdout] --> src/client.rs:10:5 [INFO] [stdout] | [INFO] [stdout] 10 | use std::sync::mpsc; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::thread` [INFO] [stdout] --> src/client.rs:11:5 [INFO] [stdout] | [INFO] [stdout] 11 | use std::thread; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fmt` [INFO] [stdout] --> src/handshake.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::fmt; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BufRead`, `BufReader`, `Cursor` [INFO] [stdout] --> src/handshake.rs:4:15 [INFO] [stdout] | [INFO] [stdout] 4 | use std::io::{BufRead, BufReader, Cursor, Error, ErrorKind, Read, Result}; [INFO] [stdout] | ^^^^^^^ ^^^^^^^^^ ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Ipv4Addr`, `SocketAddrV4`, `SocketAddr` [INFO] [stdout] --> src/handshake.rs:5:16 [INFO] [stdout] | [INFO] [stdout] 5 | use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4, TcpStream}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fmt` [INFO] [stdout] --> src/message.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use std::fmt; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::io::prelude::*` [INFO] [stdout] --> src/message.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::io::prelude::*; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BufRead`, `BufReader` [INFO] [stdout] --> src/message.rs:4:15 [INFO] [stdout] | [INFO] [stdout] 4 | use std::io::{BufRead, BufReader, Cursor, Error, ErrorKind, Read, Result}; [INFO] [stdout] | ^^^^^^^ ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `messageID` should have an upper camel case name [INFO] [stdout] --> src/message.rs:8:6 [INFO] [stdout] | [INFO] [stdout] 8 | type messageID = u8; [INFO] [stdout] | ^^^^^^^^^ help: convert the identifier to upper camel case: `MessageId` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_camel_case_types)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BigEndian`, `ReadBytesExt` [INFO] [stdout] --> src/p2p.rs:6:17 [INFO] [stdout] | [INFO] [stdout] 6 | use byteorder::{BigEndian, ReadBytesExt}; [INFO] [stdout] | ^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Digest`, `Sha1` [INFO] [stdout] --> src/p2p.rs:7:12 [INFO] [stdout] | [INFO] [stdout] 7 | use sha1::{Digest, Sha1}; [INFO] [stdout] | ^^^^^^ ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fmt` [INFO] [stdout] --> src/peers.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use std::fmt; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BufRead`, `BufReader`, `Read` [INFO] [stdout] --> src/peers.rs:3:15 [INFO] [stdout] | [INFO] [stdout] 3 | use std::io::{BufRead, BufReader, Cursor, Error, ErrorKind, Read, Result}; [INFO] [stdout] | ^^^^^^^ ^^^^^^^^^ ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `SocketAddr` [INFO] [stdout] --> src/peers.rs:4:26 [INFO] [stdout] | [INFO] [stdout] 4 | use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4}; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::str` [INFO] [stdout] --> src/peers.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use std::str; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::tracker::*` [INFO] [stdout] --> src/torrentfile.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::tracker::*; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BigEndian`, `ReadBytesExt` [INFO] [stdout] --> src/torrentfile.rs:7:17 [INFO] [stdout] | [INFO] [stdout] 7 | use byteorder::{BigEndian, ReadBytesExt}; [INFO] [stdout] | ^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `rand::*` [INFO] [stdout] --> src/torrentfile.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 8 | use rand::*; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fmt` [INFO] [stdout] --> src/torrentfile.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | use std::fmt; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BufRead`, `BufReader`, `Cursor` [INFO] [stdout] --> src/torrentfile.rs:11:15 [INFO] [stdout] | [INFO] [stdout] 11 | use std::io::{BufRead, BufReader, Cursor, Error, ErrorKind, Read, Write}; [INFO] [stdout] | ^^^^^^^ ^^^^^^^^^ ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `AsciiSet`, `CONTROLS`, `percent_encode_byte` [INFO] [stdout] --> src/tracker.rs:8:24 [INFO] [stdout] | [INFO] [stdout] 8 | use percent_encoding::{percent_encode_byte, AsciiSet, CONTROLS}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^ ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ClientBuilder`, `Client` [INFO] [stdout] --> src/tracker.rs:9:15 [INFO] [stdout] | [INFO] [stdout] 9 | use reqwest::{Client, ClientBuilder}; [INFO] [stdout] | ^^^^^^ ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `ErrorKind` [INFO] [stdout] --> src/tracker.rs:12:22 [INFO] [stdout] | [INFO] [stdout] 12 | use std::io::{Error, ErrorKind}; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::str` [INFO] [stdout] --> src/tracker.rs:13:5 [INFO] [stdout] | [INFO] [stdout] 13 | use std::str; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::iter::*` [INFO] [stdout] --> src/tracker.rs:14:5 [INFO] [stdout] | [INFO] [stdout] 14 | use std::iter::*; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::time::Duration` [INFO] [stdout] --> src/tracker.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 15 | use std::time::Duration; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ParseError`, `form_urlencoded::byte_serialize` [INFO] [stdout] --> src/tracker.rs:16:11 [INFO] [stdout] | [INFO] [stdout] 16 | use url::{form_urlencoded::byte_serialize, ParseError, Url}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `bencode::streaming::BencodeEvent` [INFO] [stdout] --> src/tracker.rs:17:5 [INFO] [stdout] | [INFO] [stdout] 17 | use bencode::streaming::BencodeEvent; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `bencode::streaming::StreamingParser` [INFO] [stdout] --> src/tracker.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | use bencode::streaming::StreamingParser; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `encode` [INFO] [stdout] --> src/tracker.rs:21:15 [INFO] [stdout] | [INFO] [stdout] 21 | use bencode::{encode, Decoder}; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Encodable` [INFO] [stdout] --> src/tracker.rs:22:23 [INFO] [stdout] | [INFO] [stdout] 22 | use rustc_serialize::{Encodable, Decodable}; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Ipv4Addr`, `SocketAddrV4`, `SocketAddr` [INFO] [stdout] --> src/tracker.rs:24:16 [INFO] [stdout] | [INFO] [stdout] 24 | use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `new_handshake` [INFO] [stdout] --> src/client.rs:2:24 [INFO] [stdout] | [INFO] [stdout] 2 | use crate::handshake::{new_handshake, read_handshake, serialize_handshake, Handshake}; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BigEndian`, `ReadBytesExt` [INFO] [stdout] --> src/client.rs:5:17 [INFO] [stdout] | [INFO] [stdout] 5 | use byteorder::{BigEndian, ReadBytesExt}; [INFO] [stdout] | ^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fmt` [INFO] [stdout] --> src/client.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | use std::fmt; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Ipv4Addr`, `SocketAddrV4` [INFO] [stdout] --> src/client.rs:9:16 [INFO] [stdout] | [INFO] [stdout] 9 | use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4, TcpStream}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::sync::mpsc` [INFO] [stdout] --> src/client.rs:10:5 [INFO] [stdout] | [INFO] [stdout] 10 | use std::sync::mpsc; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::handshake::new_handshake_with_input` [INFO] [stdout] --> src/client.rs:152:9 [INFO] [stdout] | [INFO] [stdout] 152 | use crate::handshake::new_handshake_with_input; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::str::from_utf8` [INFO] [stdout] --> src/client.rs:154:9 [INFO] [stdout] | [INFO] [stdout] 154 | use std::str::from_utf8; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Receiver`, `Sender`, `channel` [INFO] [stdout] --> src/client.rs:155:27 [INFO] [stdout] | [INFO] [stdout] 155 | use std::sync::mpsc::{channel, Receiver, Sender}; [INFO] [stdout] | ^^^^^^^ ^^^^^^^^ ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fmt` [INFO] [stdout] --> src/handshake.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::fmt; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BufRead`, `BufReader`, `Cursor` [INFO] [stdout] --> src/handshake.rs:4:15 [INFO] [stdout] | [INFO] [stdout] 4 | use std::io::{BufRead, BufReader, Cursor, Error, ErrorKind, Read, Result}; [INFO] [stdout] | ^^^^^^^ ^^^^^^^^^ ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Ipv4Addr`, `SocketAddrV4`, `SocketAddr` [INFO] [stdout] --> src/handshake.rs:5:16 [INFO] [stdout] | [INFO] [stdout] 5 | use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4, TcpStream}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fmt` [INFO] [stdout] --> src/message.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use std::fmt; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::io::prelude::*` [INFO] [stdout] --> src/message.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::io::prelude::*; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BufRead`, `BufReader` [INFO] [stdout] --> src/message.rs:4:15 [INFO] [stdout] | [INFO] [stdout] 4 | use std::io::{BufRead, BufReader, Cursor, Error, ErrorKind, Read, Result}; [INFO] [stdout] | ^^^^^^^ ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `messageID` should have an upper camel case name [INFO] [stdout] --> src/message.rs:8:6 [INFO] [stdout] | [INFO] [stdout] 8 | type messageID = u8; [INFO] [stdout] | ^^^^^^^^^ help: convert the identifier to upper camel case: `MessageId` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_camel_case_types)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BigEndian`, `ReadBytesExt` [INFO] [stdout] --> src/p2p.rs:6:17 [INFO] [stdout] | [INFO] [stdout] 6 | use byteorder::{BigEndian, ReadBytesExt}; [INFO] [stdout] | ^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Digest`, `Sha1` [INFO] [stdout] --> src/p2p.rs:7:12 [INFO] [stdout] | [INFO] [stdout] 7 | use sha1::{Digest, Sha1}; [INFO] [stdout] | ^^^^^^ ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fmt` [INFO] [stdout] --> src/peers.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use std::fmt; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BufRead`, `BufReader`, `Read` [INFO] [stdout] --> src/peers.rs:3:15 [INFO] [stdout] | [INFO] [stdout] 3 | use std::io::{BufRead, BufReader, Cursor, Error, ErrorKind, Read, Result}; [INFO] [stdout] | ^^^^^^^ ^^^^^^^^^ ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `SocketAddr` [INFO] [stdout] --> src/peers.rs:4:26 [INFO] [stdout] | [INFO] [stdout] 4 | use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4}; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::str` [INFO] [stdout] --> src/peers.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use std::str; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::tracker::*` [INFO] [stdout] --> src/torrentfile.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::tracker::*; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BigEndian`, `ReadBytesExt` [INFO] [stdout] --> src/torrentfile.rs:7:17 [INFO] [stdout] | [INFO] [stdout] 7 | use byteorder::{BigEndian, ReadBytesExt}; [INFO] [stdout] | ^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `rand::*` [INFO] [stdout] --> src/torrentfile.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 8 | use rand::*; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fmt` [INFO] [stdout] --> src/torrentfile.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | use std::fmt; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BufRead`, `BufReader`, `Cursor` [INFO] [stdout] --> src/torrentfile.rs:11:15 [INFO] [stdout] | [INFO] [stdout] 11 | use std::io::{BufRead, BufReader, Cursor, Error, ErrorKind, Read, Write}; [INFO] [stdout] | ^^^^^^^ ^^^^^^^^^ ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `AsciiSet`, `CONTROLS`, `percent_encode_byte` [INFO] [stdout] --> src/tracker.rs:8:24 [INFO] [stdout] | [INFO] [stdout] 8 | use percent_encoding::{percent_encode_byte, AsciiSet, CONTROLS}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^ ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ClientBuilder`, `Client` [INFO] [stdout] --> src/tracker.rs:9:15 [INFO] [stdout] | [INFO] [stdout] 9 | use reqwest::{Client, ClientBuilder}; [INFO] [stdout] | ^^^^^^ ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `ErrorKind` [INFO] [stdout] --> src/tracker.rs:12:22 [INFO] [stdout] | [INFO] [stdout] 12 | use std::io::{Error, ErrorKind}; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::str` [INFO] [stdout] --> src/tracker.rs:13:5 [INFO] [stdout] | [INFO] [stdout] 13 | use std::str; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::iter::*` [INFO] [stdout] --> src/tracker.rs:14:5 [INFO] [stdout] | [INFO] [stdout] 14 | use std::iter::*; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::time::Duration` [INFO] [stdout] --> src/tracker.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 15 | use std::time::Duration; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ParseError`, `form_urlencoded::byte_serialize` [INFO] [stdout] --> src/tracker.rs:16:11 [INFO] [stdout] | [INFO] [stdout] 16 | use url::{form_urlencoded::byte_serialize, ParseError, Url}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `bencode::streaming::BencodeEvent` [INFO] [stdout] --> src/tracker.rs:17:5 [INFO] [stdout] | [INFO] [stdout] 17 | use bencode::streaming::BencodeEvent; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `bencode::streaming::StreamingParser` [INFO] [stdout] --> src/tracker.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | use bencode::streaming::StreamingParser; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `encode` [INFO] [stdout] --> src/tracker.rs:21:15 [INFO] [stdout] | [INFO] [stdout] 21 | use bencode::{encode, Decoder}; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Encodable` [INFO] [stdout] --> src/tracker.rs:22:23 [INFO] [stdout] | [INFO] [stdout] 22 | use rustc_serialize::{Encodable, Decodable}; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `SocketAddrV4`, `SocketAddr` [INFO] [stdout] --> src/tracker.rs:24:26 [INFO] [stdout] | [INFO] [stdout] 24 | use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4}; [INFO] [stdout] | ^^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::net::TcpStream` [INFO] [stdout] --> src/tracker.rs:129:9 [INFO] [stdout] | [INFO] [stdout] 129 | use std::net::TcpStream; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Read`, `Write` [INFO] [stdout] --> src/tracker.rs:130:19 [INFO] [stdout] | [INFO] [stdout] 130 | use std::io::{Read, Write}; [INFO] [stdout] | ^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `server_address` [INFO] [stdout] --> src/tracker.rs:131:25 [INFO] [stdout] | [INFO] [stdout] 131 | use mockito::{mock, server_address, Matcher}; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `hs` [INFO] [stdout] --> src/client.rs:129:16 [INFO] [stdout] | [INFO] [stdout] 129 | Ok(hs) => match receive_bitfield(&mut s) { [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_hs` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `input_pstr` is never read [INFO] [stdout] --> src/handshake.rs:72:21 [INFO] [stdout] | [INFO] [stdout] 72 | let mut input_pstr = "hello"; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_assignments)]` on by default [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `index` [INFO] [stdout] --> src/p2p.rs:60:25 [INFO] [stdout] | [INFO] [stdout] 60 | let index = parse_have(&msg).unwrap(); [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_index` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `n` [INFO] [stdout] --> src/p2p.rs:70:25 [INFO] [stdout] | [INFO] [stdout] 70 | let n = parse_piece(self.index, self.buf.as_mut(), &msg).unwrap(); [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_n` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `err` [INFO] [stdout] --> src/p2p.rs:156:21 [INFO] [stdout] | [INFO] [stdout] 156 | Err(err) => return, [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_err` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `err` [INFO] [stdout] --> src/p2p.rs:166:21 [INFO] [stdout] | [INFO] [stdout] 166 | Err(err) => { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_err` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `e` [INFO] [stdout] --> src/p2p.rs:176:21 [INFO] [stdout] | [INFO] [stdout] 176 | Err(e) => { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_e` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `begin` [INFO] [stdout] --> src/p2p.rs:235:18 [INFO] [stdout] | [INFO] [stdout] 235 | let (begin, end) = self.calculate_bounds_for_piece(res.index); [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_begin` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `end` [INFO] [stdout] --> src/p2p.rs:235:25 [INFO] [stdout] | [INFO] [stdout] 235 | let (begin, end) = self.calculate_bounds_for_piece(res.index); [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_end` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `offset` is never read [INFO] [stdout] --> src/peers.rs:34:13 [INFO] [stdout] | [INFO] [stdout] 34 | let mut offset = 0; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `port_cursor` is never read [INFO] [stdout] --> src/peers.rs:36:13 [INFO] [stdout] | [INFO] [stdout] 36 | let mut port_cursor = Cursor::new(&port_vec); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `announce` is never read [INFO] [stdout] --> src/torrentfile.rs:42:9 [INFO] [stdout] | [INFO] [stdout] 42 | let mut announce = String::new(); [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `pieces` is never read [INFO] [stdout] --> src/torrentfile.rs:43:9 [INFO] [stdout] | [INFO] [stdout] 43 | let mut pieces = String::new(); [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `piecelength` is never read [INFO] [stdout] --> src/torrentfile.rs:44:9 [INFO] [stdout] | [INFO] [stdout] 44 | let mut piecelength = 0; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `length` is never read [INFO] [stdout] --> src/torrentfile.rs:45:9 [INFO] [stdout] | [INFO] [stdout] 45 | let mut length = 0; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `name` is never read [INFO] [stdout] --> src/torrentfile.rs:46:9 [INFO] [stdout] | [INFO] [stdout] 46 | let mut name = String::new(); [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/client.rs:72:13 [INFO] [stdout] | [INFO] [stdout] 72 | let mut msg = format_have(index); [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/client.rs:84:17 [INFO] [stdout] | [INFO] [stdout] 84 | let mut id_error = Error::new(ErrorKind::InvalidData, "id Error"); [INFO] [stdout] | ----^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/client.rs:100:9 [INFO] [stdout] | [INFO] [stdout] 100 | let mut reader_error = Error::new(ErrorKind::InvalidData, "unexpected infohash"); [INFO] [stdout] | ----^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/client.rs:110:9 [INFO] [stdout] | [INFO] [stdout] 110 | let mut received = read_handshake(conn).unwrap(); [INFO] [stdout] | ----^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/p2p.rs:124:9 [INFO] [stdout] | [INFO] [stdout] 124 | let mut reader_error = Error::new(ErrorKind::InvalidData, "unexpected infohash"); [INFO] [stdout] | ----^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/p2p.rs:224:17 [INFO] [stdout] | [INFO] [stdout] 224 | let mut workQueueCopy = workQueue.clone(); [INFO] [stdout] | ----^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/p2p.rs:225:17 [INFO] [stdout] | [INFO] [stdout] 225 | let mut resultsCopy = results.0.clone(); [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/peers.rs:22:9 [INFO] [stdout] | [INFO] [stdout] 22 | let mut num_peers = peers_bin.len() / peer_size; [INFO] [stdout] | ----^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/peers.rs:23:9 [INFO] [stdout] | [INFO] [stdout] 23 | let mut peer_error = Error::new(ErrorKind::InvalidData, "Malformed Peers"); [INFO] [stdout] | ----^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/peers.rs:41:17 [INFO] [stdout] | [INFO] [stdout] 41 | let mut port_vc = &port_vec[0..2].to_vec(); [INFO] [stdout] | ----^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/torrentfile.rs:62:9 [INFO] [stdout] | [INFO] [stdout] 62 | let mut bi = BencodeInfo { [INFO] [stdout] | ----^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `peer` [INFO] [stdout] --> src/client.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | peer: Peer, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `info_hash` [INFO] [stdout] --> src/client.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 19 | info_hash: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `peer_id` [INFO] [stdout] --> src/client.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 20 | peer_id: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `send_not_interested` [INFO] [stdout] --> src/client.rs:53:19 [INFO] [stdout] | [INFO] [stdout] 53 | pub(crate) fn send_not_interested(&mut self) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `name` [INFO] [stdout] --> src/message.rs:159:4 [INFO] [stdout] | [INFO] [stdout] 159 | fn name(msg: &Message) -> String { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `string` [INFO] [stdout] --> src/message.rs:178:4 [INFO] [stdout] | [INFO] [stdout] 178 | fn string(msg: &Message) -> String { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static is never used: `DEFAULT_PORT` [INFO] [stdout] --> src/torrentfile.rs:13:1 [INFO] [stdout] | [INFO] [stdout] 13 | static DEFAULT_PORT: u16 = 6881; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `piecehashes` [INFO] [stdout] --> src/torrentfile.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | pub(crate) piecehashes: Vec>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `piecelength` [INFO] [stdout] --> src/torrentfile.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 19 | pub(crate) piecelength: u32, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `name` [INFO] [stdout] --> src/torrentfile.rs:21:5 [INFO] [stdout] | [INFO] [stdout] 21 | pub(crate) name: String, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `download_to_file` [INFO] [stdout] --> src/torrentfile.rs:133:8 [INFO] [stdout] | [INFO] [stdout] 133 | fn download_to_file(&mut self, path: String) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/p2p.rs:150:9 [INFO] [stdout] | [INFO] [stdout] 150 | c.lock().unwrap().send_unchoke(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_must_use)]` on by default [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/p2p.rs:151:9 [INFO] [stdout] | [INFO] [stdout] 151 | c.lock().unwrap().send_interested(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/p2p.rs:178:21 [INFO] [stdout] | [INFO] [stdout] 178 | workQueue.lock().unwrap().0.send(pw); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/p2p.rs:183:21 [INFO] [stdout] | [INFO] [stdout] 183 | / results.send(PieceResult { [INFO] [stdout] 184 | | index: pindex2, [INFO] [stdout] 185 | | buf: cbuf, [INFO] [stdout] 186 | | }); [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/p2p.rs:219:13 [INFO] [stdout] | [INFO] [stdout] 219 | workQueue.lock().unwrap().0.send(work); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/torrentfile.rs:49:5 [INFO] [stdout] | [INFO] [stdout] 49 | outfile.read_to_end(&mut buffer); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `hs` [INFO] [stdout] --> src/client.rs:129:16 [INFO] [stdout] | [INFO] [stdout] 129 | Ok(hs) => match receive_bitfield(&mut s) { [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_hs` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `input_pstr` is never read [INFO] [stdout] --> src/handshake.rs:72:21 [INFO] [stdout] | [INFO] [stdout] 72 | let mut input_pstr = "hello"; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_assignments)]` on by default [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `output_length` [INFO] [stdout] --> src/message.rs:228:13 [INFO] [stdout] | [INFO] [stdout] 228 | let output_length = 6; [INFO] [stdout] | ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_output_length` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `length_test` [INFO] [stdout] --> src/message.rs:229:13 [INFO] [stdout] | [INFO] [stdout] 229 | let length_test = parse_piece(input_index, &mut input_buffer, input_message); [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_length_test` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `index` [INFO] [stdout] --> src/p2p.rs:60:25 [INFO] [stdout] | [INFO] [stdout] 60 | let index = parse_have(&msg).unwrap(); [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_index` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `n` [INFO] [stdout] --> src/p2p.rs:70:25 [INFO] [stdout] | [INFO] [stdout] 70 | let n = parse_piece(self.index, self.buf.as_mut(), &msg).unwrap(); [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_n` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `err` [INFO] [stdout] --> src/p2p.rs:156:21 [INFO] [stdout] | [INFO] [stdout] 156 | Err(err) => return, [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_err` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `err` [INFO] [stdout] --> src/p2p.rs:166:21 [INFO] [stdout] | [INFO] [stdout] 166 | Err(err) => { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_err` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `e` [INFO] [stdout] --> src/p2p.rs:176:21 [INFO] [stdout] | [INFO] [stdout] 176 | Err(e) => { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_e` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `begin` [INFO] [stdout] --> src/p2p.rs:235:18 [INFO] [stdout] | [INFO] [stdout] 235 | let (begin, end) = self.calculate_bounds_for_piece(res.index); [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_begin` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `end` [INFO] [stdout] --> src/p2p.rs:235:25 [INFO] [stdout] | [INFO] [stdout] 235 | let (begin, end) = self.calculate_bounds_for_piece(res.index); [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_end` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `offset` is never read [INFO] [stdout] --> src/peers.rs:34:13 [INFO] [stdout] | [INFO] [stdout] 34 | let mut offset = 0; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `port_cursor` is never read [INFO] [stdout] --> src/peers.rs:36:13 [INFO] [stdout] | [INFO] [stdout] 36 | let mut port_cursor = Cursor::new(&port_vec); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `announce` is never read [INFO] [stdout] --> src/torrentfile.rs:42:9 [INFO] [stdout] | [INFO] [stdout] 42 | let mut announce = String::new(); [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `pieces` is never read [INFO] [stdout] --> src/torrentfile.rs:43:9 [INFO] [stdout] | [INFO] [stdout] 43 | let mut pieces = String::new(); [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `piecelength` is never read [INFO] [stdout] --> src/torrentfile.rs:44:9 [INFO] [stdout] | [INFO] [stdout] 44 | let mut piecelength = 0; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `length` is never read [INFO] [stdout] --> src/torrentfile.rs:45:9 [INFO] [stdout] | [INFO] [stdout] 45 | let mut length = 0; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `name` is never read [INFO] [stdout] --> src/torrentfile.rs:46:9 [INFO] [stdout] | [INFO] [stdout] 46 | let mut name = String::new(); [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `mock` [INFO] [stdout] --> src/tracker.rs:173:13 [INFO] [stdout] | [INFO] [stdout] 173 | let mock = mock("GET", Matcher::Any).with_body(response_bencode).create(); [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_mock` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 81 warnings emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/client.rs:72:13 [INFO] [stdout] | [INFO] [stdout] 72 | let mut msg = format_have(index); [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/client.rs:84:17 [INFO] [stdout] | [INFO] [stdout] 84 | let mut id_error = Error::new(ErrorKind::InvalidData, "id Error"); [INFO] [stdout] | ----^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/client.rs:100:9 [INFO] [stdout] | [INFO] [stdout] 100 | let mut reader_error = Error::new(ErrorKind::InvalidData, "unexpected infohash"); [INFO] [stdout] | ----^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/client.rs:110:9 [INFO] [stdout] | [INFO] [stdout] 110 | let mut received = read_handshake(conn).unwrap(); [INFO] [stdout] | ----^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/client.rs:170:21 [INFO] [stdout] | [INFO] [stdout] 170 | let mut expected_bf: [u8; 5] = [1, 2, 3, 4, 5]; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/client.rs:189:25 [INFO] [stdout] | [INFO] [stdout] 189 | let mut msg: [u8; 10] = [0x00, 0x00, 0x00, 0x06, 5, 1, 2, 3, 4, 5]; [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/handshake.rs:144:13 [INFO] [stdout] | [INFO] [stdout] 144 | let mut input_info_hash: [u8; 20] = [ [INFO] [stdout] | ----^^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/handshake.rs:147:13 [INFO] [stdout] | [INFO] [stdout] 147 | let mut input_peer_id: [u8; 20] = [ [INFO] [stdout] | ----^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/handshake.rs:162:13 [INFO] [stdout] | [INFO] [stdout] 162 | let mut input_info_hash: [u8; 20] = [ [INFO] [stdout] | ----^^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/handshake.rs:165:13 [INFO] [stdout] | [INFO] [stdout] 165 | let mut input_peer_id: [u8; 20] = [ [INFO] [stdout] | ----^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/handshake.rs:168:13 [INFO] [stdout] | [INFO] [stdout] 168 | let mut input_pstr = String::from("BitTorrent protocol, but cooler?"); [INFO] [stdout] | ----^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/p2p.rs:124:9 [INFO] [stdout] | [INFO] [stdout] 124 | let mut reader_error = Error::new(ErrorKind::InvalidData, "unexpected infohash"); [INFO] [stdout] | ----^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/p2p.rs:224:17 [INFO] [stdout] | [INFO] [stdout] 224 | let mut workQueueCopy = workQueue.clone(); [INFO] [stdout] | ----^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/p2p.rs:225:17 [INFO] [stdout] | [INFO] [stdout] 225 | let mut resultsCopy = results.0.clone(); [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/peers.rs:22:9 [INFO] [stdout] | [INFO] [stdout] 22 | let mut num_peers = peers_bin.len() / peer_size; [INFO] [stdout] | ----^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/peers.rs:23:9 [INFO] [stdout] | [INFO] [stdout] 23 | let mut peer_error = Error::new(ErrorKind::InvalidData, "Malformed Peers"); [INFO] [stdout] | ----^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/peers.rs:41:17 [INFO] [stdout] | [INFO] [stdout] 41 | let mut port_vc = &port_vec[0..2].to_vec(); [INFO] [stdout] | ----^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/torrentfile.rs:62:9 [INFO] [stdout] | [INFO] [stdout] 62 | let mut bi = BencodeInfo { [INFO] [stdout] | ----^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `peer` [INFO] [stdout] --> src/client.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | peer: Peer, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `info_hash` [INFO] [stdout] --> src/client.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 19 | info_hash: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `peer_id` [INFO] [stdout] --> src/client.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 20 | peer_id: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `send_not_interested` [INFO] [stdout] --> src/client.rs:53:19 [INFO] [stdout] | [INFO] [stdout] 53 | pub(crate) fn send_not_interested(&mut self) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static is never used: `DEFAULT_PORT` [INFO] [stdout] --> src/torrentfile.rs:13:1 [INFO] [stdout] | [INFO] [stdout] 13 | static DEFAULT_PORT: u16 = 6881; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `piecehashes` [INFO] [stdout] --> src/torrentfile.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | pub(crate) piecehashes: Vec>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `piecelength` [INFO] [stdout] --> src/torrentfile.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 19 | pub(crate) piecelength: u32, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `name` [INFO] [stdout] --> src/torrentfile.rs:21:5 [INFO] [stdout] | [INFO] [stdout] 21 | pub(crate) name: String, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `download_to_file` [INFO] [stdout] --> src/torrentfile.rs:133:8 [INFO] [stdout] | [INFO] [stdout] 133 | fn download_to_file(&mut self, path: String) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/client.rs:218:21 [INFO] [stdout] | [INFO] [stdout] 218 | dummy_client_thread.join(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_must_use)]` on by default [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/p2p.rs:150:9 [INFO] [stdout] | [INFO] [stdout] 150 | c.lock().unwrap().send_unchoke(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Digest`, `Sha1` [INFO] [stdout] --> src/main.rs:2:12 [INFO] [stdout] | [INFO] [stdout] 2 | use sha1::{Digest, Sha1}; [INFO] [stdout] | ^^^^^^ ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `new_handshake` [INFO] [stdout] --> src/client.rs:2:24 [INFO] [stdout] | [INFO] [stdout] 2 | use crate::handshake::{new_handshake, read_handshake, serialize_handshake, Handshake}; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/p2p.rs:151:9 [INFO] [stdout] | [INFO] [stdout] 151 | c.lock().unwrap().send_interested(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BigEndian`, `ReadBytesExt` [INFO] [stdout] --> src/client.rs:5:17 [INFO] [stdout] | [INFO] [stdout] 5 | use byteorder::{BigEndian, ReadBytesExt}; [INFO] [stdout] | ^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/p2p.rs:178:21 [INFO] [stdout] | [INFO] [stdout] 178 | workQueue.lock().unwrap().0.send(pw); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/p2p.rs:183:21 [INFO] [stdout] | [INFO] [stdout] 183 | / results.send(PieceResult { [INFO] [stdout] 184 | | index: pindex2, [INFO] [stdout] 185 | | buf: cbuf, [INFO] [stdout] 186 | | }); [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fmt` [INFO] [stdout] --> src/client.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | use std::fmt; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/p2p.rs:219:13 [INFO] [stdout] | [INFO] [stdout] 219 | workQueue.lock().unwrap().0.send(work); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::io::prelude::*` [INFO] [stdout] --> src/client.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | use std::io::prelude::*; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Ipv4Addr`, `SocketAddrV4` [INFO] [stdout] --> src/client.rs:9:16 [INFO] [stdout] | [INFO] [stdout] 9 | use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4, TcpStream}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::sync::mpsc` [INFO] [stdout] --> src/client.rs:10:5 [INFO] [stdout] | [INFO] [stdout] 10 | use std::sync::mpsc; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::thread` [INFO] [stdout] --> src/client.rs:11:5 [INFO] [stdout] | [INFO] [stdout] 11 | use std::thread; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fmt` [INFO] [stdout] --> src/handshake.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::fmt; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BufRead`, `BufReader`, `Cursor` [INFO] [stdout] --> src/handshake.rs:4:15 [INFO] [stdout] | [INFO] [stdout] 4 | use std::io::{BufRead, BufReader, Cursor, Error, ErrorKind, Read, Result}; [INFO] [stdout] | ^^^^^^^ ^^^^^^^^^ ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Ipv4Addr`, `SocketAddrV4`, `SocketAddr` [INFO] [stdout] --> src/handshake.rs:5:16 [INFO] [stdout] | [INFO] [stdout] 5 | use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4, TcpStream}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fmt` [INFO] [stdout] --> src/message.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use std::fmt; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::io::prelude::*` [INFO] [stdout] --> src/message.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::io::prelude::*; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BufRead`, `BufReader` [INFO] [stdout] --> src/message.rs:4:15 [INFO] [stdout] | [INFO] [stdout] 4 | use std::io::{BufRead, BufReader, Cursor, Error, ErrorKind, Read, Result}; [INFO] [stdout] | ^^^^^^^ ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `messageID` should have an upper camel case name [INFO] [stdout] --> src/message.rs:8:6 [INFO] [stdout] | [INFO] [stdout] 8 | type messageID = u8; [INFO] [stdout] | ^^^^^^^^^ help: convert the identifier to upper camel case: `MessageId` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_camel_case_types)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BigEndian`, `ReadBytesExt` [INFO] [stdout] --> src/p2p.rs:6:17 [INFO] [stdout] | [INFO] [stdout] 6 | use byteorder::{BigEndian, ReadBytesExt}; [INFO] [stdout] | ^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Digest`, `Sha1` [INFO] [stdout] --> src/p2p.rs:7:12 [INFO] [stdout] | [INFO] [stdout] 7 | use sha1::{Digest, Sha1}; [INFO] [stdout] | ^^^^^^ ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fmt` [INFO] [stdout] --> src/peers.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use std::fmt; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BufRead`, `BufReader`, `Read` [INFO] [stdout] --> src/peers.rs:3:15 [INFO] [stdout] | [INFO] [stdout] 3 | use std::io::{BufRead, BufReader, Cursor, Error, ErrorKind, Read, Result}; [INFO] [stdout] | ^^^^^^^ ^^^^^^^^^ ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `SocketAddr` [INFO] [stdout] --> src/peers.rs:4:26 [INFO] [stdout] | [INFO] [stdout] 4 | use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4}; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::str` [INFO] [stdout] --> src/peers.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use std::str; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::tracker::*` [INFO] [stdout] --> src/torrentfile.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::tracker::*; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BigEndian`, `ReadBytesExt` [INFO] [stdout] --> src/torrentfile.rs:7:17 [INFO] [stdout] | [INFO] [stdout] 7 | use byteorder::{BigEndian, ReadBytesExt}; [INFO] [stdout] | ^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `rand::*` [INFO] [stdout] --> src/torrentfile.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 8 | use rand::*; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fmt` [INFO] [stdout] --> src/torrentfile.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | use std::fmt; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BufRead`, `BufReader`, `Cursor` [INFO] [stdout] --> src/torrentfile.rs:11:15 [INFO] [stdout] | [INFO] [stdout] 11 | use std::io::{BufRead, BufReader, Cursor, Error, ErrorKind, Read, Write}; [INFO] [stdout] | ^^^^^^^ ^^^^^^^^^ ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `AsciiSet`, `CONTROLS`, `percent_encode_byte` [INFO] [stdout] --> src/tracker.rs:8:24 [INFO] [stdout] | [INFO] [stdout] 8 | use percent_encoding::{percent_encode_byte, AsciiSet, CONTROLS}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^ ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ClientBuilder`, `Client` [INFO] [stdout] --> src/tracker.rs:9:15 [INFO] [stdout] | [INFO] [stdout] 9 | use reqwest::{Client, ClientBuilder}; [INFO] [stdout] | ^^^^^^ ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `ErrorKind` [INFO] [stdout] --> src/tracker.rs:12:22 [INFO] [stdout] | [INFO] [stdout] 12 | use std::io::{Error, ErrorKind}; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::str` [INFO] [stdout] --> src/tracker.rs:13:5 [INFO] [stdout] | [INFO] [stdout] 13 | use std::str; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::iter::*` [INFO] [stdout] --> src/tracker.rs:14:5 [INFO] [stdout] | [INFO] [stdout] 14 | use std::iter::*; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::time::Duration` [INFO] [stdout] --> src/tracker.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 15 | use std::time::Duration; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ParseError`, `form_urlencoded::byte_serialize` [INFO] [stdout] --> src/tracker.rs:16:11 [INFO] [stdout] | [INFO] [stdout] 16 | use url::{form_urlencoded::byte_serialize, ParseError, Url}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `bencode::streaming::BencodeEvent` [INFO] [stdout] --> src/tracker.rs:17:5 [INFO] [stdout] | [INFO] [stdout] 17 | use bencode::streaming::BencodeEvent; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `bencode::streaming::StreamingParser` [INFO] [stdout] --> src/tracker.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | use bencode::streaming::StreamingParser; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `encode` [INFO] [stdout] --> src/tracker.rs:21:15 [INFO] [stdout] | [INFO] [stdout] 21 | use bencode::{encode, Decoder}; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Encodable` [INFO] [stdout] --> src/tracker.rs:22:23 [INFO] [stdout] | [INFO] [stdout] 22 | use rustc_serialize::{Encodable, Decodable}; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/torrentfile.rs:49:5 [INFO] [stdout] | [INFO] [stdout] 49 | outfile.read_to_end(&mut buffer); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Ipv4Addr`, `SocketAddrV4`, `SocketAddr` [INFO] [stdout] --> src/tracker.rs:24:16 [INFO] [stdout] | [INFO] [stdout] 24 | use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::str::from_utf8` [INFO] [stdout] --> src/main.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 15 | use std::str::from_utf8; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 94 warnings emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Digest`, `Sha1` [INFO] [stdout] --> src/main.rs:2:12 [INFO] [stdout] | [INFO] [stdout] 2 | use sha1::{Digest, Sha1}; [INFO] [stdout] | ^^^^^^ ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `new_handshake` [INFO] [stdout] --> src/client.rs:2:24 [INFO] [stdout] | [INFO] [stdout] 2 | use crate::handshake::{new_handshake, read_handshake, serialize_handshake, Handshake}; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BigEndian`, `ReadBytesExt` [INFO] [stdout] --> src/client.rs:5:17 [INFO] [stdout] | [INFO] [stdout] 5 | use byteorder::{BigEndian, ReadBytesExt}; [INFO] [stdout] | ^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fmt` [INFO] [stdout] --> src/client.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | use std::fmt; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Ipv4Addr`, `SocketAddrV4` [INFO] [stdout] --> src/client.rs:9:16 [INFO] [stdout] | [INFO] [stdout] 9 | use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4, TcpStream}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::sync::mpsc` [INFO] [stdout] --> src/client.rs:10:5 [INFO] [stdout] | [INFO] [stdout] 10 | use std::sync::mpsc; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::handshake::new_handshake_with_input` [INFO] [stdout] --> src/client.rs:152:9 [INFO] [stdout] | [INFO] [stdout] 152 | use crate::handshake::new_handshake_with_input; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::str::from_utf8` [INFO] [stdout] --> src/client.rs:154:9 [INFO] [stdout] | [INFO] [stdout] 154 | use std::str::from_utf8; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Receiver`, `Sender`, `channel` [INFO] [stdout] --> src/client.rs:155:27 [INFO] [stdout] | [INFO] [stdout] 155 | use std::sync::mpsc::{channel, Receiver, Sender}; [INFO] [stdout] | ^^^^^^^ ^^^^^^^^ ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fmt` [INFO] [stdout] --> src/handshake.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::fmt; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BufRead`, `BufReader`, `Cursor` [INFO] [stdout] --> src/handshake.rs:4:15 [INFO] [stdout] | [INFO] [stdout] 4 | use std::io::{BufRead, BufReader, Cursor, Error, ErrorKind, Read, Result}; [INFO] [stdout] | ^^^^^^^ ^^^^^^^^^ ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Ipv4Addr`, `SocketAddrV4`, `SocketAddr` [INFO] [stdout] --> src/handshake.rs:5:16 [INFO] [stdout] | [INFO] [stdout] 5 | use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4, TcpStream}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fmt` [INFO] [stdout] --> src/message.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use std::fmt; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::io::prelude::*` [INFO] [stdout] --> src/message.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::io::prelude::*; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BufRead`, `BufReader` [INFO] [stdout] --> src/message.rs:4:15 [INFO] [stdout] | [INFO] [stdout] 4 | use std::io::{BufRead, BufReader, Cursor, Error, ErrorKind, Read, Result}; [INFO] [stdout] | ^^^^^^^ ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `messageID` should have an upper camel case name [INFO] [stdout] --> src/message.rs:8:6 [INFO] [stdout] | [INFO] [stdout] 8 | type messageID = u8; [INFO] [stdout] | ^^^^^^^^^ help: convert the identifier to upper camel case: `MessageId` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_camel_case_types)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BigEndian`, `ReadBytesExt` [INFO] [stdout] --> src/p2p.rs:6:17 [INFO] [stdout] | [INFO] [stdout] 6 | use byteorder::{BigEndian, ReadBytesExt}; [INFO] [stdout] | ^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Digest`, `Sha1` [INFO] [stdout] --> src/p2p.rs:7:12 [INFO] [stdout] | [INFO] [stdout] 7 | use sha1::{Digest, Sha1}; [INFO] [stdout] | ^^^^^^ ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fmt` [INFO] [stdout] --> src/peers.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use std::fmt; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BufRead`, `BufReader`, `Read` [INFO] [stdout] --> src/peers.rs:3:15 [INFO] [stdout] | [INFO] [stdout] 3 | use std::io::{BufRead, BufReader, Cursor, Error, ErrorKind, Read, Result}; [INFO] [stdout] | ^^^^^^^ ^^^^^^^^^ ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `SocketAddr` [INFO] [stdout] --> src/peers.rs:4:26 [INFO] [stdout] | [INFO] [stdout] 4 | use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4}; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::str` [INFO] [stdout] --> src/peers.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use std::str; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::tracker::*` [INFO] [stdout] --> src/torrentfile.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::tracker::*; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BigEndian`, `ReadBytesExt` [INFO] [stdout] --> src/torrentfile.rs:7:17 [INFO] [stdout] | [INFO] [stdout] 7 | use byteorder::{BigEndian, ReadBytesExt}; [INFO] [stdout] | ^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `rand::*` [INFO] [stdout] --> src/torrentfile.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 8 | use rand::*; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fmt` [INFO] [stdout] --> src/torrentfile.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | use std::fmt; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BufRead`, `BufReader`, `Cursor` [INFO] [stdout] --> src/torrentfile.rs:11:15 [INFO] [stdout] | [INFO] [stdout] 11 | use std::io::{BufRead, BufReader, Cursor, Error, ErrorKind, Read, Write}; [INFO] [stdout] | ^^^^^^^ ^^^^^^^^^ ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `AsciiSet`, `CONTROLS`, `percent_encode_byte` [INFO] [stdout] --> src/tracker.rs:8:24 [INFO] [stdout] | [INFO] [stdout] 8 | use percent_encoding::{percent_encode_byte, AsciiSet, CONTROLS}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^ ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ClientBuilder`, `Client` [INFO] [stdout] --> src/tracker.rs:9:15 [INFO] [stdout] | [INFO] [stdout] 9 | use reqwest::{Client, ClientBuilder}; [INFO] [stdout] | ^^^^^^ ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `ErrorKind` [INFO] [stdout] --> src/tracker.rs:12:22 [INFO] [stdout] | [INFO] [stdout] 12 | use std::io::{Error, ErrorKind}; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::str` [INFO] [stdout] --> src/tracker.rs:13:5 [INFO] [stdout] | [INFO] [stdout] 13 | use std::str; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::iter::*` [INFO] [stdout] --> src/tracker.rs:14:5 [INFO] [stdout] | [INFO] [stdout] 14 | use std::iter::*; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::time::Duration` [INFO] [stdout] --> src/tracker.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 15 | use std::time::Duration; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ParseError`, `form_urlencoded::byte_serialize` [INFO] [stdout] --> src/tracker.rs:16:11 [INFO] [stdout] | [INFO] [stdout] 16 | use url::{form_urlencoded::byte_serialize, ParseError, Url}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `bencode::streaming::BencodeEvent` [INFO] [stdout] --> src/tracker.rs:17:5 [INFO] [stdout] | [INFO] [stdout] 17 | use bencode::streaming::BencodeEvent; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `bencode::streaming::StreamingParser` [INFO] [stdout] --> src/tracker.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | use bencode::streaming::StreamingParser; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `encode` [INFO] [stdout] --> src/tracker.rs:21:15 [INFO] [stdout] | [INFO] [stdout] 21 | use bencode::{encode, Decoder}; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Encodable` [INFO] [stdout] --> src/tracker.rs:22:23 [INFO] [stdout] | [INFO] [stdout] 22 | use rustc_serialize::{Encodable, Decodable}; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `SocketAddrV4`, `SocketAddr` [INFO] [stdout] --> src/tracker.rs:24:26 [INFO] [stdout] | [INFO] [stdout] 24 | use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4}; [INFO] [stdout] | ^^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::net::TcpStream` [INFO] [stdout] --> src/tracker.rs:129:9 [INFO] [stdout] | [INFO] [stdout] 129 | use std::net::TcpStream; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Read`, `Write` [INFO] [stdout] --> src/tracker.rs:130:19 [INFO] [stdout] | [INFO] [stdout] 130 | use std::io::{Read, Write}; [INFO] [stdout] | ^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `server_address` [INFO] [stdout] --> src/tracker.rs:131:25 [INFO] [stdout] | [INFO] [stdout] 131 | use mockito::{mock, server_address, Matcher}; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::str::from_utf8` [INFO] [stdout] --> src/main.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 15 | use std::str::from_utf8; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `hash_output` [INFO] [stdout] --> src/main.rs:25:9 [INFO] [stdout] | [INFO] [stdout] 25 | let hash_output = hash.digest().bytes().to_vec(); [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_hash_output` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `hs` [INFO] [stdout] --> src/client.rs:129:16 [INFO] [stdout] | [INFO] [stdout] 129 | Ok(hs) => match receive_bitfield(&mut s) { [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_hs` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `input_pstr` is never read [INFO] [stdout] --> src/handshake.rs:72:21 [INFO] [stdout] | [INFO] [stdout] 72 | let mut input_pstr = "hello"; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_assignments)]` on by default [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `index` [INFO] [stdout] --> src/p2p.rs:60:25 [INFO] [stdout] | [INFO] [stdout] 60 | let index = parse_have(&msg).unwrap(); [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_index` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `n` [INFO] [stdout] --> src/p2p.rs:70:25 [INFO] [stdout] | [INFO] [stdout] 70 | let n = parse_piece(self.index, self.buf.as_mut(), &msg).unwrap(); [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_n` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `err` [INFO] [stdout] --> src/p2p.rs:156:21 [INFO] [stdout] | [INFO] [stdout] 156 | Err(err) => return, [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_err` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `err` [INFO] [stdout] --> src/p2p.rs:166:21 [INFO] [stdout] | [INFO] [stdout] 166 | Err(err) => { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_err` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `e` [INFO] [stdout] --> src/p2p.rs:176:21 [INFO] [stdout] | [INFO] [stdout] 176 | Err(e) => { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_e` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `begin` [INFO] [stdout] --> src/p2p.rs:235:18 [INFO] [stdout] | [INFO] [stdout] 235 | let (begin, end) = self.calculate_bounds_for_piece(res.index); [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_begin` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `end` [INFO] [stdout] --> src/p2p.rs:235:25 [INFO] [stdout] | [INFO] [stdout] 235 | let (begin, end) = self.calculate_bounds_for_piece(res.index); [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_end` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `offset` is never read [INFO] [stdout] --> src/peers.rs:34:13 [INFO] [stdout] | [INFO] [stdout] 34 | let mut offset = 0; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `port_cursor` is never read [INFO] [stdout] --> src/peers.rs:36:13 [INFO] [stdout] | [INFO] [stdout] 36 | let mut port_cursor = Cursor::new(&port_vec); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `announce` is never read [INFO] [stdout] --> src/torrentfile.rs:42:9 [INFO] [stdout] | [INFO] [stdout] 42 | let mut announce = String::new(); [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `pieces` is never read [INFO] [stdout] --> src/torrentfile.rs:43:9 [INFO] [stdout] | [INFO] [stdout] 43 | let mut pieces = String::new(); [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `piecelength` is never read [INFO] [stdout] --> src/torrentfile.rs:44:9 [INFO] [stdout] | [INFO] [stdout] 44 | let mut piecelength = 0; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `length` is never read [INFO] [stdout] --> src/torrentfile.rs:45:9 [INFO] [stdout] | [INFO] [stdout] 45 | let mut length = 0; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `name` is never read [INFO] [stdout] --> src/torrentfile.rs:46:9 [INFO] [stdout] | [INFO] [stdout] 46 | let mut name = String::new(); [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/main.rs:31:9 [INFO] [stdout] | [INFO] [stdout] 31 | let mut id_error = Error::new(ErrorKind::InvalidData, "incorrect ID, expecting ID 5"); [INFO] [stdout] | ----^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/main.rs:54:17 [INFO] [stdout] | [INFO] [stdout] 54 | let mut expected_bf: [u8; 5] = [1, 2, 3, 4, 5]; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/main.rs:88:21 [INFO] [stdout] | [INFO] [stdout] 88 | let mut msg: [u8; 10] = [0x00, 0x00, 0x00, 0x06, 5, 1, 2, 3, 4, 5]; [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/client.rs:72:13 [INFO] [stdout] | [INFO] [stdout] 72 | let mut msg = format_have(index); [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/client.rs:84:17 [INFO] [stdout] | [INFO] [stdout] 84 | let mut id_error = Error::new(ErrorKind::InvalidData, "id Error"); [INFO] [stdout] | ----^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/client.rs:100:9 [INFO] [stdout] | [INFO] [stdout] 100 | let mut reader_error = Error::new(ErrorKind::InvalidData, "unexpected infohash"); [INFO] [stdout] | ----^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/client.rs:110:9 [INFO] [stdout] | [INFO] [stdout] 110 | let mut received = read_handshake(conn).unwrap(); [INFO] [stdout] | ----^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/p2p.rs:124:9 [INFO] [stdout] | [INFO] [stdout] 124 | let mut reader_error = Error::new(ErrorKind::InvalidData, "unexpected infohash"); [INFO] [stdout] | ----^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/p2p.rs:224:17 [INFO] [stdout] | [INFO] [stdout] 224 | let mut workQueueCopy = workQueue.clone(); [INFO] [stdout] | ----^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/p2p.rs:225:17 [INFO] [stdout] | [INFO] [stdout] 225 | let mut resultsCopy = results.0.clone(); [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/peers.rs:22:9 [INFO] [stdout] | [INFO] [stdout] 22 | let mut num_peers = peers_bin.len() / peer_size; [INFO] [stdout] | ----^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/peers.rs:23:9 [INFO] [stdout] | [INFO] [stdout] 23 | let mut peer_error = Error::new(ErrorKind::InvalidData, "Malformed Peers"); [INFO] [stdout] | ----^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/peers.rs:41:17 [INFO] [stdout] | [INFO] [stdout] 41 | let mut port_vc = &port_vec[0..2].to_vec(); [INFO] [stdout] | ----^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/torrentfile.rs:62:9 [INFO] [stdout] | [INFO] [stdout] 62 | let mut bi = BencodeInfo { [INFO] [stdout] | ----^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type alias is never used: `Bitfield` [INFO] [stdout] --> src/bitfield.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | pub type Bitfield = Vec; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `has_piece` [INFO] [stdout] --> src/bitfield.rs:5:15 [INFO] [stdout] | [INFO] [stdout] 5 | pub(crate) fn has_piece(bf: &mut Bitfield, index: usize) -> bool { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `set_piece` [INFO] [stdout] --> src/bitfield.rs:16:8 [INFO] [stdout] | [INFO] [stdout] 16 | pub fn set_piece(bf: &Bitfield, index: usize) -> Bitfield { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct is never constructed: `Client` [INFO] [stdout] --> src/client.rs:14:12 [INFO] [stdout] | [INFO] [stdout] 14 | pub struct Client { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `read` [INFO] [stdout] --> src/client.rs:24:19 [INFO] [stdout] | [INFO] [stdout] 24 | pub(crate) fn read(&mut self) -> Result { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `send_request` [INFO] [stdout] --> src/client.rs:31:19 [INFO] [stdout] | [INFO] [stdout] 31 | pub(crate) fn send_request( [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `send_interested` [INFO] [stdout] --> src/client.rs:44:19 [INFO] [stdout] | [INFO] [stdout] 44 | pub(crate) fn send_interested(&mut self) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `send_not_interested` [INFO] [stdout] --> src/client.rs:53:19 [INFO] [stdout] | [INFO] [stdout] 53 | pub(crate) fn send_not_interested(&mut self) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `send_unchoke` [INFO] [stdout] --> src/client.rs:62:19 [INFO] [stdout] | [INFO] [stdout] 62 | pub(crate) fn send_unchoke(&mut self) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `send_have` [INFO] [stdout] --> src/client.rs:71:19 [INFO] [stdout] | [INFO] [stdout] 71 | pub(crate) fn send_have(&mut self, index: u32) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `receive_bitfield` [INFO] [stdout] --> src/client.rs:79:4 [INFO] [stdout] | [INFO] [stdout] 79 | fn receive_bitfield(conn: &mut TcpStream) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `complete_handshake` [INFO] [stdout] --> src/client.rs:95:4 [INFO] [stdout] | [INFO] [stdout] 95 | fn complete_handshake( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `new_client` [INFO] [stdout] --> src/client.rs:118:15 [INFO] [stdout] | [INFO] [stdout] 118 | pub(crate) fn new_client( [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct is never constructed: `Handshake` [INFO] [stdout] --> src/handshake.rs:9:12 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct Handshake { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `new_handshake` [INFO] [stdout] --> src/handshake.rs:15:8 [INFO] [stdout] | [INFO] [stdout] 15 | pub fn new_handshake() -> Handshake { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `new_handshake_with_input` [INFO] [stdout] --> src/handshake.rs:22:8 [INFO] [stdout] | [INFO] [stdout] 22 | pub fn new_handshake_with_input(info_hash: Vec, peer_id: Vec) -> Handshake { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `serialize_handshake` [INFO] [stdout] --> src/handshake.rs:29:8 [INFO] [stdout] | [INFO] [stdout] 29 | pub fn serialize_handshake(hs: &Handshake) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `read_handshake` [INFO] [stdout] --> src/handshake.rs:43:8 [INFO] [stdout] | [INFO] [stdout] 43 | pub fn read_handshake(reader: &mut TcpStream) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static is never used: `MESSAGE_CHOKE` [INFO] [stdout] --> src/message.rs:10:1 [INFO] [stdout] | [INFO] [stdout] 10 | pub static MESSAGE_CHOKE: messageID = 0; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static is never used: `MESSAGE_UNCHOKE` [INFO] [stdout] --> src/message.rs:11:1 [INFO] [stdout] | [INFO] [stdout] 11 | pub static MESSAGE_UNCHOKE: messageID = 1; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static is never used: `MESSAGE_INTERESTED` [INFO] [stdout] --> src/message.rs:12:1 [INFO] [stdout] | [INFO] [stdout] 12 | pub static MESSAGE_INTERESTED: messageID = 2; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static is never used: `MESSAGE_NOT_INTERESTED` [INFO] [stdout] --> src/message.rs:13:1 [INFO] [stdout] | [INFO] [stdout] 13 | pub static MESSAGE_NOT_INTERESTED: messageID = 3; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static is never used: `MESSAGE_HAVE` [INFO] [stdout] --> src/message.rs:14:1 [INFO] [stdout] | [INFO] [stdout] 14 | pub static MESSAGE_HAVE: messageID = 4; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static is never used: `MESSAGE_BITFIELD` [INFO] [stdout] --> src/message.rs:15:1 [INFO] [stdout] | [INFO] [stdout] 15 | pub static MESSAGE_BITFIELD: messageID = 5; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static is never used: `MESSAGE_REQUEST` [INFO] [stdout] --> src/message.rs:16:1 [INFO] [stdout] | [INFO] [stdout] 16 | pub static MESSAGE_REQUEST: messageID = 6; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static is never used: `MESSAGE_PIECE` [INFO] [stdout] --> src/message.rs:17:1 [INFO] [stdout] | [INFO] [stdout] 17 | pub static MESSAGE_PIECE: messageID = 7; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static is never used: `MESSAGE_CANCEL` [INFO] [stdout] --> src/message.rs:18:1 [INFO] [stdout] | [INFO] [stdout] 18 | pub static MESSAGE_CANCEL: messageID = 8; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `ID` [INFO] [stdout] --> src/message.rs:22:5 [INFO] [stdout] | [INFO] [stdout] 22 | pub(crate) ID: messageID, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `Payload` [INFO] [stdout] --> src/message.rs:23:5 [INFO] [stdout] | [INFO] [stdout] 23 | pub(crate) Payload: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `format_request` [INFO] [stdout] --> src/message.rs:35:8 [INFO] [stdout] | [INFO] [stdout] 35 | pub fn format_request(index: u32, begin: u32, length: u32) -> Message { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `format_have` [INFO] [stdout] --> src/message.rs:47:8 [INFO] [stdout] | [INFO] [stdout] 47 | pub fn format_have(index: u32) -> Message { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `parse_piece` [INFO] [stdout] --> src/message.rs:57:8 [INFO] [stdout] | [INFO] [stdout] 57 | pub fn parse_piece(index: u32, buf: &mut Vec, msg: &Message) -> Result { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `parse_have` [INFO] [stdout] --> src/message.rs:88:15 [INFO] [stdout] | [INFO] [stdout] 88 | pub(crate) fn parse_have(msg: &Message) -> Result { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `serialize_message` [INFO] [stdout] --> src/message.rs:102:15 [INFO] [stdout] | [INFO] [stdout] 102 | pub(crate) fn serialize_message(msg: &Message) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `read_message` [INFO] [stdout] --> src/message.rs:122:8 [INFO] [stdout] | [INFO] [stdout] 122 | pub fn read_message(reader: &mut TcpStream) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `name` [INFO] [stdout] --> src/message.rs:159:4 [INFO] [stdout] | [INFO] [stdout] 159 | fn name(msg: &Message) -> String { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `string` [INFO] [stdout] --> src/message.rs:178:4 [INFO] [stdout] | [INFO] [stdout] 178 | fn string(msg: &Message) -> String { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static is never used: `MAX_BLOCK_SIZE` [INFO] [stdout] --> src/p2p.rs:12:1 [INFO] [stdout] | [INFO] [stdout] 12 | static MAX_BLOCK_SIZE: u32 = 16384; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static is never used: `MAX_BACK_LOG` [INFO] [stdout] --> src/p2p.rs:13:1 [INFO] [stdout] | [INFO] [stdout] 13 | static MAX_BACK_LOG: u32 = 5; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct is never constructed: `PieceWork` [INFO] [stdout] --> src/p2p.rs:26:12 [INFO] [stdout] | [INFO] [stdout] 26 | pub struct PieceWork { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct is never constructed: `PieceResult` [INFO] [stdout] --> src/p2p.rs:32:12 [INFO] [stdout] | [INFO] [stdout] 32 | pub struct PieceResult { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct is never constructed: `PieceProgress` [INFO] [stdout] --> src/p2p.rs:37:12 [INFO] [stdout] | [INFO] [stdout] 37 | pub struct PieceProgress { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `read_message` [INFO] [stdout] --> src/p2p.rs:47:8 [INFO] [stdout] | [INFO] [stdout] 47 | fn read_message(&mut self) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `attempt_download_piece` [INFO] [stdout] --> src/p2p.rs:87:4 [INFO] [stdout] | [INFO] [stdout] 87 | fn attempt_download_piece(c: Arc>, pw: &PieceWork) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `check_integrity` [INFO] [stdout] --> src/p2p.rs:123:4 [INFO] [stdout] | [INFO] [stdout] 123 | fn check_integrity(pw: &PieceWork, buf: Vec) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `start_download_work` [INFO] [stdout] --> src/p2p.rs:136:8 [INFO] [stdout] | [INFO] [stdout] 136 | fn start_download_work( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `calculate_bounds_for_piece` [INFO] [stdout] --> src/p2p.rs:192:8 [INFO] [stdout] | [INFO] [stdout] 192 | fn calculate_bounds_for_piece(&self, index: u32) -> (u32, u32) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `calculate_piece_size` [INFO] [stdout] --> src/p2p.rs:201:8 [INFO] [stdout] | [INFO] [stdout] 201 | fn calculate_piece_size(&self, index: u32) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `download` [INFO] [stdout] --> src/p2p.rs:206:12 [INFO] [stdout] | [INFO] [stdout] 206 | pub fn download(&mut self) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `get_socket_address` [INFO] [stdout] --> src/peers.rs:15:19 [INFO] [stdout] | [INFO] [stdout] 15 | pub(crate) fn get_socket_address(&self) -> SocketAddrV4 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `unmarshal` [INFO] [stdout] --> src/peers.rs:20:15 [INFO] [stdout] | [INFO] [stdout] 20 | pub(crate) fn unmarshal(peers_bin: Vec) -> Result> { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static is never used: `DEFAULT_PORT` [INFO] [stdout] --> src/torrentfile.rs:13:1 [INFO] [stdout] | [INFO] [stdout] 13 | static DEFAULT_PORT: u16 = 6881; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct is never constructed: `TorrentFile` [INFO] [stdout] --> src/torrentfile.rs:15:12 [INFO] [stdout] | [INFO] [stdout] 15 | pub struct TorrentFile { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct is never constructed: `BencodeInfo` [INFO] [stdout] --> src/torrentfile.rs:24:12 [INFO] [stdout] | [INFO] [stdout] 24 | pub struct BencodeInfo { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct is never constructed: `BencodeTorrent` [INFO] [stdout] --> src/torrentfile.rs:31:12 [INFO] [stdout] | [INFO] [stdout] 31 | pub struct BencodeTorrent { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `open` [INFO] [stdout] --> src/torrentfile.rs:36:8 [INFO] [stdout] | [INFO] [stdout] 36 | pub fn open(path: String) -> Result { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `to_torrent_file` [INFO] [stdout] --> src/torrentfile.rs:76:12 [INFO] [stdout] | [INFO] [stdout] 76 | pub fn to_torrent_file(&mut self) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `hash` [INFO] [stdout] --> src/torrentfile.rs:94:12 [INFO] [stdout] | [INFO] [stdout] 94 | pub fn hash(&mut self) -> Vec { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `split_piece_hashes` [INFO] [stdout] --> src/torrentfile.rs:117:12 [INFO] [stdout] | [INFO] [stdout] 117 | pub fn split_piece_hashes(&mut self) -> Result>, Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `download_to_file` [INFO] [stdout] --> src/torrentfile.rs:133:8 [INFO] [stdout] | [INFO] [stdout] 133 | fn download_to_file(&mut self, path: String) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `binary_percent_encoder` [INFO] [stdout] --> src/tracker.rs:41:8 [INFO] [stdout] | [INFO] [stdout] 41 | pub fn binary_percent_encoder(input: Vec) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `build_tracker_url` [INFO] [stdout] --> src/tracker.rs:75:8 [INFO] [stdout] | [INFO] [stdout] 75 | fn build_tracker_url(&mut self, peerid: Vec, port: u16) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `request_peers` [INFO] [stdout] --> src/tracker.rs:113:12 [INFO] [stdout] | [INFO] [stdout] 113 | pub fn request_peers(&mut self, peerid: Vec, port: u16) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `receive_bitfield` [INFO] [stdout] --> src/main.rs:29:4 [INFO] [stdout] | [INFO] [stdout] 29 | fn receive_bitfield(conn: &mut TcpStream) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `dummy_client` [INFO] [stdout] --> src/main.rs:39:4 [INFO] [stdout] | [INFO] [stdout] 39 | fn dummy_client() { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `handle_client` [INFO] [stdout] --> src/main.rs:82:4 [INFO] [stdout] | [INFO] [stdout] 82 | fn handle_client(mut stream: TcpStream) { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `create_client_server` [INFO] [stdout] --> src/main.rs:106:4 [INFO] [stdout] | [INFO] [stdout] 106 | fn create_client_server() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/main.rs:117:17 [INFO] [stdout] | [INFO] [stdout] 117 | worker.join(); [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_must_use)]` on by default [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/main.rs:118:17 [INFO] [stdout] | [INFO] [stdout] 118 | dummy_client_thread.join(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `ID` should have a snake case name [INFO] [stdout] --> src/message.rs:22:16 [INFO] [stdout] | [INFO] [stdout] 22 | pub(crate) ID: messageID, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `id` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_snake_case)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `Payload` should have a snake case name [INFO] [stdout] --> src/message.rs:23:16 [INFO] [stdout] | [INFO] [stdout] 23 | pub(crate) Payload: Vec, [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `payload` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/p2p.rs:150:9 [INFO] [stdout] | [INFO] [stdout] 150 | c.lock().unwrap().send_unchoke(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/p2p.rs:151:9 [INFO] [stdout] | [INFO] [stdout] 151 | c.lock().unwrap().send_interested(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/p2p.rs:178:21 [INFO] [stdout] | [INFO] [stdout] 178 | workQueue.lock().unwrap().0.send(pw); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/p2p.rs:183:21 [INFO] [stdout] | [INFO] [stdout] 183 | / results.send(PieceResult { [INFO] [stdout] 184 | | index: pindex2, [INFO] [stdout] 185 | | buf: cbuf, [INFO] [stdout] 186 | | }); [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/p2p.rs:219:13 [INFO] [stdout] | [INFO] [stdout] 219 | workQueue.lock().unwrap().0.send(work); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/torrentfile.rs:49:5 [INFO] [stdout] | [INFO] [stdout] 49 | outfile.read_to_end(&mut buffer); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `hash_output` [INFO] [stdout] --> src/main.rs:25:9 [INFO] [stdout] | [INFO] [stdout] 25 | let hash_output = hash.digest().bytes().to_vec(); [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_hash_output` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `hs` [INFO] [stdout] --> src/client.rs:129:16 [INFO] [stdout] | [INFO] [stdout] 129 | Ok(hs) => match receive_bitfield(&mut s) { [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_hs` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `input_pstr` is never read [INFO] [stdout] --> src/handshake.rs:72:21 [INFO] [stdout] | [INFO] [stdout] 72 | let mut input_pstr = "hello"; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_assignments)]` on by default [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `output_length` [INFO] [stdout] --> src/message.rs:228:13 [INFO] [stdout] | [INFO] [stdout] 228 | let output_length = 6; [INFO] [stdout] | ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_output_length` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `length_test` [INFO] [stdout] --> src/message.rs:229:13 [INFO] [stdout] | [INFO] [stdout] 229 | let length_test = parse_piece(input_index, &mut input_buffer, input_message); [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_length_test` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `index` [INFO] [stdout] --> src/p2p.rs:60:25 [INFO] [stdout] | [INFO] [stdout] 60 | let index = parse_have(&msg).unwrap(); [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_index` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `n` [INFO] [stdout] --> src/p2p.rs:70:25 [INFO] [stdout] | [INFO] [stdout] 70 | let n = parse_piece(self.index, self.buf.as_mut(), &msg).unwrap(); [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_n` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 147 warnings emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `err` [INFO] [stdout] --> src/p2p.rs:156:21 [INFO] [stdout] | [INFO] [stdout] 156 | Err(err) => return, [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_err` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `err` [INFO] [stdout] --> src/p2p.rs:166:21 [INFO] [stdout] | [INFO] [stdout] 166 | Err(err) => { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_err` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `e` [INFO] [stdout] --> src/p2p.rs:176:21 [INFO] [stdout] | [INFO] [stdout] 176 | Err(e) => { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_e` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `begin` [INFO] [stdout] --> src/p2p.rs:235:18 [INFO] [stdout] | [INFO] [stdout] 235 | let (begin, end) = self.calculate_bounds_for_piece(res.index); [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_begin` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `end` [INFO] [stdout] --> src/p2p.rs:235:25 [INFO] [stdout] | [INFO] [stdout] 235 | let (begin, end) = self.calculate_bounds_for_piece(res.index); [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_end` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `offset` is never read [INFO] [stdout] --> src/peers.rs:34:13 [INFO] [stdout] | [INFO] [stdout] 34 | let mut offset = 0; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `port_cursor` is never read [INFO] [stdout] --> src/peers.rs:36:13 [INFO] [stdout] | [INFO] [stdout] 36 | let mut port_cursor = Cursor::new(&port_vec); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `announce` is never read [INFO] [stdout] --> src/torrentfile.rs:42:9 [INFO] [stdout] | [INFO] [stdout] 42 | let mut announce = String::new(); [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `pieces` is never read [INFO] [stdout] --> src/torrentfile.rs:43:9 [INFO] [stdout] | [INFO] [stdout] 43 | let mut pieces = String::new(); [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `piecelength` is never read [INFO] [stdout] --> src/torrentfile.rs:44:9 [INFO] [stdout] | [INFO] [stdout] 44 | let mut piecelength = 0; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `length` is never read [INFO] [stdout] --> src/torrentfile.rs:45:9 [INFO] [stdout] | [INFO] [stdout] 45 | let mut length = 0; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `name` is never read [INFO] [stdout] --> src/torrentfile.rs:46:9 [INFO] [stdout] | [INFO] [stdout] 46 | let mut name = String::new(); [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `mock` [INFO] [stdout] --> src/tracker.rs:173:13 [INFO] [stdout] | [INFO] [stdout] 173 | let mock = mock("GET", Matcher::Any).with_body(response_bencode).create(); [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_mock` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/main.rs:31:9 [INFO] [stdout] | [INFO] [stdout] 31 | let mut id_error = Error::new(ErrorKind::InvalidData, "incorrect ID, expecting ID 5"); [INFO] [stdout] | ----^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/main.rs:54:17 [INFO] [stdout] | [INFO] [stdout] 54 | let mut expected_bf: [u8; 5] = [1, 2, 3, 4, 5]; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/main.rs:88:21 [INFO] [stdout] | [INFO] [stdout] 88 | let mut msg: [u8; 10] = [0x00, 0x00, 0x00, 0x06, 5, 1, 2, 3, 4, 5]; [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/client.rs:72:13 [INFO] [stdout] | [INFO] [stdout] 72 | let mut msg = format_have(index); [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/client.rs:84:17 [INFO] [stdout] | [INFO] [stdout] 84 | let mut id_error = Error::new(ErrorKind::InvalidData, "id Error"); [INFO] [stdout] | ----^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/client.rs:100:9 [INFO] [stdout] | [INFO] [stdout] 100 | let mut reader_error = Error::new(ErrorKind::InvalidData, "unexpected infohash"); [INFO] [stdout] | ----^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/client.rs:110:9 [INFO] [stdout] | [INFO] [stdout] 110 | let mut received = read_handshake(conn).unwrap(); [INFO] [stdout] | ----^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/client.rs:170:21 [INFO] [stdout] | [INFO] [stdout] 170 | let mut expected_bf: [u8; 5] = [1, 2, 3, 4, 5]; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/client.rs:189:25 [INFO] [stdout] | [INFO] [stdout] 189 | let mut msg: [u8; 10] = [0x00, 0x00, 0x00, 0x06, 5, 1, 2, 3, 4, 5]; [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/handshake.rs:144:13 [INFO] [stdout] | [INFO] [stdout] 144 | let mut input_info_hash: [u8; 20] = [ [INFO] [stdout] | ----^^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/handshake.rs:147:13 [INFO] [stdout] | [INFO] [stdout] 147 | let mut input_peer_id: [u8; 20] = [ [INFO] [stdout] | ----^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/handshake.rs:162:13 [INFO] [stdout] | [INFO] [stdout] 162 | let mut input_info_hash: [u8; 20] = [ [INFO] [stdout] | ----^^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/handshake.rs:165:13 [INFO] [stdout] | [INFO] [stdout] 165 | let mut input_peer_id: [u8; 20] = [ [INFO] [stdout] | ----^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/handshake.rs:168:13 [INFO] [stdout] | [INFO] [stdout] 168 | let mut input_pstr = String::from("BitTorrent protocol, but cooler?"); [INFO] [stdout] | ----^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/p2p.rs:124:9 [INFO] [stdout] | [INFO] [stdout] 124 | let mut reader_error = Error::new(ErrorKind::InvalidData, "unexpected infohash"); [INFO] [stdout] | ----^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/p2p.rs:224:17 [INFO] [stdout] | [INFO] [stdout] 224 | let mut workQueueCopy = workQueue.clone(); [INFO] [stdout] | ----^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/p2p.rs:225:17 [INFO] [stdout] | [INFO] [stdout] 225 | let mut resultsCopy = results.0.clone(); [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/peers.rs:22:9 [INFO] [stdout] | [INFO] [stdout] 22 | let mut num_peers = peers_bin.len() / peer_size; [INFO] [stdout] | ----^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/peers.rs:23:9 [INFO] [stdout] | [INFO] [stdout] 23 | let mut peer_error = Error::new(ErrorKind::InvalidData, "Malformed Peers"); [INFO] [stdout] | ----^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/peers.rs:41:17 [INFO] [stdout] | [INFO] [stdout] 41 | let mut port_vc = &port_vec[0..2].to_vec(); [INFO] [stdout] | ----^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/torrentfile.rs:62:9 [INFO] [stdout] | [INFO] [stdout] 62 | let mut bi = BencodeInfo { [INFO] [stdout] | ----^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct is never constructed: `Client` [INFO] [stdout] --> src/client.rs:14:12 [INFO] [stdout] | [INFO] [stdout] 14 | pub struct Client { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `read` [INFO] [stdout] --> src/client.rs:24:19 [INFO] [stdout] | [INFO] [stdout] 24 | pub(crate) fn read(&mut self) -> Result { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `send_request` [INFO] [stdout] --> src/client.rs:31:19 [INFO] [stdout] | [INFO] [stdout] 31 | pub(crate) fn send_request( [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `send_interested` [INFO] [stdout] --> src/client.rs:44:19 [INFO] [stdout] | [INFO] [stdout] 44 | pub(crate) fn send_interested(&mut self) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `send_not_interested` [INFO] [stdout] --> src/client.rs:53:19 [INFO] [stdout] | [INFO] [stdout] 53 | pub(crate) fn send_not_interested(&mut self) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `send_unchoke` [INFO] [stdout] --> src/client.rs:62:19 [INFO] [stdout] | [INFO] [stdout] 62 | pub(crate) fn send_unchoke(&mut self) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `send_have` [INFO] [stdout] --> src/client.rs:71:19 [INFO] [stdout] | [INFO] [stdout] 71 | pub(crate) fn send_have(&mut self, index: u32) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `complete_handshake` [INFO] [stdout] --> src/client.rs:95:4 [INFO] [stdout] | [INFO] [stdout] 95 | fn complete_handshake( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `new_client` [INFO] [stdout] --> src/client.rs:118:15 [INFO] [stdout] | [INFO] [stdout] 118 | pub(crate) fn new_client( [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `new_handshake` [INFO] [stdout] --> src/handshake.rs:15:8 [INFO] [stdout] | [INFO] [stdout] 15 | pub fn new_handshake() -> Handshake { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `read_handshake` [INFO] [stdout] --> src/handshake.rs:43:8 [INFO] [stdout] | [INFO] [stdout] 43 | pub fn read_handshake(reader: &mut TcpStream) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static is never used: `MAX_BLOCK_SIZE` [INFO] [stdout] --> src/p2p.rs:12:1 [INFO] [stdout] | [INFO] [stdout] 12 | static MAX_BLOCK_SIZE: u32 = 16384; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static is never used: `MAX_BACK_LOG` [INFO] [stdout] --> src/p2p.rs:13:1 [INFO] [stdout] | [INFO] [stdout] 13 | static MAX_BACK_LOG: u32 = 5; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct is never constructed: `PieceWork` [INFO] [stdout] --> src/p2p.rs:26:12 [INFO] [stdout] | [INFO] [stdout] 26 | pub struct PieceWork { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct is never constructed: `PieceResult` [INFO] [stdout] --> src/p2p.rs:32:12 [INFO] [stdout] | [INFO] [stdout] 32 | pub struct PieceResult { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct is never constructed: `PieceProgress` [INFO] [stdout] --> src/p2p.rs:37:12 [INFO] [stdout] | [INFO] [stdout] 37 | pub struct PieceProgress { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `read_message` [INFO] [stdout] --> src/p2p.rs:47:8 [INFO] [stdout] | [INFO] [stdout] 47 | fn read_message(&mut self) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `attempt_download_piece` [INFO] [stdout] --> src/p2p.rs:87:4 [INFO] [stdout] | [INFO] [stdout] 87 | fn attempt_download_piece(c: Arc>, pw: &PieceWork) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `check_integrity` [INFO] [stdout] --> src/p2p.rs:123:4 [INFO] [stdout] | [INFO] [stdout] 123 | fn check_integrity(pw: &PieceWork, buf: Vec) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `start_download_work` [INFO] [stdout] --> src/p2p.rs:136:8 [INFO] [stdout] | [INFO] [stdout] 136 | fn start_download_work( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `calculate_bounds_for_piece` [INFO] [stdout] --> src/p2p.rs:192:8 [INFO] [stdout] | [INFO] [stdout] 192 | fn calculate_bounds_for_piece(&self, index: u32) -> (u32, u32) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `calculate_piece_size` [INFO] [stdout] --> src/p2p.rs:201:8 [INFO] [stdout] | [INFO] [stdout] 201 | fn calculate_piece_size(&self, index: u32) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `download` [INFO] [stdout] --> src/p2p.rs:206:12 [INFO] [stdout] | [INFO] [stdout] 206 | pub fn download(&mut self) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static is never used: `DEFAULT_PORT` [INFO] [stdout] --> src/torrentfile.rs:13:1 [INFO] [stdout] | [INFO] [stdout] 13 | static DEFAULT_PORT: u16 = 6881; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `piecehashes` [INFO] [stdout] --> src/torrentfile.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | pub(crate) piecehashes: Vec>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `piecelength` [INFO] [stdout] --> src/torrentfile.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 19 | pub(crate) piecelength: u32, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `name` [INFO] [stdout] --> src/torrentfile.rs:21:5 [INFO] [stdout] | [INFO] [stdout] 21 | pub(crate) name: String, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct is never constructed: `BencodeInfo` [INFO] [stdout] --> src/torrentfile.rs:24:12 [INFO] [stdout] | [INFO] [stdout] 24 | pub struct BencodeInfo { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct is never constructed: `BencodeTorrent` [INFO] [stdout] --> src/torrentfile.rs:31:12 [INFO] [stdout] | [INFO] [stdout] 31 | pub struct BencodeTorrent { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `open` [INFO] [stdout] --> src/torrentfile.rs:36:8 [INFO] [stdout] | [INFO] [stdout] 36 | pub fn open(path: String) -> Result { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `to_torrent_file` [INFO] [stdout] --> src/torrentfile.rs:76:12 [INFO] [stdout] | [INFO] [stdout] 76 | pub fn to_torrent_file(&mut self) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `hash` [INFO] [stdout] --> src/torrentfile.rs:94:12 [INFO] [stdout] | [INFO] [stdout] 94 | pub fn hash(&mut self) -> Vec { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `split_piece_hashes` [INFO] [stdout] --> src/torrentfile.rs:117:12 [INFO] [stdout] | [INFO] [stdout] 117 | pub fn split_piece_hashes(&mut self) -> Result>, Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `download_to_file` [INFO] [stdout] --> src/torrentfile.rs:133:8 [INFO] [stdout] | [INFO] [stdout] 133 | fn download_to_file(&mut self, path: String) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `binary_percent_encoder` [INFO] [stdout] --> src/tracker.rs:41:8 [INFO] [stdout] | [INFO] [stdout] 41 | pub fn binary_percent_encoder(input: Vec) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `receive_bitfield` [INFO] [stdout] --> src/main.rs:29:4 [INFO] [stdout] | [INFO] [stdout] 29 | fn receive_bitfield(conn: &mut TcpStream) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `dummy_client` [INFO] [stdout] --> src/main.rs:39:4 [INFO] [stdout] | [INFO] [stdout] 39 | fn dummy_client() { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `handle_client` [INFO] [stdout] --> src/main.rs:82:4 [INFO] [stdout] | [INFO] [stdout] 82 | fn handle_client(mut stream: TcpStream) { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `create_client_server` [INFO] [stdout] --> src/main.rs:106:4 [INFO] [stdout] | [INFO] [stdout] 106 | fn create_client_server() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/main.rs:117:17 [INFO] [stdout] | [INFO] [stdout] 117 | worker.join(); [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_must_use)]` on by default [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/main.rs:118:17 [INFO] [stdout] | [INFO] [stdout] 118 | dummy_client_thread.join(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/client.rs:218:21 [INFO] [stdout] | [INFO] [stdout] 218 | dummy_client_thread.join(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `ID` should have a snake case name [INFO] [stdout] --> src/message.rs:22:16 [INFO] [stdout] | [INFO] [stdout] 22 | pub(crate) ID: messageID, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `id` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_snake_case)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `Payload` should have a snake case name [INFO] [stdout] --> src/message.rs:23:16 [INFO] [stdout] | [INFO] [stdout] 23 | pub(crate) Payload: Vec, [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `payload` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/p2p.rs:150:9 [INFO] [stdout] | [INFO] [stdout] 150 | c.lock().unwrap().send_unchoke(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/p2p.rs:151:9 [INFO] [stdout] | [INFO] [stdout] 151 | c.lock().unwrap().send_interested(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/p2p.rs:178:21 [INFO] [stdout] | [INFO] [stdout] 178 | workQueue.lock().unwrap().0.send(pw); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/p2p.rs:183:21 [INFO] [stdout] | [INFO] [stdout] 183 | / results.send(PieceResult { [INFO] [stdout] 184 | | index: pindex2, [INFO] [stdout] 185 | | buf: cbuf, [INFO] [stdout] 186 | | }); [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/p2p.rs:219:13 [INFO] [stdout] | [INFO] [stdout] 219 | workQueue.lock().unwrap().0.send(work); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/torrentfile.rs:49:5 [INFO] [stdout] | [INFO] [stdout] 49 | outfile.read_to_end(&mut buffer); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 1m 26s [INFO] [stdout] warning: 134 warnings emitted [INFO] [stdout] [INFO] [stdout] [INFO] running `Command { std: "docker" "inspect" "0593f715024bc1edcb5a6a891a25c1f6b5dd0fae42a33360b5413c38ceb140d2", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "0593f715024bc1edcb5a6a891a25c1f6b5dd0fae42a33360b5413c38ceb140d2", kill_on_drop: false }` [INFO] [stdout] 0593f715024bc1edcb5a6a891a25c1f6b5dd0fae42a33360b5413c38ceb140d2