[INFO] cloning repository https://github.com/fewzfewz/Torrent [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/fewzfewz/Torrent" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ffewzfewz%2FTorrent", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ffewzfewz%2FTorrent'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 0ea723b3e9fe188ae83fa3de82de73d7cc893e09 [INFO] checking fewzfewz/Torrent against master#fd0c901b00ee1e08a250039cdb90258603497e20 for pr-153692 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ffewzfewz%2FTorrent" "/workspace/builds/worker-1-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/fewzfewz/Torrent [INFO] finished tweaking git repo https://github.com/fewzfewz/Torrent [INFO] tweaked toml for git repo https://github.com/fewzfewz/Torrent written to /workspace/builds/worker-1-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/fewzfewz/Torrent on toolchain fd0c901b00ee1e08a250039cdb90258603497e20 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+fd0c901b00ee1e08a250039cdb90258603497e20" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/fewzfewz/Torrent already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+fd0c901b00ee1e08a250039cdb90258603497e20" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded signal-hook-tokio v0.3.1 [INFO] [stderr] Downloaded axum-macros v0.4.2 [INFO] [stderr] Downloaded dns-lookup v2.1.1 [INFO] [stderr] Downloaded axum-extra v0.9.6 [INFO] [stderr] Downloaded simple_asn1 v0.6.4 [INFO] [stderr] Downloaded ratatui v0.24.0 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/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" "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" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+fd0c901b00ee1e08a250039cdb90258603497e20" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] f1a3d6ec71c4a65e3221d70eedeab55c71df6b87935633bbcbcc8e6a1f61095c [INFO] running `Command { std: "docker" "start" "-a" "f1a3d6ec71c4a65e3221d70eedeab55c71df6b87935633bbcbcc8e6a1f61095c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "f1a3d6ec71c4a65e3221d70eedeab55c71df6b87935633bbcbcc8e6a1f61095c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "f1a3d6ec71c4a65e3221d70eedeab55c71df6b87935633bbcbcc8e6a1f61095c", kill_on_drop: false }` [INFO] [stdout] f1a3d6ec71c4a65e3221d70eedeab55c71df6b87935633bbcbcc8e6a1f61095c [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/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" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+fd0c901b00ee1e08a250039cdb90258603497e20" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 3edc1cbe545b8af101197397ad9aef1d26b1516d936be25b8800b231b896819a [INFO] running `Command { std: "docker" "start" "-a" "3edc1cbe545b8af101197397ad9aef1d26b1516d936be25b8800b231b896819a", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.183 [INFO] [stderr] Checking tracing v0.1.44 [INFO] [stderr] Checking serde v1.0.228 [INFO] [stderr] Compiling zerocopy v0.8.42 [INFO] [stderr] Checking futures-util v0.3.32 [INFO] [stderr] Checking serde_json v1.0.149 [INFO] [stderr] Checking http v0.2.12 [INFO] [stderr] Checking aho-corasick v1.1.4 [INFO] [stderr] Checking icu_normalizer v2.1.1 [INFO] [stderr] Compiling ucd-trie v0.1.7 [INFO] [stderr] Compiling openssl v0.10.75 [INFO] [stderr] Checking winnow v0.7.15 [INFO] [stderr] Checking linked-hash-map v0.5.6 [INFO] [stderr] Checking nom v7.1.3 [INFO] [stderr] Checking lru v0.12.5 [INFO] [stderr] Compiling pest v2.8.6 [INFO] [stderr] Checking yaml-rust v0.4.5 [INFO] [stderr] Checking hashbrown v0.14.5 [INFO] [stderr] Compiling radium v0.7.0 [INFO] [stderr] Checking idna_adapter v1.2.1 [INFO] [stderr] Checking pathdiff v0.2.3 [INFO] [stderr] Checking idna v1.1.0 [INFO] [stderr] Compiling zstd-safe v7.2.4 [INFO] [stderr] Checking xml-rs v0.8.28 [INFO] [stderr] Checking wyz v0.5.1 [INFO] [stderr] Checking http-body v0.4.6 [INFO] [stderr] Checking serde_urlencoded v0.7.1 [INFO] [stderr] Checking url v2.5.8 [INFO] [stderr] Checking serde_spanned v0.6.9 [INFO] [stderr] Compiling jobserver v0.1.34 [INFO] [stderr] Compiling pest_meta v2.8.6 [INFO] [stderr] Checking toml_datetime v0.6.11 [INFO] [stderr] Checking tracing-serde v0.2.0 [INFO] [stderr] Checking toml v0.5.11 [INFO] [stderr] Checking regex-automata v0.4.14 [INFO] [stderr] Checking ron v0.7.1 [INFO] [stderr] Checking chrono v0.4.44 [INFO] [stderr] Checking humantime-serde v1.1.1 [INFO] [stderr] Checking bincode v1.3.3 [INFO] [stderr] Checking xmltree v0.10.3 [INFO] [stderr] Compiling cc v1.2.56 [INFO] [stderr] Checking funty v2.0.0 [INFO] [stderr] Checking data-encoding v2.10.0 [INFO] [stderr] Checking attohttpc v0.24.1 [INFO] [stderr] Checking urlencoding v2.1.3 [INFO] [stderr] Compiling thiserror v2.0.18 [INFO] [stderr] Compiling signal-hook v0.3.18 [INFO] [stderr] Compiling num-conv v0.2.0 [INFO] [stderr] Compiling darling_core v0.20.11 [INFO] [stderr] Compiling time-macros v0.2.27 [INFO] [stderr] Compiling multer v3.1.0 [INFO] [stderr] Checking bitvec v1.0.1 [INFO] [stderr] Compiling protobuf v2.28.0 [INFO] [stderr] Checking parking_lot_core v0.9.12 [INFO] [stderr] Checking errno v0.3.14 [INFO] [stderr] Checking socket2 v0.6.3 [INFO] [stderr] Checking mio v1.1.1 [INFO] [stderr] Checking parking_lot v0.12.5 [INFO] [stderr] Checking getrandom v0.2.17 [INFO] [stderr] Compiling pest_generator v2.8.6 [INFO] [stderr] Checking signal-hook-registry v1.4.8 [INFO] [stderr] Checking num_cpus v1.17.0 [INFO] [stderr] Checking dirs-sys v0.4.1 [INFO] [stderr] Checking socket2 v0.5.10 [INFO] [stderr] Checking toml_edit v0.22.27 [INFO] [stderr] Checking rand_core v0.6.4 [INFO] [stderr] Checking ahash v0.7.8 [INFO] [stderr] Checking hashbrown v0.12.3 [INFO] [stderr] Checking getrandom v0.4.2 [INFO] [stderr] Checking tokio v1.50.0 [INFO] [stderr] Checking futures-executor v0.3.32 [INFO] [stderr] Checking dirs v5.0.1 [INFO] [stderr] Checking directories v5.0.1 [INFO] [stderr] Checking dashmap v5.5.3 [INFO] [stderr] Checking futures v0.3.32 [INFO] [stderr] Checking uuid v1.22.0 [INFO] [stderr] Checking if-addrs v0.10.2 [INFO] [stderr] Checking axum-core v0.4.5 [INFO] [stderr] Checking serde_path_to_error v0.1.20 [INFO] [stderr] Compiling axum-macros v0.4.2 [INFO] [stderr] Checking ordered-multimap v0.4.3 [INFO] [stderr] Checking time v0.3.47 [INFO] [stderr] Compiling prometheus v0.13.4 [INFO] [stderr] Checking spin v0.9.8 [INFO] [stderr] Checking password-hash v0.5.0 [INFO] [stderr] Checking getrandom v0.1.16 [INFO] [stderr] Compiling pest_derive v2.8.6 [INFO] [stderr] Compiling rustix v1.1.4 [INFO] [stderr] Checking rand_core v0.5.1 [INFO] [stderr] Checking rust-ini v0.18.0 [INFO] [stderr] Checking json5 v0.4.1 [INFO] [stderr] Checking tower v0.4.13 [INFO] [stderr] Checking argon2 v0.5.3 [INFO] [stderr] Compiling proc-macro-error-attr2 v2.0.0 [INFO] [stderr] Checking linux-raw-sys v0.12.1 [INFO] [stderr] Compiling proc-macro-error2 v2.0.1 [INFO] [stderr] Checking mio v0.8.11 [INFO] [stderr] Checking config v0.13.4 [INFO] [stderr] Compiling openssl-sys v0.9.111 [INFO] [stderr] Compiling zstd-sys v2.0.16+zstd.1.5.7 [INFO] [stderr] Compiling ring v0.17.14 [INFO] [stderr] Checking waker-fn v1.2.0 [INFO] [stderr] Compiling http-types v2.12.0 [INFO] [stderr] Checking futures-lite v1.13.0 [INFO] [stderr] Checking async-channel v1.9.0 [INFO] [stderr] Compiling strum_macros v0.25.3 [INFO] [stderr] Compiling native-tls v0.2.18 [INFO] [stderr] Checking console v0.15.11 [INFO] [stderr] Checking toml v0.8.23 [INFO] [stderr] Compiling neli-proc-macros v0.2.2 [INFO] [stderr] Checking matchers v0.2.0 [INFO] [stderr] Checking tracing-subscriber v0.3.22 [INFO] [stderr] Checking simple_asn1 v0.6.4 [INFO] [stderr] Compiling darling_macro v0.20.11 [INFO] [stderr] Checking signal-hook-mio v0.2.5 [INFO] [stderr] Compiling getset v0.1.6 [INFO] [stderr] Checking serde_qs v0.8.5 [INFO] [stderr] Checking predicates-core v1.0.10 [INFO] [stderr] Checking deadpool-runtime v0.1.4 [INFO] [stderr] Checking ppv-lite86 v0.2.21 [INFO] [stderr] Compiling darling v0.20.11 [INFO] [stderr] Checking clap_lex v1.0.0 [INFO] [stderr] Compiling derive_builder_core v0.20.2 [INFO] [stderr] Checking infer v0.2.3 [INFO] [stderr] Checking retain_mut v0.1.9 [INFO] [stderr] Compiling clap_derive v4.5.55 [INFO] [stderr] Checking clap_builder v4.5.60 [INFO] [stderr] Checking crossterm v0.27.0 [INFO] [stderr] Checking regex v1.12.3 [INFO] [stderr] Checking rand_chacha v0.3.1 [INFO] [stderr] Checking rand_chacha v0.2.2 [INFO] [stderr] Checking assert-json-diff v2.0.2 [INFO] [stderr] Compiling assert_cmd v2.2.0 [INFO] [stderr] Checking rand v0.7.3 [INFO] [stderr] Checking rand v0.8.5 [INFO] [stderr] Checking difflib v0.4.0 [INFO] [stderr] Checking shell-words v1.1.1 [INFO] [stderr] Checking tempfile v3.27.0 [INFO] [stderr] Compiling indoc v2.0.7 [INFO] [stderr] Checking number_prefix v0.4.0 [INFO] [stderr] Checking futures-timer v3.0.3 [INFO] [stderr] Checking predicates-tree v1.0.13 [INFO] [stderr] Checking sysinfo v0.30.13 [INFO] [stderr] Checking predicates v3.1.4 [INFO] [stderr] Checking dialoguer v0.11.0 [INFO] [stderr] Checking indicatif v0.17.11 [INFO] [stderr] Checking strum v0.25.0 [INFO] [stderr] Checking bstr v1.12.1 [INFO] [stderr] Checking dns-lookup v2.1.1 [INFO] [stderr] Checking ratatui v0.24.0 [INFO] [stderr] Compiling derive_builder_macro v0.20.2 [INFO] [stderr] Checking nix v0.27.1 [INFO] [stderr] Checking igd-next v0.14.3 [INFO] [stderr] Checking tungstenite v0.24.0 [INFO] [stderr] Checking wait-timeout v0.2.1 [INFO] [stderr] Checking colored v2.2.0 [INFO] [stderr] Checking derive_builder v0.20.2 [INFO] [stderr] Checking neli v0.7.4 [INFO] [stderr] Checking tokio-util v0.7.18 [INFO] [stderr] Checking common v0.1.0 (/opt/rustwide/workdir/crates/common) [INFO] [stderr] Checking tokio-tungstenite v0.24.0 [INFO] [stderr] Checking tower v0.5.3 [INFO] [stderr] Checking deadpool v0.9.5 [INFO] [stderr] Checking clap v4.5.60 [INFO] [stderr] Checking signal-hook-tokio v0.3.1 [INFO] [stderr] Checking tokio-stream v0.1.18 [INFO] [stderr] Checking h2 v0.3.27 [INFO] [stderr] Checking h2 v0.4.13 [INFO] [stderr] Checking tokio-native-tls v0.3.1 [INFO] [stderr] Checking jsonwebtoken v9.3.1 [INFO] [stderr] Checking local-ip-address v0.6.10 [INFO] [stderr] Checking zstd v0.13.3 [INFO] [stderr] Checking compression-codecs v0.4.37 [INFO] [stderr] Checking async-compression v0.4.41 [INFO] [stderr] Checking tower-http v0.5.2 [INFO] [stderr] Checking hyper v1.8.1 [INFO] [stderr] Checking hyper v0.14.32 [INFO] [stderr] Checking hyper-util v0.1.20 [INFO] [stderr] Checking axum v0.7.9 [INFO] [stderr] Checking hyper-tls v0.5.0 [INFO] [stderr] Checking wiremock v0.5.22 [INFO] [stderr] Checking reqwest v0.11.27 [INFO] [stderr] Checking core v0.1.0 (/opt/rustwide/workdir/crates/core) [INFO] [stdout] warning: unused import: `std::path::PathBuf` [INFO] [stdout] --> crates/core/src/torrent.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 8 | use std::path::PathBuf; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Decoder` and `Value` [INFO] [stdout] --> crates/core/src/tracker.rs:4:22 [INFO] [stdout] | [INFO] [stdout] 4 | use crate::bencode::{Decoder, Value}; [INFO] [stdout] | ^^^^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `BTreeMap` [INFO] [stdout] --> crates/core/src/dht/routing_table.rs:3:24 [INFO] [stdout] | [INFO] [stdout] 3 | use std::collections::{BTreeMap, VecDeque}; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `debug` [INFO] [stdout] --> crates/core/src/dht/query.rs:13:15 [INFO] [stdout] | [INFO] [stdout] 13 | use tracing::{debug, warn}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `QueryManager` [INFO] [stdout] --> crates/core/src/dht/mod.rs:9:17 [INFO] [stdout] | [INFO] [stdout] 9 | pub use query::{QueryManager, QueryMessage}; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Sha1` [INFO] [stdout] --> crates/core/src/dht/mod.rs:22:12 [INFO] [stdout] | [INFO] [stdout] 22 | use sha1::{Sha1, Digest}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `BufMut` [INFO] [stdout] --> crates/core/src/peer/connection.rs:325:23 [INFO] [stdout] | [INFO] [stdout] 325 | use bytes::{BytesMut, BufMut}; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BufMut` and `BytesMut` [INFO] [stdout] --> crates/core/src/peer/message.rs:3:13 [INFO] [stdout] | [INFO] [stdout] 3 | use bytes::{BytesMut, BufMut}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `PeerMessageId` [INFO] [stdout] --> crates/core/src/peer/peer_wire.rs:93:35 [INFO] [stdout] | [INFO] [stdout] 93 | use super::message::{PeerMessage, PeerMessageId}; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `handshake::Handshake` [INFO] [stdout] --> crates/core/src/peer/mod.rs:9:9 [INFO] [stdout] | [INFO] [stdout] 9 | pub use handshake::Handshake; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::path::PathBuf` [INFO] [stdout] --> crates/core/src/torrent.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 8 | use std::path::PathBuf; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `PeerMessageId` and `PeerMessage` [INFO] [stdout] --> crates/core/src/peer/mod.rs:10:19 [INFO] [stdout] | [INFO] [stdout] 10 | pub use message::{PeerMessage, PeerMessageId}; [INFO] [stdout] | ^^^^^^^^^^^ ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Path` [INFO] [stdout] --> crates/core/src/pieces/piece_manager.rs:6:17 [INFO] [stdout] | [INFO] [stdout] 6 | use std::path::{Path, PathBuf}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `RwLock` [INFO] [stdout] --> crates/core/src/pieces/piece_manager.rs:8:26 [INFO] [stdout] | [INFO] [stdout] 8 | use tokio::sync::{Mutex, RwLock}; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `debug` [INFO] [stdout] --> crates/core/src/pieces/piece_manager.rs:9:21 [INFO] [stdout] | [INFO] [stdout] 9 | use tracing::{info, debug}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `VecDeque` [INFO] [stdout] --> crates/core/src/pieces/piece_picker.rs:4:33 [INFO] [stdout] | [INFO] [stdout] 4 | use std::collections::{HashMap, VecDeque}; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::sync::Arc` [INFO] [stdout] --> crates/core/src/pieces/hash_checker.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use std::sync::Arc; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `PieceInfo` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:7:39 [INFO] [stdout] | [INFO] [stdout] 7 | pub use piece_manager::{PieceManager, PieceInfo}; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `SelectionMode` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:8:37 [INFO] [stdout] | [INFO] [stdout] 8 | pub use piece_picker::{PiecePicker, SelectionMode}; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `hash_checker::HashChecker` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:9:9 [INFO] [stdout] | [INFO] [stdout] 9 | pub use hash_checker::HashChecker; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::error::Error` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:11:5 [INFO] [stdout] | [INFO] [stdout] 11 | use crate::error::Error; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `common::types::TorrentFile` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:12:5 [INFO] [stdout] | [INFO] [stdout] 12 | use common::types::TorrentFile; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::path::PathBuf` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:13:5 [INFO] [stdout] | [INFO] [stdout] 13 | use std::path::PathBuf; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::sync::Arc` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:14:5 [INFO] [stdout] | [INFO] [stdout] 14 | use std::sync::Arc; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `tokio::sync::Mutex` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 15 | use tokio::sync::Mutex; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Path` [INFO] [stdout] --> crates/core/src/storage/disk_writer.rs:4:17 [INFO] [stdout] | [INFO] [stdout] 4 | use std::path::{Path, PathBuf}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `debug` [INFO] [stdout] --> crates/core/src/storage/disk_writer.rs:9:15 [INFO] [stdout] | [INFO] [stdout] 9 | use tracing::{debug, error}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Mutex` [INFO] [stdout] --> crates/core/src/storage/file_manager.rs:9:19 [INFO] [stdout] | [INFO] [stdout] 9 | use tokio::sync::{Mutex, RwLock}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `disk_writer::DiskWriter` [INFO] [stdout] --> crates/core/src/storage/mod.rs:7:9 [INFO] [stdout] | [INFO] [stdout] 7 | pub use disk_writer::DiskWriter; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `memory_cache::MemoryCache` [INFO] [stdout] --> crates/core/src/storage/mod.rs:8:9 [INFO] [stdout] | [INFO] [stdout] 8 | pub use memory_cache::MemoryCache; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `file_manager::FileManager` [INFO] [stdout] --> crates/core/src/storage/mod.rs:9:9 [INFO] [stdout] | [INFO] [stdout] 9 | pub use file_manager::FileManager; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `PieceManager` [INFO] [stdout] --> crates/core/src/downloader.rs:5:21 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::pieces::{PieceManager, PiecePicker}; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `TorrentState` [INFO] [stdout] --> crates/core/src/downloader.rs:8:31 [INFO] [stdout] | [INFO] [stdout] 8 | use common::types::{PeerInfo, TorrentState}; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `mpsc` [INFO] [stdout] --> crates/core/src/downloader.rs:12:34 [INFO] [stdout] | [INFO] [stdout] 12 | use tokio::sync::{Mutex, RwLock, mpsc}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Decoder` and `Value` [INFO] [stdout] --> crates/core/src/tracker.rs:4:22 [INFO] [stdout] | [INFO] [stdout] 4 | use crate::bencode::{Decoder, Value}; [INFO] [stdout] | ^^^^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `BTreeMap` [INFO] [stdout] --> crates/core/src/dht/routing_table.rs:3:24 [INFO] [stdout] | [INFO] [stdout] 3 | use std::collections::{BTreeMap, VecDeque}; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `debug` [INFO] [stdout] --> crates/core/src/dht/query.rs:13:15 [INFO] [stdout] | [INFO] [stdout] 13 | use tracing::{debug, warn}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `QueryManager` [INFO] [stdout] --> crates/core/src/dht/mod.rs:9:17 [INFO] [stdout] | [INFO] [stdout] 9 | pub use query::{QueryManager, QueryMessage}; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Sha1` [INFO] [stdout] --> crates/core/src/dht/mod.rs:22:12 [INFO] [stdout] | [INFO] [stdout] 22 | use sha1::{Sha1, Digest}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `BufMut` [INFO] [stdout] --> crates/core/src/peer/connection.rs:325:23 [INFO] [stdout] | [INFO] [stdout] 325 | use bytes::{BytesMut, BufMut}; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BufMut` and `BytesMut` [INFO] [stdout] --> crates/core/src/peer/message.rs:3:13 [INFO] [stdout] | [INFO] [stdout] 3 | use bytes::{BytesMut, BufMut}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `PeerMessageId` [INFO] [stdout] --> crates/core/src/peer/peer_wire.rs:93:35 [INFO] [stdout] | [INFO] [stdout] 93 | use super::message::{PeerMessage, PeerMessageId}; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `handshake::Handshake` [INFO] [stdout] --> crates/core/src/peer/mod.rs:9:9 [INFO] [stdout] | [INFO] [stdout] 9 | pub use handshake::Handshake; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `PeerMessageId` and `PeerMessage` [INFO] [stdout] --> crates/core/src/peer/mod.rs:10:19 [INFO] [stdout] | [INFO] [stdout] 10 | pub use message::{PeerMessage, PeerMessageId}; [INFO] [stdout] | ^^^^^^^^^^^ ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Path` [INFO] [stdout] --> crates/core/src/pieces/piece_manager.rs:6:17 [INFO] [stdout] | [INFO] [stdout] 6 | use std::path::{Path, PathBuf}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `RwLock` [INFO] [stdout] --> crates/core/src/pieces/piece_manager.rs:8:26 [INFO] [stdout] | [INFO] [stdout] 8 | use tokio::sync::{Mutex, RwLock}; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `debug` [INFO] [stdout] --> crates/core/src/pieces/piece_manager.rs:9:21 [INFO] [stdout] | [INFO] [stdout] 9 | use tracing::{info, debug}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `VecDeque` [INFO] [stdout] --> crates/core/src/pieces/piece_picker.rs:4:33 [INFO] [stdout] | [INFO] [stdout] 4 | use std::collections::{HashMap, VecDeque}; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::sync::Arc` [INFO] [stdout] --> crates/core/src/pieces/hash_checker.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use std::sync::Arc; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `PieceInfo` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:7:39 [INFO] [stdout] | [INFO] [stdout] 7 | pub use piece_manager::{PieceManager, PieceInfo}; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `SelectionMode` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:8:37 [INFO] [stdout] | [INFO] [stdout] 8 | pub use piece_picker::{PiecePicker, SelectionMode}; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `hash_checker::HashChecker` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:9:9 [INFO] [stdout] | [INFO] [stdout] 9 | pub use hash_checker::HashChecker; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::error::Error` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:11:5 [INFO] [stdout] | [INFO] [stdout] 11 | use crate::error::Error; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `common::types::TorrentFile` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:12:5 [INFO] [stdout] | [INFO] [stdout] 12 | use common::types::TorrentFile; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::path::PathBuf` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:13:5 [INFO] [stdout] | [INFO] [stdout] 13 | use std::path::PathBuf; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::sync::Arc` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:14:5 [INFO] [stdout] | [INFO] [stdout] 14 | use std::sync::Arc; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::pieces::PieceManager` [INFO] [stdout] --> crates/core/src/uploader.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::pieces::PieceManager; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `tokio::sync::Mutex` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 15 | use tokio::sync::Mutex; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `tokio::time` [INFO] [stdout] --> crates/core/src/uploader.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | use tokio::time; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `info` [INFO] [stdout] --> crates/core/src/uploader.rs:10:22 [INFO] [stdout] | [INFO] [stdout] 10 | use tracing::{debug, info}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Path` [INFO] [stdout] --> crates/core/src/storage/disk_writer.rs:4:17 [INFO] [stdout] | [INFO] [stdout] 4 | use std::path::{Path, PathBuf}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `debug` [INFO] [stdout] --> crates/core/src/storage/disk_writer.rs:9:15 [INFO] [stdout] | [INFO] [stdout] 9 | use tracing::{debug, error}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Mutex` [INFO] [stdout] --> crates/core/src/storage/file_manager.rs:9:19 [INFO] [stdout] | [INFO] [stdout] 9 | use tokio::sync::{Mutex, RwLock}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `disk_writer::DiskWriter` [INFO] [stdout] --> crates/core/src/storage/mod.rs:7:9 [INFO] [stdout] | [INFO] [stdout] 7 | pub use disk_writer::DiskWriter; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `memory_cache::MemoryCache` [INFO] [stdout] --> crates/core/src/storage/mod.rs:8:9 [INFO] [stdout] | [INFO] [stdout] 8 | pub use memory_cache::MemoryCache; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `tracing::debug` [INFO] [stdout] --> crates/core/src/peer_discovery.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | use tracing::debug; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `file_manager::FileManager` [INFO] [stdout] --> crates/core/src/storage/mod.rs:9:9 [INFO] [stdout] | [INFO] [stdout] 9 | pub use file_manager::FileManager; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `debug` and `info` [INFO] [stdout] --> crates/core/src/node_manager.rs:11:15 [INFO] [stdout] | [INFO] [stdout] 11 | use tracing::{info, debug}; [INFO] [stdout] | ^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `PieceManager` [INFO] [stdout] --> crates/core/src/downloader.rs:5:21 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::pieces::{PieceManager, PiecePicker}; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `TorrentState` [INFO] [stdout] --> crates/core/src/downloader.rs:8:31 [INFO] [stdout] | [INFO] [stdout] 8 | use common::types::{PeerInfo, TorrentState}; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `mpsc` [INFO] [stdout] --> crates/core/src/downloader.rs:12:34 [INFO] [stdout] | [INFO] [stdout] 12 | use tokio::sync::{Mutex, RwLock, mpsc}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::pieces::PieceManager` [INFO] [stdout] --> crates/core/src/uploader.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::pieces::PieceManager; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `tokio::time` [INFO] [stdout] --> crates/core/src/uploader.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | use tokio::time; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `info` [INFO] [stdout] --> crates/core/src/uploader.rs:10:22 [INFO] [stdout] | [INFO] [stdout] 10 | use tracing::{debug, info}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `tracing::debug` [INFO] [stdout] --> crates/core/src/peer_discovery.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | use tracing::debug; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `debug` and `info` [INFO] [stdout] --> crates/core/src/node_manager.rs:11:15 [INFO] [stdout] | [INFO] [stdout] 11 | use tracing::{info, debug}; [INFO] [stdout] | ^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> crates/core/src/dht/mod.rs:42:18 [INFO] [stdout] | [INFO] [stdout] 42 | let (tx, mut rx) = mpsc::channel(1000); [INFO] [stdout] | ----^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> crates/core/src/peer/connection.rs:414:17 [INFO] [stdout] | [INFO] [stdout] 414 | let mut buf = BytesMut::with_capacity(4096); [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] --> crates/core/src/dht/mod.rs:42:18 [INFO] [stdout] | [INFO] [stdout] 42 | let (tx, mut rx) = mpsc::channel(1000); [INFO] [stdout] | ----^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> crates/core/src/pieces/piece_manager.rs:181:13 [INFO] [stdout] | [INFO] [stdout] 181 | let mut piece_data = Vec::with_capacity(self.piece_length as usize); [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] --> crates/core/src/peer/connection.rs:414:17 [INFO] [stdout] | [INFO] [stdout] 414 | let mut buf = BytesMut::with_capacity(4096); [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] --> crates/core/src/pieces/piece_manager.rs:220:13 [INFO] [stdout] | [INFO] [stdout] 220 | let mut offset_in_piece = 0; [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] --> crates/core/src/pieces/piece_manager.rs:181:13 [INFO] [stdout] | [INFO] [stdout] 181 | let mut piece_data = Vec::with_capacity(self.piece_length as usize); [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] --> crates/core/src/pieces/piece_manager.rs:220:13 [INFO] [stdout] | [INFO] [stdout] 220 | let mut offset_in_piece = 0; [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] --> crates/core/src/lib.rs:440:13 [INFO] [stdout] | [INFO] [stdout] 440 | for mut entry in self.torrents.iter_mut() { [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] --> crates/core/src/lib.rs:440:13 [INFO] [stdout] | [INFO] [stdout] 440 | for mut entry in self.torrents.iter_mut() { [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Digest` [INFO] [stdout] --> crates/core/src/dht/mod.rs:22:18 [INFO] [stdout] | [INFO] [stdout] 22 | use sha1::{Sha1, Digest}; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Digest` [INFO] [stdout] --> crates/core/src/dht/mod.rs:22:18 [INFO] [stdout] | [INFO] [stdout] 22 | use sha1::{Sha1, Digest}; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `addr` [INFO] [stdout] --> crates/core/src/dht/query.rs:220:26 [INFO] [stdout] | [INFO] [stdout] 220 | Ok((len, addr)) => { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_addr` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `msg` [INFO] [stdout] --> crates/core/src/dht/query.rs:200:71 [INFO] [stdout] | [INFO] [stdout] 200 | async fn send_query(&self, transaction_id: u32, addr: SocketAddr, msg: QueryMessage) -> Result<(), Error> { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_msg` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `config` [INFO] [stdout] --> crates/core/src/dht/mod.rs:37:22 [INFO] [stdout] | [INFO] [stdout] 37 | pub async fn new(config: &Config) -> Result { [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_config` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `addr` [INFO] [stdout] --> crates/core/src/dht/query.rs:220:26 [INFO] [stdout] | [INFO] [stdout] 220 | Ok((len, addr)) => { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_addr` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `port` [INFO] [stdout] --> crates/core/src/dht/mod.rs:114:61 [INFO] [stdout] | [INFO] [stdout] 114 | QueryMessage::AnnouncePeer { id, info_hash, port, .. } => { [INFO] [stdout] | ^^^^ help: try ignoring the field: `port: _` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `msg` [INFO] [stdout] --> crates/core/src/dht/query.rs:200:71 [INFO] [stdout] | [INFO] [stdout] 200 | async fn send_query(&self, transaction_id: u32, addr: SocketAddr, msg: QueryMessage) -> Result<(), Error> { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_msg` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `config` [INFO] [stdout] --> crates/core/src/dht/mod.rs:37:22 [INFO] [stdout] | [INFO] [stdout] 37 | pub async fn new(config: &Config) -> Result { [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_config` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `buf` [INFO] [stdout] --> crates/core/src/peer/connection.rs:414:17 [INFO] [stdout] | [INFO] [stdout] 414 | let mut buf = BytesMut::with_capacity(4096); [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_buf` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `port` [INFO] [stdout] --> crates/core/src/dht/mod.rs:114:61 [INFO] [stdout] | [INFO] [stdout] 114 | QueryMessage::AnnouncePeer { id, info_hash, port, .. } => { [INFO] [stdout] | ^^^^ help: try ignoring the field: `port: _` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `buf` [INFO] [stdout] --> crates/core/src/peer/connection.rs:414:17 [INFO] [stdout] | [INFO] [stdout] 414 | let mut buf = BytesMut::with_capacity(4096); [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_buf` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `block_count` [INFO] [stdout] --> crates/core/src/pieces/piece_manager.rs:183:13 [INFO] [stdout] | [INFO] [stdout] 183 | let block_count = (self.pieces[piece_index as usize].length as f64 / block_size as f64).ceil() as usize; [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_block_count` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `offset_in_piece` [INFO] [stdout] --> crates/core/src/pieces/piece_manager.rs:220:13 [INFO] [stdout] | [INFO] [stdout] 220 | let mut offset_in_piece = 0; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_offset_in_piece` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> crates/core/src/pieces/piece_picker.rs:91:13 [INFO] [stdout] | [INFO] [stdout] 91 | let mut piece_rarity = vec![0; self.piece_count]; [INFO] [stdout] | ----^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `piece_rarity` [INFO] [stdout] --> crates/core/src/pieces/piece_picker.rs:91:13 [INFO] [stdout] | [INFO] [stdout] 91 | let mut piece_rarity = vec![0; self.piece_count]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_piece_rarity` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `block_count` [INFO] [stdout] --> crates/core/src/pieces/piece_manager.rs:183:13 [INFO] [stdout] | [INFO] [stdout] 183 | let block_count = (self.pieces[piece_index as usize].length as f64 / block_size as f64).ceil() as usize; [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_block_count` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `offset_in_piece` [INFO] [stdout] --> crates/core/src/pieces/piece_manager.rs:220:13 [INFO] [stdout] | [INFO] [stdout] 220 | let mut offset_in_piece = 0; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_offset_in_piece` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `piece_index` [INFO] [stdout] --> crates/core/src/pieces/hash_checker.rs:58:9 [INFO] [stdout] | [INFO] [stdout] 58 | piece_index: u32, [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_piece_index` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `priority_pieces` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:113:9 [INFO] [stdout] | [INFO] [stdout] 113 | priority_pieces: &[u32], [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_priority_pieces` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `partial_pieces` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:114:9 [INFO] [stdout] | [INFO] [stdout] 114 | partial_pieces: &[(u32, usize)], [INFO] [stdout] | ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_partial_pieces` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `priority_pieces` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:133:9 [INFO] [stdout] | [INFO] [stdout] 133 | priority_pieces: &[u32], [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_priority_pieces` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `partial_pieces` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:134:9 [INFO] [stdout] | [INFO] [stdout] 134 | partial_pieces: &[(u32, usize)], [INFO] [stdout] | ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_partial_pieces` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `priority_pieces` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:160:9 [INFO] [stdout] | [INFO] [stdout] 160 | priority_pieces: &[u32], [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_priority_pieces` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `partial_pieces` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:161:9 [INFO] [stdout] | [INFO] [stdout] 161 | partial_pieces: &[(u32, usize)], [INFO] [stdout] | ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_partial_pieces` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `priority_pieces` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:184:9 [INFO] [stdout] | [INFO] [stdout] 184 | priority_pieces: &[u32], [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_priority_pieces` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> crates/core/src/pieces/piece_picker.rs:91:13 [INFO] [stdout] | [INFO] [stdout] 91 | let mut piece_rarity = vec![0; self.piece_count]; [INFO] [stdout] | ----^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `piece_rarity` [INFO] [stdout] --> crates/core/src/pieces/piece_picker.rs:91:13 [INFO] [stdout] | [INFO] [stdout] 91 | let mut piece_rarity = vec![0; self.piece_count]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_piece_rarity` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `piece_index` [INFO] [stdout] --> crates/core/src/pieces/hash_checker.rs:58:9 [INFO] [stdout] | [INFO] [stdout] 58 | piece_index: u32, [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_piece_index` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `old_key` [INFO] [stdout] --> crates/core/src/storage/memory_cache.rs:63:26 [INFO] [stdout] | [INFO] [stdout] 63 | if let Some((old_key, old_entry)) = cache.pop_lru() { [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_old_key` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `priority_pieces` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:113:9 [INFO] [stdout] | [INFO] [stdout] 113 | priority_pieces: &[u32], [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_priority_pieces` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `partial_pieces` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:114:9 [INFO] [stdout] | [INFO] [stdout] 114 | partial_pieces: &[(u32, usize)], [INFO] [stdout] | ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_partial_pieces` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `priority_pieces` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:133:9 [INFO] [stdout] | [INFO] [stdout] 133 | priority_pieces: &[u32], [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_priority_pieces` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `partial_pieces` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:134:9 [INFO] [stdout] | [INFO] [stdout] 134 | partial_pieces: &[(u32, usize)], [INFO] [stdout] | ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_partial_pieces` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `priority_pieces` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:160:9 [INFO] [stdout] | [INFO] [stdout] 160 | priority_pieces: &[u32], [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_priority_pieces` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `partial_pieces` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:161:9 [INFO] [stdout] | [INFO] [stdout] 161 | partial_pieces: &[(u32, usize)], [INFO] [stdout] | ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_partial_pieces` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `priority_pieces` [INFO] [stdout] --> crates/core/src/pieces/mod.rs:184:9 [INFO] [stdout] | [INFO] [stdout] 184 | priority_pieces: &[u32], [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_priority_pieces` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `file_start` [INFO] [stdout] --> crates/core/src/storage/file_manager.rs:59:21 [INFO] [stdout] | [INFO] [stdout] 59 | let (_, file_start, file_end) = self.file_offsets.iter() [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_file_start` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `file_offset` [INFO] [stdout] --> crates/core/src/storage/file_manager.rs:82:29 [INFO] [stdout] | [INFO] [stdout] 82 | let (file_path, file_offset) = self.resolve_offset(current_pos)?; [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_file_offset` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `writer` [INFO] [stdout] --> crates/core/src/storage/file_manager.rs:83:17 [INFO] [stdout] | [INFO] [stdout] 83 | let writer = self.get_writer(&file_path).await?; [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_writer` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `file_start` [INFO] [stdout] --> crates/core/src/storage/file_manager.rs:85:21 [INFO] [stdout] | [INFO] [stdout] 85 | let (_, file_start, file_end) = self.file_offsets.iter() [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_file_start` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `old_key` [INFO] [stdout] --> crates/core/src/storage/memory_cache.rs:63:26 [INFO] [stdout] | [INFO] [stdout] 63 | if let Some((old_key, old_entry)) = cache.pop_lru() { [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_old_key` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `file_start` [INFO] [stdout] --> crates/core/src/storage/file_manager.rs:59:21 [INFO] [stdout] | [INFO] [stdout] 59 | let (_, file_start, file_end) = self.file_offsets.iter() [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_file_start` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `file_offset` [INFO] [stdout] --> crates/core/src/storage/file_manager.rs:82:29 [INFO] [stdout] | [INFO] [stdout] 82 | let (file_path, file_offset) = self.resolve_offset(current_pos)?; [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_file_offset` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `writer` [INFO] [stdout] --> crates/core/src/storage/file_manager.rs:83:17 [INFO] [stdout] | [INFO] [stdout] 83 | let writer = self.get_writer(&file_path).await?; [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_writer` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `file_start` [INFO] [stdout] --> crates/core/src/storage/file_manager.rs:85:21 [INFO] [stdout] | [INFO] [stdout] 85 | let (_, file_start, file_end) = self.file_offsets.iter() [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_file_start` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `peer` [INFO] [stdout] --> crates/core/src/downloader.rs:285:13 [INFO] [stdout] | [INFO] [stdout] 285 | for peer in peers.iter() { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_peer` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `stream` [INFO] [stdout] --> crates/core/src/p2p_network.rs:57:25 [INFO] [stdout] | [INFO] [stdout] 57 | Ok((stream, addr)) => { [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_stream` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `mgr` [INFO] [stdout] --> crates/core/src/p2p_network.rs:53:13 [INFO] [stdout] | [INFO] [stdout] 53 | let mgr = self.clone(); [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_mgr` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `connection` [INFO] [stdout] --> crates/core/src/p2p_network.rs:71:43 [INFO] [stdout] | [INFO] [stdout] 71 | async fn handle_new_connection(&self, connection: PeerConnection) { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_connection` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `peer` [INFO] [stdout] --> crates/core/src/downloader.rs:285:13 [INFO] [stdout] | [INFO] [stdout] 285 | for peer in peers.iter() { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_peer` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `info_hash` [INFO] [stdout] --> crates/core/src/peer_discovery.rs:62:38 [INFO] [stdout] | [INFO] [stdout] 62 | async fn discover_via_dht(&self, info_hash: &InfoHash) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_info_hash` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `info_hash` [INFO] [stdout] --> crates/core/src/peer_discovery.rs:67:43 [INFO] [stdout] | [INFO] [stdout] 67 | async fn discover_via_trackers(&self, info_hash: &InfoHash) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_info_hash` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `info_hash` [INFO] [stdout] --> crates/core/src/peer_discovery.rs:72:38 [INFO] [stdout] | [INFO] [stdout] 72 | async fn discover_via_lsd(&self, info_hash: &InfoHash) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_info_hash` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `max_age` [INFO] [stdout] --> crates/core/src/peer_discovery.rs:89:37 [INFO] [stdout] | [INFO] [stdout] 89 | pub async fn clear_stale(&self, max_age: std::time::Duration) { [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_max_age` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `stream` [INFO] [stdout] --> crates/core/src/p2p_network.rs:57:25 [INFO] [stdout] | [INFO] [stdout] 57 | Ok((stream, addr)) => { [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_stream` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `mgr` [INFO] [stdout] --> crates/core/src/p2p_network.rs:53:13 [INFO] [stdout] | [INFO] [stdout] 53 | let mgr = self.clone(); [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_mgr` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `connection` [INFO] [stdout] --> crates/core/src/p2p_network.rs:71:43 [INFO] [stdout] | [INFO] [stdout] 71 | async fn handle_new_connection(&self, connection: PeerConnection) { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_connection` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `torrents` [INFO] [stdout] --> crates/core/src/lib.rs:105:42 [INFO] [stdout] | [INFO] [stdout] 105 | async fn load_state(config: &Config, torrents: &DashMap) -> Result<()> { [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_torrents` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `download_path` [INFO] [stdout] --> crates/core/src/lib.rs:183:13 [INFO] [stdout] | [INFO] [stdout] 183 | let download_path = self.config.paths.download_path.join(&name); [INFO] [stdout] | ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_download_path` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `info_hash` [INFO] [stdout] --> crates/core/src/peer_discovery.rs:62:38 [INFO] [stdout] | [INFO] [stdout] 62 | async fn discover_via_dht(&self, info_hash: &InfoHash) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_info_hash` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `info_hash` [INFO] [stdout] --> crates/core/src/peer_discovery.rs:67:43 [INFO] [stdout] | [INFO] [stdout] 67 | async fn discover_via_trackers(&self, info_hash: &InfoHash) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_info_hash` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `info_hash` [INFO] [stdout] --> crates/core/src/peer_discovery.rs:72:38 [INFO] [stdout] | [INFO] [stdout] 72 | async fn discover_via_lsd(&self, info_hash: &InfoHash) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_info_hash` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `max_age` [INFO] [stdout] --> crates/core/src/peer_discovery.rs:89:37 [INFO] [stdout] | [INFO] [stdout] 89 | pub async fn clear_stale(&self, max_age: std::time::Duration) { [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_max_age` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `torrents` [INFO] [stdout] --> crates/core/src/lib.rs:105:42 [INFO] [stdout] | [INFO] [stdout] 105 | async fn load_state(config: &Config, torrents: &DashMap) -> Result<()> { [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_torrents` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `download_path` [INFO] [stdout] --> crates/core/src/lib.rs:183:13 [INFO] [stdout] | [INFO] [stdout] 183 | let download_path = self.config.paths.download_path.join(&name); [INFO] [stdout] | ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_download_path` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `NodeStats` is more private than the item `NodeManager::stats` [INFO] [stdout] --> crates/core/src/node_manager.rs:88:5 [INFO] [stdout] | [INFO] [stdout] 88 | pub async fn stats(&self) -> NodeStats { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method `NodeManager::stats` is reachable at visibility `pub` [INFO] [stdout] | [INFO] [stdout] note: but type `NodeStats` is only usable at visibility `pub(self)` [INFO] [stdout] --> crates/core/src/node_manager.rs:22:1 [INFO] [stdout] | [INFO] [stdout] 22 | struct NodeStats { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] = note: `#[warn(private_interfaces)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `stats` is never read [INFO] [stdout] --> crates/core/src/lib.rs:43:5 [INFO] [stdout] | [INFO] [stdout] 37 | pub struct BitTorrentClient { [INFO] [stdout] | ---------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 43 | stats: Arc>, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `BitTorrentClient` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `ALPHABET` is never used [INFO] [stdout] --> crates/core/src/torrent.rs:309:11 [INFO] [stdout] | [INFO] [stdout] 309 | const ALPHABET: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `ALPHABET` is never used [INFO] [stdout] --> crates/core/src/torrent.rs:313:11 [INFO] [stdout] | [INFO] [stdout] 313 | const ALPHABET: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `tx` is never read [INFO] [stdout] --> crates/core/src/dht/mod.rs:33:5 [INFO] [stdout] | [INFO] [stdout] 28 | pub struct DhtNode { [INFO] [stdout] | ------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 33 | tx: mpsc::Sender, [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = note: `DhtNode` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `remove_node`, `mark_failed`, `refresh_stale`, `size`, and `all_nodes` are never used [INFO] [stdout] --> crates/core/src/dht/routing_table.rs:115:12 [INFO] [stdout] | [INFO] [stdout] 29 | impl RoutingTable { [INFO] [stdout] | ----------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 115 | pub fn remove_node(&mut self, node_id: &[u8; 20]) { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 126 | pub fn mark_failed(&mut self, node_id: &[u8; 20]) { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 142 | pub fn refresh_stale(&mut self) -> Vec<[u8; 20]> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 170 | pub fn size(&self) -> usize { [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 174 | pub fn all_nodes(&self) -> Vec { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `QUERY_TIMEOUT` is never used [INFO] [stdout] --> crates/core/src/dht/query.rs:18:7 [INFO] [stdout] | [INFO] [stdout] 18 | const QUERY_TIMEOUT: Duration = Duration::from_secs(5); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_CONCURRENT_QUERIES` is never used [INFO] [stdout] --> crates/core/src/dht/query.rs:19:7 [INFO] [stdout] | [INFO] [stdout] 19 | const MAX_CONCURRENT_QUERIES: usize = 8; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> crates/core/src/dht/query.rs:24:5 [INFO] [stdout] | [INFO] [stdout] 22 | pub enum QueryMessage { [INFO] [stdout] | ------------ variants in this enum [INFO] [stdout] 23 | Ping { id: [u8; 20] }, [INFO] [stdout] 24 | Pong { id: [u8; 20] }, [INFO] [stdout] | ^^^^ [INFO] [stdout] 25 | FindNode { id: [u8; 20], target: [u8; 20] }, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 26 | FindNodeResponse { id: [u8; 20], nodes: Vec }, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 27 | GetPeers { id: [u8; 20], info_hash: [u8; 20] }, [INFO] [stdout] 28 | GetPeersResponse { id: [u8; 20], token: [u8; 8], peers: Vec, nodes: Vec }, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 29 | AnnouncePeer { id: [u8; 20], info_hash: [u8; 20], token: [u8; 8], port: u16 }, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 30 | AnnouncePeerResponse { id: [u8; 20] }, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 31 | Error { id: [u8; 20], message: String }, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `QueryMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `QueryManager` is never constructed [INFO] [stdout] --> crates/core/src/dht/query.rs:48:12 [INFO] [stdout] | [INFO] [stdout] 48 | pub struct QueryManager { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> crates/core/src/dht/query.rs:55:12 [INFO] [stdout] | [INFO] [stdout] 54 | impl QueryManager { [INFO] [stdout] | ----------------- associated items in this implementation [INFO] [stdout] 55 | pub fn new(socket: Arc, routing_table: Arc>) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 72 | pub async fn ping(&self, addr: SocketAddr) -> Result<(), Error> { [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 88 | pub async fn find_node(&self, target: [u8; 20]) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 108 | pub async fn get_peers(&self, info_hash: &[u8; 20]) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 149 | pub async fn announce_peer(&self, info_hash: &[u8; 20], port: u16) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 169 | async fn query_node(&self, addr: SocketAddr, transaction_id: u32, msg: QueryMessage) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 186 | async fn query_peers(&self, addr: SocketAddr, transaction_id: u32, msg: QueryMessage) -> Result<(Vec, Vec),... [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 200 | async fn send_query(&self, transaction_id: u32, addr: SocketAddr, msg: QueryMessage) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 209 | async fn create_pending(&self, transaction_id: u32) -> mpsc::Receiver { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 215 | async fn handle_responses(&self) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `am_interested` is never read [INFO] [stdout] --> crates/core/src/peer/connection.rs:341:5 [INFO] [stdout] | [INFO] [stdout] 333 | pub struct PeerConnection { [INFO] [stdout] | -------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 341 | am_interested: bool, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `PeerConnection` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `write_message` is never used [INFO] [stdout] --> crates/core/src/peer/connection.rs:532:14 [INFO] [stdout] | [INFO] [stdout] 347 | impl PeerConnection { [INFO] [stdout] | ------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 532 | async fn write_message(&self, msg: PeerMessage) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_MESSAGE_SIZE` is never used [INFO] [stdout] --> crates/core/src/peer/peer_wire.rs:100:7 [INFO] [stdout] | [INFO] [stdout] 100 | const MAX_MESSAGE_SIZE: usize = 16 * 1024 * 1024; // 16MB [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `READ_TIMEOUT` is never used [INFO] [stdout] --> crates/core/src/peer/peer_wire.rs:101:7 [INFO] [stdout] | [INFO] [stdout] 101 | const READ_TIMEOUT: Duration = Duration::from_secs(30); [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `WRITE_TIMEOUT` is never used [INFO] [stdout] --> crates/core/src/peer/peer_wire.rs:102:7 [INFO] [stdout] | [INFO] [stdout] 102 | const WRITE_TIMEOUT: Duration = Duration::from_secs(30); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `PeerWire` is never constructed [INFO] [stdout] --> crates/core/src/peer/peer_wire.rs:104:12 [INFO] [stdout] | [INFO] [stdout] 104 | pub struct PeerWire { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `read_message`, `write_message`, and `close` are never used [INFO] [stdout] --> crates/core/src/peer/peer_wire.rs:110:12 [INFO] [stdout] | [INFO] [stdout] 109 | impl PeerWire { [INFO] [stdout] | ------------- associated items in this implementation [INFO] [stdout] 110 | pub fn new(stream: TcpStream) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 117 | pub async fn read_message(&mut self) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 164 | pub async fn write_message(&mut self, message: &PeerMessage) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 173 | pub async fn close(&mut self) -> Result<(), Error> { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Block` is never constructed [INFO] [stdout] --> crates/core/src/pieces/mod.rs:19:12 [INFO] [stdout] | [INFO] [stdout] 19 | pub struct Block { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `with_data`, and `is_complete` are never used [INFO] [stdout] --> crates/core/src/pieces/mod.rs:27:12 [INFO] [stdout] | [INFO] [stdout] 26 | impl Block { [INFO] [stdout] | ---------- associated items in this implementation [INFO] [stdout] 27 | pub fn new(piece_index: u32, offset: u32, length: u32) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 36 | pub fn with_data(piece_index: u32, offset: u32, data: Vec) -> Self { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 46 | pub fn is_complete(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `PieceState` is never used [INFO] [stdout] --> crates/core/src/pieces/mod.rs:53:10 [INFO] [stdout] | [INFO] [stdout] 53 | pub enum PieceState { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `PiecesConfig` is never constructed [INFO] [stdout] --> crates/core/src/pieces/mod.rs:63:12 [INFO] [stdout] | [INFO] [stdout] 63 | pub struct PiecesConfig { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `PiecesStats` is never constructed [INFO] [stdout] --> crates/core/src/pieces/mod.rs:83:12 [INFO] [stdout] | [INFO] [stdout] 83 | pub struct PiecesStats { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait `PieceSelectionStrategy` is never used [INFO] [stdout] --> crates/core/src/pieces/mod.rs:95:11 [INFO] [stdout] | [INFO] [stdout] 95 | pub trait PieceSelectionStrategy: Send + Sync { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `RarestFirstStrategy` is never constructed [INFO] [stdout] --> crates/core/src/pieces/mod.rs:107:12 [INFO] [stdout] | [INFO] [stdout] 107 | pub struct RarestFirstStrategy; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `RandomFirstStrategy` is never constructed [INFO] [stdout] --> crates/core/src/pieces/mod.rs:127:12 [INFO] [stdout] | [INFO] [stdout] 127 | pub struct RandomFirstStrategy; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `SequentialStrategy` is never constructed [INFO] [stdout] --> crates/core/src/pieces/mod.rs:154:12 [INFO] [stdout] | [INFO] [stdout] 154 | pub struct SequentialStrategy; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `EndgameStrategy` is never constructed [INFO] [stdout] --> crates/core/src/pieces/mod.rs:178:12 [INFO] [stdout] | [INFO] [stdout] 178 | pub struct EndgameStrategy; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `index` is never read [INFO] [stdout] --> crates/core/src/pieces/piece_manager.rs:15:9 [INFO] [stdout] | [INFO] [stdout] 14 | pub struct PieceInfo { [INFO] [stdout] | --------- field in this struct [INFO] [stdout] 15 | pub index: u32, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `PieceInfo` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `total_size` and `uploaded` are never read [INFO] [stdout] --> crates/core/src/pieces/piece_manager.rs:26:5 [INFO] [stdout] | [INFO] [stdout] 23 | pub struct PieceManager { [INFO] [stdout] | ------------ fields in this struct [INFO] [stdout] ... [INFO] [stdout] 26 | total_size: u64, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | uploaded: u64, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `piece_index`, `offset`, and `data` are never read [INFO] [stdout] --> crates/core/src/pieces/piece_manager.rs:37:5 [INFO] [stdout] | [INFO] [stdout] 36 | struct PieceWrite { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 37 | piece_index: u32, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 38 | offset: u32, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 39 | data: Vec, [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `peer_interested` and `priority_pieces` are never read [INFO] [stdout] --> crates/core/src/pieces/piece_picker.rs:11:5 [INFO] [stdout] | [INFO] [stdout] 8 | pub struct PiecePicker { [INFO] [stdout] | ----------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 11 | peer_interested: BitVec, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] 12 | partial_pieces: HashMap, [INFO] [stdout] 13 | priority_pieces: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `PiecePicker` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `index` and `last_request` are never read [INFO] [stdout] --> crates/core/src/pieces/piece_picker.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 18 | struct PartialPiece { [INFO] [stdout] | ------------ fields in this struct [INFO] [stdout] 19 | index: u32, [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 22 | last_request: std::time::Instant, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `PartialPiece` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `RandomFirst`, `EndGame`, and `Sequential` are never constructed [INFO] [stdout] --> crates/core/src/pieces/piece_picker.rs:28:5 [INFO] [stdout] | [INFO] [stdout] 26 | pub enum SelectionMode { [INFO] [stdout] | ------------- variants in this enum [INFO] [stdout] 27 | RarestFirst, [INFO] [stdout] 28 | RandomFirst, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 29 | EndGame, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 30 | Sequential, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SelectionMode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple methods are never used [INFO] [stdout] --> crates/core/src/pieces/piece_picker.rs:45:12 [INFO] [stdout] | [INFO] [stdout] 33 | impl PiecePicker { [INFO] [stdout] | ---------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 45 | pub fn update_have_pieces(&mut self, bitfield: &BitVec) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 49 | pub fn update_peer_interested(&mut self, bitfield: &BitVec) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 53 | pub fn add_partial_piece(&mut self, index: u32, block_count: usize) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 62 | pub fn mark_block_requested(&mut self, piece_index: u32, block_index: usize) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 69 | pub fn mark_block_downloaded(&mut self, piece_index: u32, block_index: usize) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 76 | pub fn piece_completed(&mut self, piece_index: u32) { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 145 | pub fn cancel_stale_requests(&mut self, timeout: std::time::Duration) -> Vec<(u32, usize)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `HashChecker` is never constructed [INFO] [stdout] --> crates/core/src/pieces/hash_checker.rs:8:12 [INFO] [stdout] | [INFO] [stdout] 8 | pub struct HashChecker; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `verify_piece`, `verify_pieces`, and `verify_piece_range` are never used [INFO] [stdout] --> crates/core/src/pieces/hash_checker.rs:11:12 [INFO] [stdout] | [INFO] [stdout] 10 | impl HashChecker { [INFO] [stdout] | ---------------- associated items in this implementation [INFO] [stdout] 11 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 15 | pub async fn verify_piece( [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | pub async fn verify_pieces( [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 55 | pub async fn verify_piece_range( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `DiskWriter` is never constructed [INFO] [stdout] --> crates/core/src/storage/disk_writer.rs:11:12 [INFO] [stdout] | [INFO] [stdout] 11 | pub struct DiskWriter { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `WriteOperation` is never constructed [INFO] [stdout] --> crates/core/src/storage/disk_writer.rs:17:8 [INFO] [stdout] | [INFO] [stdout] 17 | struct WriteOperation { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `write`, `write_batch`, `flush`, and `close` are never used [INFO] [stdout] --> crates/core/src/storage/disk_writer.rs:24:18 [INFO] [stdout] | [INFO] [stdout] 23 | impl DiskWriter { [INFO] [stdout] | --------------- associated items in this implementation [INFO] [stdout] 24 | pub async fn new(file_path: PathBuf) -> Result { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 106 | pub async fn write(&self, offset: u64, data: Vec) -> Result<(), Error> { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 118 | pub async fn write_batch(&self, writes: Vec<(u64, Vec)>) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 125 | pub async fn flush(&self) -> Result<(), Error> { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 133 | pub async fn close(&self) -> Result<(), Error> { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `MemoryCache` is never constructed [INFO] [stdout] --> crates/core/src/storage/memory_cache.rs:8:12 [INFO] [stdout] | [INFO] [stdout] 8 | pub struct MemoryCache { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `CacheKey` is never constructed [INFO] [stdout] --> crates/core/src/storage/memory_cache.rs:15:8 [INFO] [stdout] | [INFO] [stdout] 15 | struct CacheKey { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `CacheEntry` is never constructed [INFO] [stdout] --> crates/core/src/storage/memory_cache.rs:21:8 [INFO] [stdout] | [INFO] [stdout] 21 | struct CacheEntry { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `get`, `put`, `get_piece_blocks`, `clear`, and `size` are never used [INFO] [stdout] --> crates/core/src/storage/memory_cache.rs:27:12 [INFO] [stdout] | [INFO] [stdout] 26 | impl MemoryCache { [INFO] [stdout] | ---------------- associated items in this implementation [INFO] [stdout] 27 | pub fn new(max_size_mb: usize) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 39 | pub async fn get(&self, piece_index: u32, block_offset: u32) -> Option> { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 50 | pub async fn put(&self, piece_index: u32, block_offset: u32, data: Vec) { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 72 | pub async fn get_piece_blocks(&self, piece_index: u32) -> Vec<(u32, Vec)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 85 | pub async fn clear(&self) { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 91 | pub async fn size(&self) -> usize { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `FileManager` is never constructed [INFO] [stdout] --> crates/core/src/storage/file_manager.rs:11:12 [INFO] [stdout] | [INFO] [stdout] 11 | pub struct FileManager { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> crates/core/src/storage/file_manager.rs:19:12 [INFO] [stdout] | [INFO] [stdout] 18 | impl FileManager { [INFO] [stdout] | ---------------- associated items in this implementation [INFO] [stdout] 19 | pub fn new(base_path: PathBuf, files: Vec) -> Result { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 40 | pub async fn write(&self, offset: u64, data: Vec) -> Result<(), Error> { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 49 | pub async fn write_piece(&self, piece_index: u32, piece_length: u32, data: Vec) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 76 | pub async fn read(&self, offset: u64, length: u64) -> Result, Error> { [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 102 | pub async fn flush_all(&self) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 110 | pub async fn close_all(&self) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 118 | async fn get_writer(&self, file_path: &Path) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 135 | fn resolve_offset(&self, offset: u64) -> Result<(PathBuf, u64), Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 146 | pub fn total_size(&self) -> u64 { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `downloaded_bytes`, `uploaded_bytes`, `download_rate`, and `upload_rate` are never read [INFO] [stdout] --> crates/core/src/downloader.rs:30:5 [INFO] [stdout] | [INFO] [stdout] 29 | struct DownloadStats { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] 30 | downloaded_bytes: u64, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 31 | uploaded_bytes: u64, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 32 | download_rate: f64, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 33 | upload_rate: f64, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `peer`, `block_offset`, and `block_length` are never read [INFO] [stdout] --> crates/core/src/uploader.rs:63:5 [INFO] [stdout] | [INFO] [stdout] 62 | struct UploadRequest { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] 63 | peer: Arc, [INFO] [stdout] | ^^^^ [INFO] [stdout] 64 | piece_index: u32, [INFO] [stdout] 65 | block_offset: u32, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 66 | block_length: u32, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `UploadRequest` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `config` is never read [INFO] [stdout] --> crates/core/src/seeding.rs:13:5 [INFO] [stdout] | [INFO] [stdout] 10 | pub struct Seeder { [INFO] [stdout] | ------ field in this struct [INFO] [stdout] ... [INFO] [stdout] 13 | config: Arc, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `NatTraversal` is never constructed [INFO] [stdout] --> crates/core/src/nat_traversal.rs:7:12 [INFO] [stdout] | [INFO] [stdout] 7 | pub struct NatTraversal; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> crates/core/src/nat_traversal.rs:10:12 [INFO] [stdout] | [INFO] [stdout] 9 | impl NatTraversal { [INFO] [stdout] | ----------------- associated items in this implementation [INFO] [stdout] 10 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 14 | pub async fn get_external_ip(&self) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 33 | async fn get_upnp_external_ip(&self) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 53 | async fn get_stun_external_ip(&self) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 58 | async fn get_http_external_ip(&self) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 71 | pub async fn add_port_mapping( [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 118 | pub async fn remove_port_mapping(&self, external_port: u16, protocol: Protocol) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `Protocol` is never used [INFO] [stdout] --> crates/core/src/nat_traversal.rs:137:10 [INFO] [stdout] | [INFO] [stdout] 137 | pub enum Protocol { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `PeerDiscovery` is never constructed [INFO] [stdout] --> crates/core/src/peer_discovery.rs:11:12 [INFO] [stdout] | [INFO] [stdout] 11 | pub struct PeerDiscovery { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `DiscoveryMethod` is never used [INFO] [stdout] --> crates/core/src/peer_discovery.rs:16:6 [INFO] [stdout] | [INFO] [stdout] 16 | enum DiscoveryMethod { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> crates/core/src/peer_discovery.rs:24:12 [INFO] [stdout] | [INFO] [stdout] 23 | impl PeerDiscovery { [INFO] [stdout] | ------------------ associated items in this implementation [INFO] [stdout] 24 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | pub async fn discover_peers(&self, info_hash: &InfoHash) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 62 | async fn discover_via_dht(&self, info_hash: &InfoHash) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 67 | async fn discover_via_trackers(&self, info_hash: &InfoHash) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 72 | async fn discover_via_lsd(&self, info_hash: &InfoHash) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 77 | pub async fn add_peer(&self, addr: SocketAddr) { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 81 | pub async fn remove_peer(&self, addr: &SocketAddr) { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 85 | pub async fn known_peers(&self) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 89 | pub async fn clear_stale(&self, max_age: std::time::Duration) { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `active_connections` is never read [INFO] [stdout] --> crates/core/src/node_manager.rs:24:5 [INFO] [stdout] | [INFO] [stdout] 22 | struct NodeStats { [INFO] [stdout] | --------- field in this struct [INFO] [stdout] 23 | total_peers_discovered: u64, [INFO] [stdout] 24 | active_connections: usize, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `NodeStats` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> crates/core/src/seeding.rs:39:9 [INFO] [stdout] | [INFO] [stdout] 39 | self.uploader.start().await; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 39 | let _ = self.uploader.start().await; [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> crates/core/src/seeding.rs:56:9 [INFO] [stdout] | [INFO] [stdout] 56 | self.uploader.stop().await; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 56 | let _ = self.uploader.stop().await; [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> crates/core/src/seeding.rs:62:9 [INFO] [stdout] | [INFO] [stdout] 62 | self.uploader.add_peer(peer).await; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 62 | let _ = self.uploader.add_peer(peer).await; [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> crates/core/src/seeding.rs:66:9 [INFO] [stdout] | [INFO] [stdout] 66 | self.uploader.remove_peer(peer).await; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 66 | let _ = self.uploader.remove_peer(peer).await; [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `NodeStats` is more private than the item `NodeManager::stats` [INFO] [stdout] --> crates/core/src/node_manager.rs:88:5 [INFO] [stdout] | [INFO] [stdout] 88 | pub async fn stats(&self) -> NodeStats { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method `NodeManager::stats` is reachable at visibility `pub` [INFO] [stdout] | [INFO] [stdout] note: but type `NodeStats` is only usable at visibility `pub(self)` [INFO] [stdout] --> crates/core/src/node_manager.rs:22:1 [INFO] [stdout] | [INFO] [stdout] 22 | struct NodeStats { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] = note: `#[warn(private_interfaces)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `stats` is never read [INFO] [stdout] --> crates/core/src/lib.rs:43:5 [INFO] [stdout] | [INFO] [stdout] 37 | pub struct BitTorrentClient { [INFO] [stdout] | ---------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 43 | stats: Arc>, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `BitTorrentClient` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `ALPHABET` is never used [INFO] [stdout] --> crates/core/src/torrent.rs:309:11 [INFO] [stdout] | [INFO] [stdout] 309 | const ALPHABET: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `ALPHABET` is never used [INFO] [stdout] --> crates/core/src/torrent.rs:313:11 [INFO] [stdout] | [INFO] [stdout] 313 | const ALPHABET: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `tx` is never read [INFO] [stdout] --> crates/core/src/dht/mod.rs:33:5 [INFO] [stdout] | [INFO] [stdout] 28 | pub struct DhtNode { [INFO] [stdout] | ------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 33 | tx: mpsc::Sender, [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = note: `DhtNode` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `remove_node`, `mark_failed`, `refresh_stale`, `size`, and `all_nodes` are never used [INFO] [stdout] --> crates/core/src/dht/routing_table.rs:115:12 [INFO] [stdout] | [INFO] [stdout] 29 | impl RoutingTable { [INFO] [stdout] | ----------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 115 | pub fn remove_node(&mut self, node_id: &[u8; 20]) { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 126 | pub fn mark_failed(&mut self, node_id: &[u8; 20]) { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 142 | pub fn refresh_stale(&mut self) -> Vec<[u8; 20]> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 170 | pub fn size(&self) -> usize { [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 174 | pub fn all_nodes(&self) -> Vec { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `QUERY_TIMEOUT` is never used [INFO] [stdout] --> crates/core/src/dht/query.rs:18:7 [INFO] [stdout] | [INFO] [stdout] 18 | const QUERY_TIMEOUT: Duration = Duration::from_secs(5); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_CONCURRENT_QUERIES` is never used [INFO] [stdout] --> crates/core/src/dht/query.rs:19:7 [INFO] [stdout] | [INFO] [stdout] 19 | const MAX_CONCURRENT_QUERIES: usize = 8; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> crates/core/src/dht/query.rs:24:5 [INFO] [stdout] | [INFO] [stdout] 22 | pub enum QueryMessage { [INFO] [stdout] | ------------ variants in this enum [INFO] [stdout] 23 | Ping { id: [u8; 20] }, [INFO] [stdout] 24 | Pong { id: [u8; 20] }, [INFO] [stdout] | ^^^^ [INFO] [stdout] 25 | FindNode { id: [u8; 20], target: [u8; 20] }, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 26 | FindNodeResponse { id: [u8; 20], nodes: Vec }, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 27 | GetPeers { id: [u8; 20], info_hash: [u8; 20] }, [INFO] [stdout] 28 | GetPeersResponse { id: [u8; 20], token: [u8; 8], peers: Vec, nodes: Vec }, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 29 | AnnouncePeer { id: [u8; 20], info_hash: [u8; 20], token: [u8; 8], port: u16 }, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 30 | AnnouncePeerResponse { id: [u8; 20] }, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 31 | Error { id: [u8; 20], message: String }, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `QueryMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `QueryManager` is never constructed [INFO] [stdout] --> crates/core/src/dht/query.rs:48:12 [INFO] [stdout] | [INFO] [stdout] 48 | pub struct QueryManager { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> crates/core/src/dht/query.rs:55:12 [INFO] [stdout] | [INFO] [stdout] 54 | impl QueryManager { [INFO] [stdout] | ----------------- associated items in this implementation [INFO] [stdout] 55 | pub fn new(socket: Arc, routing_table: Arc>) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 72 | pub async fn ping(&self, addr: SocketAddr) -> Result<(), Error> { [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 88 | pub async fn find_node(&self, target: [u8; 20]) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 108 | pub async fn get_peers(&self, info_hash: &[u8; 20]) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 149 | pub async fn announce_peer(&self, info_hash: &[u8; 20], port: u16) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 169 | async fn query_node(&self, addr: SocketAddr, transaction_id: u32, msg: QueryMessage) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 186 | async fn query_peers(&self, addr: SocketAddr, transaction_id: u32, msg: QueryMessage) -> Result<(Vec, Vec),... [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 200 | async fn send_query(&self, transaction_id: u32, addr: SocketAddr, msg: QueryMessage) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 209 | async fn create_pending(&self, transaction_id: u32) -> mpsc::Receiver { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 215 | async fn handle_responses(&self) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `am_interested` is never read [INFO] [stdout] --> crates/core/src/peer/connection.rs:341:5 [INFO] [stdout] | [INFO] [stdout] 333 | pub struct PeerConnection { [INFO] [stdout] | -------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 341 | am_interested: bool, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `PeerConnection` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `write_message` is never used [INFO] [stdout] --> crates/core/src/peer/connection.rs:532:14 [INFO] [stdout] | [INFO] [stdout] 347 | impl PeerConnection { [INFO] [stdout] | ------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 532 | async fn write_message(&self, msg: PeerMessage) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `has_extension` and `set_extension` are never used [INFO] [stdout] --> crates/core/src/peer/handshake.rs:94:12 [INFO] [stdout] | [INFO] [stdout] 17 | impl Handshake { [INFO] [stdout] | -------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 94 | pub fn has_extension(&self, bit: usize) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 104 | pub fn set_extension(&mut self, bit: usize) { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_MESSAGE_SIZE` is never used [INFO] [stdout] --> crates/core/src/peer/peer_wire.rs:100:7 [INFO] [stdout] | [INFO] [stdout] 100 | const MAX_MESSAGE_SIZE: usize = 16 * 1024 * 1024; // 16MB [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `READ_TIMEOUT` is never used [INFO] [stdout] --> crates/core/src/peer/peer_wire.rs:101:7 [INFO] [stdout] | [INFO] [stdout] 101 | const READ_TIMEOUT: Duration = Duration::from_secs(30); [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `WRITE_TIMEOUT` is never used [INFO] [stdout] --> crates/core/src/peer/peer_wire.rs:102:7 [INFO] [stdout] | [INFO] [stdout] 102 | const WRITE_TIMEOUT: Duration = Duration::from_secs(30); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `PeerWire` is never constructed [INFO] [stdout] --> crates/core/src/peer/peer_wire.rs:104:12 [INFO] [stdout] | [INFO] [stdout] 104 | pub struct PeerWire { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `read_message`, `write_message`, and `close` are never used [INFO] [stdout] --> crates/core/src/peer/peer_wire.rs:110:12 [INFO] [stdout] | [INFO] [stdout] 109 | impl PeerWire { [INFO] [stdout] | ------------- associated items in this implementation [INFO] [stdout] 110 | pub fn new(stream: TcpStream) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 117 | pub async fn read_message(&mut self) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 164 | pub async fn write_message(&mut self, message: &PeerMessage) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 173 | pub async fn close(&mut self) -> Result<(), Error> { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Block` is never constructed [INFO] [stdout] --> crates/core/src/pieces/mod.rs:19:12 [INFO] [stdout] | [INFO] [stdout] 19 | pub struct Block { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `with_data`, and `is_complete` are never used [INFO] [stdout] --> crates/core/src/pieces/mod.rs:27:12 [INFO] [stdout] | [INFO] [stdout] 26 | impl Block { [INFO] [stdout] | ---------- associated items in this implementation [INFO] [stdout] 27 | pub fn new(piece_index: u32, offset: u32, length: u32) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 36 | pub fn with_data(piece_index: u32, offset: u32, data: Vec) -> Self { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 46 | pub fn is_complete(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `PieceState` is never used [INFO] [stdout] --> crates/core/src/pieces/mod.rs:53:10 [INFO] [stdout] | [INFO] [stdout] 53 | pub enum PieceState { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `PiecesConfig` is never constructed [INFO] [stdout] --> crates/core/src/pieces/mod.rs:63:12 [INFO] [stdout] | [INFO] [stdout] 63 | pub struct PiecesConfig { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `PiecesStats` is never constructed [INFO] [stdout] --> crates/core/src/pieces/mod.rs:83:12 [INFO] [stdout] | [INFO] [stdout] 83 | pub struct PiecesStats { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait `PieceSelectionStrategy` is never used [INFO] [stdout] --> crates/core/src/pieces/mod.rs:95:11 [INFO] [stdout] | [INFO] [stdout] 95 | pub trait PieceSelectionStrategy: Send + Sync { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `RarestFirstStrategy` is never constructed [INFO] [stdout] --> crates/core/src/pieces/mod.rs:107:12 [INFO] [stdout] | [INFO] [stdout] 107 | pub struct RarestFirstStrategy; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `RandomFirstStrategy` is never constructed [INFO] [stdout] --> crates/core/src/pieces/mod.rs:127:12 [INFO] [stdout] | [INFO] [stdout] 127 | pub struct RandomFirstStrategy; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `SequentialStrategy` is never constructed [INFO] [stdout] --> crates/core/src/pieces/mod.rs:154:12 [INFO] [stdout] | [INFO] [stdout] 154 | pub struct SequentialStrategy; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `EndgameStrategy` is never constructed [INFO] [stdout] --> crates/core/src/pieces/mod.rs:178:12 [INFO] [stdout] | [INFO] [stdout] 178 | pub struct EndgameStrategy; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `index` is never read [INFO] [stdout] --> crates/core/src/pieces/piece_manager.rs:15:9 [INFO] [stdout] | [INFO] [stdout] 14 | pub struct PieceInfo { [INFO] [stdout] | --------- field in this struct [INFO] [stdout] 15 | pub index: u32, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `PieceInfo` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `total_size` and `uploaded` are never read [INFO] [stdout] --> crates/core/src/pieces/piece_manager.rs:26:5 [INFO] [stdout] | [INFO] [stdout] 23 | pub struct PieceManager { [INFO] [stdout] | ------------ fields in this struct [INFO] [stdout] ... [INFO] [stdout] 26 | total_size: u64, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | uploaded: u64, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `piece_index`, `offset`, and `data` are never read [INFO] [stdout] --> crates/core/src/pieces/piece_manager.rs:37:5 [INFO] [stdout] | [INFO] [stdout] 36 | struct PieceWrite { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 37 | piece_index: u32, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 38 | offset: u32, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 39 | data: Vec, [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `peer_interested` and `priority_pieces` are never read [INFO] [stdout] --> crates/core/src/pieces/piece_picker.rs:11:5 [INFO] [stdout] | [INFO] [stdout] 8 | pub struct PiecePicker { [INFO] [stdout] | ----------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 11 | peer_interested: BitVec, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] 12 | partial_pieces: HashMap, [INFO] [stdout] 13 | priority_pieces: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `PiecePicker` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `index` and `last_request` are never read [INFO] [stdout] --> crates/core/src/pieces/piece_picker.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 18 | struct PartialPiece { [INFO] [stdout] | ------------ fields in this struct [INFO] [stdout] 19 | index: u32, [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 22 | last_request: std::time::Instant, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `PartialPiece` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `RandomFirst`, `EndGame`, and `Sequential` are never constructed [INFO] [stdout] --> crates/core/src/pieces/piece_picker.rs:28:5 [INFO] [stdout] | [INFO] [stdout] 26 | pub enum SelectionMode { [INFO] [stdout] | ------------- variants in this enum [INFO] [stdout] 27 | RarestFirst, [INFO] [stdout] 28 | RandomFirst, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 29 | EndGame, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 30 | Sequential, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SelectionMode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple methods are never used [INFO] [stdout] --> crates/core/src/pieces/piece_picker.rs:45:12 [INFO] [stdout] | [INFO] [stdout] 33 | impl PiecePicker { [INFO] [stdout] | ---------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 45 | pub fn update_have_pieces(&mut self, bitfield: &BitVec) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 49 | pub fn update_peer_interested(&mut self, bitfield: &BitVec) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 53 | pub fn add_partial_piece(&mut self, index: u32, block_count: usize) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 62 | pub fn mark_block_requested(&mut self, piece_index: u32, block_index: usize) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 69 | pub fn mark_block_downloaded(&mut self, piece_index: u32, block_index: usize) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 76 | pub fn piece_completed(&mut self, piece_index: u32) { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 145 | pub fn cancel_stale_requests(&mut self, timeout: std::time::Duration) -> Vec<(u32, usize)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `HashChecker` is never constructed [INFO] [stdout] --> crates/core/src/pieces/hash_checker.rs:8:12 [INFO] [stdout] | [INFO] [stdout] 8 | pub struct HashChecker; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `verify_piece`, `verify_pieces`, and `verify_piece_range` are never used [INFO] [stdout] --> crates/core/src/pieces/hash_checker.rs:11:12 [INFO] [stdout] | [INFO] [stdout] 10 | impl HashChecker { [INFO] [stdout] | ---------------- associated items in this implementation [INFO] [stdout] 11 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 15 | pub async fn verify_piece( [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | pub async fn verify_pieces( [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 55 | pub async fn verify_piece_range( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `DiskWriter` is never constructed [INFO] [stdout] --> crates/core/src/storage/disk_writer.rs:11:12 [INFO] [stdout] | [INFO] [stdout] 11 | pub struct DiskWriter { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `WriteOperation` is never constructed [INFO] [stdout] --> crates/core/src/storage/disk_writer.rs:17:8 [INFO] [stdout] | [INFO] [stdout] 17 | struct WriteOperation { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `write`, `write_batch`, `flush`, and `close` are never used [INFO] [stdout] --> crates/core/src/storage/disk_writer.rs:24:18 [INFO] [stdout] | [INFO] [stdout] 23 | impl DiskWriter { [INFO] [stdout] | --------------- associated items in this implementation [INFO] [stdout] 24 | pub async fn new(file_path: PathBuf) -> Result { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 106 | pub async fn write(&self, offset: u64, data: Vec) -> Result<(), Error> { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 118 | pub async fn write_batch(&self, writes: Vec<(u64, Vec)>) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 125 | pub async fn flush(&self) -> Result<(), Error> { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 133 | pub async fn close(&self) -> Result<(), Error> { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `MemoryCache` is never constructed [INFO] [stdout] --> crates/core/src/storage/memory_cache.rs:8:12 [INFO] [stdout] | [INFO] [stdout] 8 | pub struct MemoryCache { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `CacheKey` is never constructed [INFO] [stdout] --> crates/core/src/storage/memory_cache.rs:15:8 [INFO] [stdout] | [INFO] [stdout] 15 | struct CacheKey { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `CacheEntry` is never constructed [INFO] [stdout] --> crates/core/src/storage/memory_cache.rs:21:8 [INFO] [stdout] | [INFO] [stdout] 21 | struct CacheEntry { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `get`, `put`, `get_piece_blocks`, `clear`, and `size` are never used [INFO] [stdout] --> crates/core/src/storage/memory_cache.rs:27:12 [INFO] [stdout] | [INFO] [stdout] 26 | impl MemoryCache { [INFO] [stdout] | ---------------- associated items in this implementation [INFO] [stdout] 27 | pub fn new(max_size_mb: usize) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 39 | pub async fn get(&self, piece_index: u32, block_offset: u32) -> Option> { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 50 | pub async fn put(&self, piece_index: u32, block_offset: u32, data: Vec) { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 72 | pub async fn get_piece_blocks(&self, piece_index: u32) -> Vec<(u32, Vec)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 85 | pub async fn clear(&self) { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 91 | pub async fn size(&self) -> usize { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `FileManager` is never constructed [INFO] [stdout] --> crates/core/src/storage/file_manager.rs:11:12 [INFO] [stdout] | [INFO] [stdout] 11 | pub struct FileManager { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> crates/core/src/storage/file_manager.rs:19:12 [INFO] [stdout] | [INFO] [stdout] 18 | impl FileManager { [INFO] [stdout] | ---------------- associated items in this implementation [INFO] [stdout] 19 | pub fn new(base_path: PathBuf, files: Vec) -> Result { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 40 | pub async fn write(&self, offset: u64, data: Vec) -> Result<(), Error> { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 49 | pub async fn write_piece(&self, piece_index: u32, piece_length: u32, data: Vec) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 76 | pub async fn read(&self, offset: u64, length: u64) -> Result, Error> { [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 102 | pub async fn flush_all(&self) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 110 | pub async fn close_all(&self) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 118 | async fn get_writer(&self, file_path: &Path) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 135 | fn resolve_offset(&self, offset: u64) -> Result<(PathBuf, u64), Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 146 | pub fn total_size(&self) -> u64 { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `downloaded_bytes`, `uploaded_bytes`, `download_rate`, and `upload_rate` are never read [INFO] [stdout] --> crates/core/src/downloader.rs:30:5 [INFO] [stdout] | [INFO] [stdout] 29 | struct DownloadStats { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] 30 | downloaded_bytes: u64, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 31 | uploaded_bytes: u64, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 32 | download_rate: f64, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 33 | upload_rate: f64, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `peer`, `block_offset`, and `block_length` are never read [INFO] [stdout] --> crates/core/src/uploader.rs:63:5 [INFO] [stdout] | [INFO] [stdout] 62 | struct UploadRequest { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] 63 | peer: Arc, [INFO] [stdout] | ^^^^ [INFO] [stdout] 64 | piece_index: u32, [INFO] [stdout] 65 | block_offset: u32, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 66 | block_length: u32, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `UploadRequest` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `config` is never read [INFO] [stdout] --> crates/core/src/seeding.rs:13:5 [INFO] [stdout] | [INFO] [stdout] 10 | pub struct Seeder { [INFO] [stdout] | ------ field in this struct [INFO] [stdout] ... [INFO] [stdout] 13 | config: Arc, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `NatTraversal` is never constructed [INFO] [stdout] --> crates/core/src/nat_traversal.rs:7:12 [INFO] [stdout] | [INFO] [stdout] 7 | pub struct NatTraversal; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> crates/core/src/nat_traversal.rs:10:12 [INFO] [stdout] | [INFO] [stdout] 9 | impl NatTraversal { [INFO] [stdout] | ----------------- associated items in this implementation [INFO] [stdout] 10 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 14 | pub async fn get_external_ip(&self) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 33 | async fn get_upnp_external_ip(&self) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 53 | async fn get_stun_external_ip(&self) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 58 | async fn get_http_external_ip(&self) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 71 | pub async fn add_port_mapping( [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 118 | pub async fn remove_port_mapping(&self, external_port: u16, protocol: Protocol) -> Result<(), Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `Protocol` is never used [INFO] [stdout] --> crates/core/src/nat_traversal.rs:137:10 [INFO] [stdout] | [INFO] [stdout] 137 | pub enum Protocol { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `PeerDiscovery` is never constructed [INFO] [stdout] --> crates/core/src/peer_discovery.rs:11:12 [INFO] [stdout] | [INFO] [stdout] 11 | pub struct PeerDiscovery { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `DiscoveryMethod` is never used [INFO] [stdout] --> crates/core/src/peer_discovery.rs:16:6 [INFO] [stdout] | [INFO] [stdout] 16 | enum DiscoveryMethod { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> crates/core/src/peer_discovery.rs:24:12 [INFO] [stdout] | [INFO] [stdout] 23 | impl PeerDiscovery { [INFO] [stdout] | ------------------ associated items in this implementation [INFO] [stdout] 24 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | pub async fn discover_peers(&self, info_hash: &InfoHash) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 62 | async fn discover_via_dht(&self, info_hash: &InfoHash) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 67 | async fn discover_via_trackers(&self, info_hash: &InfoHash) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 72 | async fn discover_via_lsd(&self, info_hash: &InfoHash) -> Result, Error> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 77 | pub async fn add_peer(&self, addr: SocketAddr) { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 81 | pub async fn remove_peer(&self, addr: &SocketAddr) { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 85 | pub async fn known_peers(&self) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 89 | pub async fn clear_stale(&self, max_age: std::time::Duration) { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `active_connections` is never read [INFO] [stdout] --> crates/core/src/node_manager.rs:24:5 [INFO] [stdout] | [INFO] [stdout] 22 | struct NodeStats { [INFO] [stdout] | --------- field in this struct [INFO] [stdout] 23 | total_peers_discovered: u64, [INFO] [stdout] 24 | active_connections: usize, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `NodeStats` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> crates/core/src/seeding.rs:39:9 [INFO] [stdout] | [INFO] [stdout] 39 | self.uploader.start().await; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 39 | let _ = self.uploader.start().await; [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> crates/core/src/seeding.rs:56:9 [INFO] [stdout] | [INFO] [stdout] 56 | self.uploader.stop().await; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 56 | let _ = self.uploader.stop().await; [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> crates/core/src/seeding.rs:62:9 [INFO] [stdout] | [INFO] [stdout] 62 | self.uploader.add_peer(peer).await; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 62 | let _ = self.uploader.add_peer(peer).await; [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> crates/core/src/seeding.rs:66:9 [INFO] [stdout] | [INFO] [stdout] 66 | self.uploader.remove_peer(peer).await; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 66 | let _ = self.uploader.remove_peer(peer).await; [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Checking cli v0.1.0 (/opt/rustwide/workdir/crates/cli) [INFO] [stdout] warning: unused import: `std::path::Path` [INFO] [stdout] --> crates/cli/src/commands.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | use std::path::Path; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Gauge` [INFO] [stdout] --> crates/cli/src/ui.rs:12:60 [INFO] [stdout] | [INFO] [stdout] 12 | widgets::{Block, Borders, Cell, Row, Table, Paragraph, Gauge}, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `tracing::info` [INFO] [stdout] --> crates/cli/src/main.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 8 | use tracing::info; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated function `base64::encode`: Use Engine::encode [INFO] [stdout] --> crates/cli/src/commands.rs:18:27 [INFO] [stdout] | [INFO] [stdout] 18 | let encoded = base64::encode(&data); [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::path::Path` [INFO] [stdout] --> crates/cli/src/commands.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | use std::path::Path; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Gauge` [INFO] [stdout] --> crates/cli/src/ui.rs:12:60 [INFO] [stdout] | [INFO] [stdout] 12 | widgets::{Block, Borders, Cell, Row, Table, Paragraph, Gauge}, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `tracing::info` [INFO] [stdout] --> crates/cli/src/main.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 8 | use tracing::info; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated function `base64::encode`: Use Engine::encode [INFO] [stdout] --> crates/cli/src/commands.rs:18:27 [INFO] [stdout] | [INFO] [stdout] 18 | let encoded = base64::encode(&data); [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Backend` [INFO] [stdout] --> crates/cli/src/ui.rs:10:15 [INFO] [stdout] | [INFO] [stdout] 10 | backend::{Backend, CrosstermBackend}, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Backend` [INFO] [stdout] --> crates/cli/src/ui.rs:10:15 [INFO] [stdout] | [INFO] [stdout] 10 | backend::{Backend, CrosstermBackend}, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TuiApp` is never constructed [INFO] [stdout] --> crates/cli/src/ui.rs:21:12 [INFO] [stdout] | [INFO] [stdout] 21 | pub struct TuiApp { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TorrentInfo` is never constructed [INFO] [stdout] --> crates/cli/src/ui.rs:27:8 [INFO] [stdout] | [INFO] [stdout] 27 | struct TorrentInfo { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `run`, `draw`, `draw_torrents`, `handle_events`, and `update_torrents` are never used [INFO] [stdout] --> crates/cli/src/ui.rs:36:12 [INFO] [stdout] | [INFO] [stdout] 35 | impl TuiApp { [INFO] [stdout] | ----------- associated items in this implementation [INFO] [stdout] 36 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 45 | pub async fn run(&mut self) -> Result<(), Box> { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 80 | fn draw(&mut self, f: &mut Frame<'_>) { [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 108 | fn draw_torrents(&self, f: &mut Frame<'_>, area: Rect) { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 151 | fn handle_events(&mut self) -> Result<(), Box> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 169 | async fn update_torrents(&mut self) -> Result<(), Box> { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TorrentData` is never constructed [INFO] [stdout] --> crates/cli/src/ui.rs:188:8 [INFO] [stdout] | [INFO] [stdout] 188 | struct TorrentData { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TuiApp` is never constructed [INFO] [stdout] --> crates/cli/src/ui.rs:21:12 [INFO] [stdout] | [INFO] [stdout] 21 | pub struct TuiApp { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TorrentInfo` is never constructed [INFO] [stdout] --> crates/cli/src/ui.rs:27:8 [INFO] [stdout] | [INFO] [stdout] 27 | struct TorrentInfo { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `run`, `draw`, `draw_torrents`, `handle_events`, and `update_torrents` are never used [INFO] [stdout] --> crates/cli/src/ui.rs:36:12 [INFO] [stdout] | [INFO] [stdout] 35 | impl TuiApp { [INFO] [stdout] | ----------- associated items in this implementation [INFO] [stdout] 36 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 45 | pub async fn run(&mut self) -> Result<(), Box> { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 80 | fn draw(&mut self, f: &mut Frame<'_>) { [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 108 | fn draw_torrents(&self, f: &mut Frame<'_>, area: Rect) { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 151 | fn handle_events(&mut self) -> Result<(), Box> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 169 | async fn update_torrents(&mut self) -> Result<(), Box> { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TorrentData` is never constructed [INFO] [stdout] --> crates/cli/src/ui.rs:188:8 [INFO] [stdout] | [INFO] [stdout] 188 | struct TorrentData { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Checking axum-extra v0.9.6 [INFO] [stderr] Checking api v0.1.0 (/opt/rustwide/workdir/crates/api) [INFO] [stdout] warning: unused imports: `IntoResponse` and `body::Body` [INFO] [stdout] --> crates/api/src/routes/files.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | body::Body, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 6 | response::{Response, IntoResponse}, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated function `base64::decode`: Use Engine::decode [INFO] [stdout] --> crates/api/src/routes/torrents.rs:71:32 [INFO] [stdout] | [INFO] [stdout] 71 | let torrent_data = base64::decode(&req.torrent_file) [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `IntoResponse` and `body::Body` [INFO] [stdout] --> crates/api/src/routes/files.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | body::Body, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 6 | response::{Response, IntoResponse}, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated function `base64::decode`: Use Engine::decode [INFO] [stdout] --> crates/api/src/routes/torrents.rs:71:32 [INFO] [stdout] | [INFO] [stdout] 71 | let torrent_data = base64::decode(&req.torrent_file) [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `path` [INFO] [stdout] --> crates/api/src/routes/files.rs:42:10 [INFO] [stdout] | [INFO] [stdout] 42 | Path(path): Path, [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_path` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `state` [INFO] [stdout] --> crates/api/src/websocket.rs:23:43 [INFO] [stdout] | [INFO] [stdout] 23 | async fn handle_socket(socket: WebSocket, state: Arc) { [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_state` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `tx` [INFO] [stdout] --> crates/api/src/websocket.rs:27:10 [INFO] [stdout] | [INFO] [stdout] 27 | let (tx, mut rx) = broadcast::channel(32); [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_tx` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `path` [INFO] [stdout] --> crates/api/src/routes/files.rs:42:10 [INFO] [stdout] | [INFO] [stdout] 42 | Path(path): Path, [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_path` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `state` [INFO] [stdout] --> crates/api/src/websocket.rs:23:43 [INFO] [stdout] | [INFO] [stdout] 23 | async fn handle_socket(socket: WebSocket, state: Arc) { [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_state` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `tx` [INFO] [stdout] --> crates/api/src/websocket.rs:27:10 [INFO] [stdout] | [INFO] [stdout] 27 | let (tx, mut rx) = broadcast::channel(32); [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_tx` [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Checking node v0.1.0 (/opt/rustwide/workdir/crates/node) [INFO] [stdout] warning: unused imports: `IntoResponse` and `body::Body` [INFO] [stdout] --> crates/api/src/routes/files.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | body::Body, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 6 | response::{Response, IntoResponse}, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Router`, `delete`, `get`, `http::Method`, and `post` [INFO] [stdout] --> crates/api/src/main.rs:11:5 [INFO] [stdout] | [INFO] [stdout] 11 | Router, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 12 | routing::{get, post, delete}, [INFO] [stdout] | ^^^ ^^^^ ^^^^^^ [INFO] [stdout] 13 | http::Method, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Any` and `CorsLayer` [INFO] [stdout] --> crates/api/src/main.rs:15:24 [INFO] [stdout] | [INFO] [stdout] 15 | use tower_http::cors::{CorsLayer, Any}; [INFO] [stdout] | ^^^^^^^^^ ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::future` [INFO] [stdout] --> crates/api/src/main.rs:17:5 [INFO] [stdout] | [INFO] [stdout] 17 | use std::future; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `tokio::sync::broadcast` [INFO] [stdout] --> crates/api/src/main.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | use tokio::sync::broadcast; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated function `base64::decode`: Use Engine::decode [INFO] [stdout] --> crates/api/src/routes/torrents.rs:71:32 [INFO] [stdout] | [INFO] [stdout] 71 | let torrent_data = base64::decode(&req.torrent_file) [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `IntoResponse` and `body::Body` [INFO] [stdout] --> crates/api/src/routes/files.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | body::Body, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 6 | response::{Response, IntoResponse}, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Router`, `delete`, `get`, `http::Method`, and `post` [INFO] [stdout] --> crates/api/src/main.rs:11:5 [INFO] [stdout] | [INFO] [stdout] 11 | Router, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 12 | routing::{get, post, delete}, [INFO] [stdout] | ^^^ ^^^^ ^^^^^^ [INFO] [stdout] 13 | http::Method, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Any` and `CorsLayer` [INFO] [stdout] --> crates/api/src/main.rs:15:24 [INFO] [stdout] | [INFO] [stdout] 15 | use tower_http::cors::{CorsLayer, Any}; [INFO] [stdout] | ^^^^^^^^^ ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::future` [INFO] [stdout] --> crates/api/src/main.rs:17:5 [INFO] [stdout] | [INFO] [stdout] 17 | use std::future; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `tokio::sync::broadcast` [INFO] [stdout] --> crates/api/src/main.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | use tokio::sync::broadcast; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated function `base64::decode`: Use Engine::decode [INFO] [stdout] --> crates/api/src/routes/torrents.rs:71:32 [INFO] [stdout] | [INFO] [stdout] 71 | let torrent_data = base64::decode(&req.torrent_file) [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `path` [INFO] [stdout] --> crates/api/src/routes/files.rs:42:10 [INFO] [stdout] | [INFO] [stdout] 42 | Path(path): Path, [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_path` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `state` [INFO] [stdout] --> crates/api/src/websocket.rs:23:43 [INFO] [stdout] | [INFO] [stdout] 23 | async fn handle_socket(socket: WebSocket, state: Arc) { [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_state` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `tx` [INFO] [stdout] --> crates/api/src/websocket.rs:27:10 [INFO] [stdout] | [INFO] [stdout] 27 | let (tx, mut rx) = broadcast::channel(32); [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_tx` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `shutdown_signal` is never used [INFO] [stdout] --> crates/api/src/main.rs:56:10 [INFO] [stdout] | [INFO] [stdout] 56 | async fn shutdown_signal() { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AddTorrentRequest` is never constructed [INFO] [stdout] --> crates/api/src/routes/torrents.rs:13:12 [INFO] [stdout] | [INFO] [stdout] 13 | pub struct AddTorrentRequest { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AddMagnetRequest` is never constructed [INFO] [stdout] --> crates/api/src/routes/torrents.rs:18:12 [INFO] [stdout] | [INFO] [stdout] 18 | pub struct AddMagnetRequest { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `RemoveTorrentRequest` is never constructed [INFO] [stdout] --> crates/api/src/routes/torrents.rs:23:12 [INFO] [stdout] | [INFO] [stdout] 23 | pub struct RemoveTorrentRequest { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TorrentResponse` is never constructed [INFO] [stdout] --> crates/api/src/routes/torrents.rs:28:12 [INFO] [stdout] | [INFO] [stdout] 28 | pub struct TorrentResponse { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `list_torrents` is never used [INFO] [stdout] --> crates/api/src/routes/torrents.rs:43:14 [INFO] [stdout] | [INFO] [stdout] 43 | pub async fn list_torrents( [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `add_torrent` is never used [INFO] [stdout] --> crates/api/src/routes/torrents.rs:66:14 [INFO] [stdout] | [INFO] [stdout] 66 | pub async fn add_torrent( [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `add_magnet` is never used [INFO] [stdout] --> crates/api/src/routes/torrents.rs:98:14 [INFO] [stdout] | [INFO] [stdout] 98 | pub async fn add_magnet( [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_torrent` is never used [INFO] [stdout] --> crates/api/src/routes/torrents.rs:125:14 [INFO] [stdout] | [INFO] [stdout] 125 | pub async fn get_torrent( [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `remove_torrent` is never used [INFO] [stdout] --> crates/api/src/routes/torrents.rs:149:14 [INFO] [stdout] | [INFO] [stdout] 149 | pub async fn remove_torrent( [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `pause_torrent` is never used [INFO] [stdout] --> crates/api/src/routes/torrents.rs:160:14 [INFO] [stdout] | [INFO] [stdout] 160 | pub async fn pause_torrent( [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `resume_torrent` is never used [INFO] [stdout] --> crates/api/src/routes/torrents.rs:170:14 [INFO] [stdout] | [INFO] [stdout] 170 | pub async fn resume_torrent( [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `StatsResponse` is never constructed [INFO] [stdout] --> crates/api/src/routes/stats.rs:9:12 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct StatsResponse { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_stats` is never used [INFO] [stdout] --> crates/api/src/routes/stats.rs:19:14 [INFO] [stdout] | [INFO] [stdout] 19 | pub async fn get_stats( [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `list_files` is never used [INFO] [stdout] --> crates/api/src/routes/files.rs:13:14 [INFO] [stdout] | [INFO] [stdout] 13 | pub async fn list_files( [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_file` is never used [INFO] [stdout] --> crates/api/src/routes/files.rs:41:14 [INFO] [stdout] | [INFO] [stdout] 41 | pub async fn get_file( [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `FileInfo` is never constructed [INFO] [stdout] --> crates/api/src/routes/files.rs:50:12 [INFO] [stdout] | [INFO] [stdout] 50 | pub struct FileInfo { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `websocket_handler` is never used [INFO] [stdout] --> crates/api/src/websocket.rs:16:14 [INFO] [stdout] | [INFO] [stdout] 16 | pub async fn websocket_handler( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `handle_socket` is never used [INFO] [stdout] --> crates/api/src/websocket.rs:23:10 [INFO] [stdout] | [INFO] [stdout] 23 | async fn handle_socket(socket: WebSocket, state: Arc) { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `logging_middleware` is never used [INFO] [stdout] --> crates/api/src/middleware.rs:14:14 [INFO] [stdout] | [INFO] [stdout] 14 | pub async fn logging_middleware( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `auth_middleware` is never used [INFO] [stdout] --> crates/api/src/middleware.rs:30:14 [INFO] [stdout] | [INFO] [stdout] 30 | pub async fn auth_middleware( [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_token` is never used [INFO] [stdout] --> crates/api/src/middleware.rs:59:4 [INFO] [stdout] | [INFO] [stdout] 59 | fn validate_token(_token: &str, _secret: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `cors_middleware` is never used [INFO] [stdout] --> crates/api/src/middleware.rs:64:14 [INFO] [stdout] | [INFO] [stdout] 64 | pub async fn cors_middleware( [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AppState` is never constructed [INFO] [stdout] --> crates/api/src/state.rs:8:12 [INFO] [stdout] | [INFO] [stdout] 8 | pub struct AppState { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `path` [INFO] [stdout] --> crates/api/src/routes/files.rs:42:10 [INFO] [stdout] | [INFO] [stdout] 42 | Path(path): Path, [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_path` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `state` [INFO] [stdout] --> crates/api/src/websocket.rs:23:43 [INFO] [stdout] | [INFO] [stdout] 23 | async fn handle_socket(socket: WebSocket, state: Arc) { [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_state` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `tx` [INFO] [stdout] --> crates/api/src/websocket.rs:27:10 [INFO] [stdout] | [INFO] [stdout] 27 | let (tx, mut rx) = broadcast::channel(32); [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_tx` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `shutdown_signal` is never used [INFO] [stdout] --> crates/api/src/main.rs:56:10 [INFO] [stdout] | [INFO] [stdout] 56 | async fn shutdown_signal() { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AddTorrentRequest` is never constructed [INFO] [stdout] --> crates/api/src/routes/torrents.rs:13:12 [INFO] [stdout] | [INFO] [stdout] 13 | pub struct AddTorrentRequest { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AddMagnetRequest` is never constructed [INFO] [stdout] --> crates/api/src/routes/torrents.rs:18:12 [INFO] [stdout] | [INFO] [stdout] 18 | pub struct AddMagnetRequest { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `RemoveTorrentRequest` is never constructed [INFO] [stdout] --> crates/api/src/routes/torrents.rs:23:12 [INFO] [stdout] | [INFO] [stdout] 23 | pub struct RemoveTorrentRequest { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TorrentResponse` is never constructed [INFO] [stdout] --> crates/api/src/routes/torrents.rs:28:12 [INFO] [stdout] | [INFO] [stdout] 28 | pub struct TorrentResponse { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `list_torrents` is never used [INFO] [stdout] --> crates/api/src/routes/torrents.rs:43:14 [INFO] [stdout] | [INFO] [stdout] 43 | pub async fn list_torrents( [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `add_torrent` is never used [INFO] [stdout] --> crates/api/src/routes/torrents.rs:66:14 [INFO] [stdout] | [INFO] [stdout] 66 | pub async fn add_torrent( [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `add_magnet` is never used [INFO] [stdout] --> crates/api/src/routes/torrents.rs:98:14 [INFO] [stdout] | [INFO] [stdout] 98 | pub async fn add_magnet( [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_torrent` is never used [INFO] [stdout] --> crates/api/src/routes/torrents.rs:125:14 [INFO] [stdout] | [INFO] [stdout] 125 | pub async fn get_torrent( [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `remove_torrent` is never used [INFO] [stdout] --> crates/api/src/routes/torrents.rs:149:14 [INFO] [stdout] | [INFO] [stdout] 149 | pub async fn remove_torrent( [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `pause_torrent` is never used [INFO] [stdout] --> crates/api/src/routes/torrents.rs:160:14 [INFO] [stdout] | [INFO] [stdout] 160 | pub async fn pause_torrent( [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `resume_torrent` is never used [INFO] [stdout] --> crates/api/src/routes/torrents.rs:170:14 [INFO] [stdout] | [INFO] [stdout] 170 | pub async fn resume_torrent( [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `StatsResponse` is never constructed [INFO] [stdout] --> crates/api/src/routes/stats.rs:9:12 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct StatsResponse { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_stats` is never used [INFO] [stdout] --> crates/api/src/routes/stats.rs:19:14 [INFO] [stdout] | [INFO] [stdout] 19 | pub async fn get_stats( [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `list_files` is never used [INFO] [stdout] --> crates/api/src/routes/files.rs:13:14 [INFO] [stdout] | [INFO] [stdout] 13 | pub async fn list_files( [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_file` is never used [INFO] [stdout] --> crates/api/src/routes/files.rs:41:14 [INFO] [stdout] | [INFO] [stdout] 41 | pub async fn get_file( [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `FileInfo` is never constructed [INFO] [stdout] --> crates/api/src/routes/files.rs:50:12 [INFO] [stdout] | [INFO] [stdout] 50 | pub struct FileInfo { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `websocket_handler` is never used [INFO] [stdout] --> crates/api/src/websocket.rs:16:14 [INFO] [stdout] | [INFO] [stdout] 16 | pub async fn websocket_handler( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `handle_socket` is never used [INFO] [stdout] --> crates/api/src/websocket.rs:23:10 [INFO] [stdout] | [INFO] [stdout] 23 | async fn handle_socket(socket: WebSocket, state: Arc) { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `logging_middleware` is never used [INFO] [stdout] --> crates/api/src/middleware.rs:14:14 [INFO] [stdout] | [INFO] [stdout] 14 | pub async fn logging_middleware( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `auth_middleware` is never used [INFO] [stdout] --> crates/api/src/middleware.rs:30:14 [INFO] [stdout] | [INFO] [stdout] 30 | pub async fn auth_middleware( [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_token` is never used [INFO] [stdout] --> crates/api/src/middleware.rs:59:4 [INFO] [stdout] | [INFO] [stdout] 59 | fn validate_token(_token: &str, _secret: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `cors_middleware` is never used [INFO] [stdout] --> crates/api/src/middleware.rs:64:14 [INFO] [stdout] | [INFO] [stdout] 64 | pub async fn cors_middleware( [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AppState` is never constructed [INFO] [stdout] --> crates/api/src/state.rs:8:12 [INFO] [stdout] | [INFO] [stdout] 8 | pub struct AppState { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 02s [INFO] running `Command { std: "docker" "inspect" "3edc1cbe545b8af101197397ad9aef1d26b1516d936be25b8800b231b896819a", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "3edc1cbe545b8af101197397ad9aef1d26b1516d936be25b8800b231b896819a", kill_on_drop: false }` [INFO] [stdout] 3edc1cbe545b8af101197397ad9aef1d26b1516d936be25b8800b231b896819a