[INFO] cloning repository https://github.com/AmitabhMorey/NebulaSync
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/AmitabhMorey/NebulaSync" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FAmitabhMorey%2FNebulaSync", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FAmitabhMorey%2FNebulaSync'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] cf27d6e4987dc6c38f4670d0596d6f4ac7182db4
[INFO] checking AmitabhMorey/NebulaSync against master#779e19d8baa3e3625bd4fc5c85cbb2ad47b43155 for pr-147589-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FAmitabhMorey%2FNebulaSync" "/workspace/builds/worker-0-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-0-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/AmitabhMorey/NebulaSync
[INFO] finished tweaking git repo https://github.com/AmitabhMorey/NebulaSync
[INFO] tweaked toml for git repo https://github.com/AmitabhMorey/NebulaSync written to /workspace/builds/worker-0-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/AmitabhMorey/NebulaSync on toolchain 779e19d8baa3e3625bd4fc5c85cbb2ad47b43155
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+779e19d8baa3e3625bd4fc5c85cbb2ad47b43155" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/AmitabhMorey/NebulaSync 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" "+779e19d8baa3e3625bd4fc5c85cbb2ad47b43155" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded tokio-test v0.4.4
[INFO] [stderr]   Downloaded wasi v0.14.5+wasi-0.2.4
[INFO] [stderr]   Downloaded tempfile v3.22.0
[INFO] [stderr]   Downloaded mdns-sd v0.7.5
[INFO] [stderr]   Downloaded cc v1.2.36
[INFO] [stderr]   Downloaded indexmap v2.11.1
[INFO] [stderr]   Downloaded wit-bindgen v0.45.1
[INFO] [stderr]   Downloaded wasip2 v1.0.0+wasi-0.2.4
[INFO] [stderr]   Downloaded ratatui v0.24.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-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:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+779e19d8baa3e3625bd4fc5c85cbb2ad47b43155" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 7c10faf14c0a852a3cd6348874c29c2de5115a94dc0def8e35e3c5afb68a77b0
[INFO] running `Command { std: "docker" "start" "-a" "7c10faf14c0a852a3cd6348874c29c2de5115a94dc0def8e35e3c5afb68a77b0", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "7c10faf14c0a852a3cd6348874c29c2de5115a94dc0def8e35e3c5afb68a77b0", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "7c10faf14c0a852a3cd6348874c29c2de5115a94dc0def8e35e3c5afb68a77b0", kill_on_drop: false }`
[INFO] [stdout] 7c10faf14c0a852a3cd6348874c29c2de5115a94dc0def8e35e3c5afb68a77b0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-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:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+779e19d8baa3e3625bd4fc5c85cbb2ad47b43155" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 6d7132cf4e52120f48a6fc74628bea24afd64a029860aea910efaa4223d75d75
[INFO] running `Command { std: "docker" "start" "-a" "6d7132cf4e52120f48a6fc74628bea24afd64a029860aea910efaa4223d75d75", kill_on_drop: false }`
[INFO] [stderr]    Compiling serde v1.0.219
[INFO] [stderr]     Checking log v0.4.28
[INFO] [stderr]     Checking smallvec v1.15.1
[INFO] [stderr]     Checking foldhash v0.1.5
[INFO] [stderr]     Checking regex-syntax v0.8.5
[INFO] [stderr]    Compiling rustversion v1.0.22
[INFO] [stderr]    Compiling find-msvc-tools v0.1.1
[INFO] [stderr]     Checking bitflags v2.9.4
[INFO] [stderr]    Compiling getrandom v0.3.3
[INFO] [stderr]    Compiling polling v2.8.0
[INFO] [stderr]     Checking tracing-core v0.1.34
[INFO] [stderr]    Compiling syn v2.0.106
[INFO] [stderr]     Checking signal-hook v0.3.18
[INFO] [stderr]     Checking spin v0.9.8
[INFO] [stderr]     Checking crossbeam-epoch v0.9.18
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]     Checking hashbrown v0.15.5
[INFO] [stderr]     Checking toml_write v0.1.2
[INFO] [stderr]     Checking mio v0.8.11
[INFO] [stderr]     Checking parking_lot_core v0.9.11
[INFO] [stderr]     Checking futures-sink v0.3.31
[INFO] [stderr]     Checking winnow v0.7.13
[INFO] [stderr]    Compiling rayon-core v1.13.0
[INFO] [stderr]     Checking sharded-slab v0.1.7
[INFO] [stderr]     Checking if-addrs v0.10.2
[INFO] [stderr]     Checking getrandom v0.2.16
[INFO] [stderr]     Checking parking_lot v0.12.4
[INFO] [stderr]    Compiling cc v1.2.36
[INFO] [stderr]     Checking socket2 v0.4.10
[INFO] [stderr]     Checking half v2.6.0
[INFO] [stderr]     Checking thread_local v1.1.9
[INFO] [stderr]     Checking itertools v0.11.0
[INFO] [stderr]     Checking plotters-backend v0.3.7
[INFO] [stderr]     Checking tracing-log v0.2.0
[INFO] [stderr]     Checking signal-hook-mio v0.2.4
[INFO] [stderr]    Compiling rustix v1.1.2
[INFO] [stderr]     Checking cassowary v0.3.0
[INFO] [stderr]     Checking nu-ansi-term v0.50.1
[INFO] [stderr]     Checking crossbeam-deque v0.8.6
[INFO] [stderr]     Checking unicode-width v0.1.14
[INFO] [stderr]     Checking crossterm v0.27.0
[INFO] [stderr]     Checking ciborium-io v0.2.2
[INFO] [stderr]     Checking indexmap v2.11.1
[INFO] [stderr]     Checking lru v0.12.5
[INFO] [stderr]    Compiling indoc v2.0.6
[INFO] [stderr]     Checking ciborium-ll v0.2.2
[INFO] [stderr]     Checking plotters-svg v0.3.7
[INFO] [stderr]     Checking clap_builder v4.5.47
[INFO] [stderr]     Checking itertools v0.10.5
[INFO] [stderr]     Checking linux-raw-sys v0.11.0
[INFO] [stderr]     Checking walkdir v2.5.0
[INFO] [stderr]     Checking is-terminal v0.4.16
[INFO] [stderr]     Checking oorandom v11.1.5
[INFO] [stderr]     Checking rayon v1.11.0
[INFO] [stderr]     Checking regex-automata v0.4.9
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]     Checking plotters v0.3.7
[INFO] [stderr]     Checking criterion-plot v0.5.0
[INFO] [stderr]     Checking clap v4.5.47
[INFO] [stderr]     Checking tempfile v3.22.0
[INFO] [stderr]     Checking matchers v0.2.0
[INFO] [stderr]     Checking regex v1.11.2
[INFO] [stderr]    Compiling serde_derive v1.0.219
[INFO] [stderr]    Compiling tokio-macros v2.5.0
[INFO] [stderr]    Compiling pin-project-internal v1.1.10
[INFO] [stderr]    Compiling strum_macros v0.25.3
[INFO] [stderr]    Compiling tracing-attributes v0.1.30
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling async-stream-impl v0.3.6
[INFO] [stderr]     Checking async-stream v0.3.6
[INFO] [stderr]     Checking tokio v1.47.1
[INFO] [stderr]     Checking thiserror v1.0.69
[INFO] [stderr]     Checking pin-project v1.1.10
[INFO] [stderr]     Checking tracing v0.1.41
[INFO] [stderr]     Checking flume v0.10.14
[INFO] [stderr]     Checking tracing-subscriber v0.3.20
[INFO] [stderr]     Checking mdns-sd v0.7.5
[INFO] [stderr]     Checking strum v0.25.0
[INFO] [stderr]     Checking ratatui v0.24.0
[INFO] [stderr]     Checking tokio-stream v0.1.17
[INFO] [stderr]     Checking tokio-test v0.4.4
[INFO] [stderr]     Checking toml_datetime v0.6.11
[INFO] [stderr]     Checking serde_spanned v0.6.9
[INFO] [stderr]     Checking bincode v1.3.3
[INFO] [stderr]     Checking serde_json v1.0.143
[INFO] [stderr]     Checking uuid v1.18.1
[INFO] [stderr]     Checking ciborium v0.2.2
[INFO] [stderr]     Checking toml_edit v0.22.27
[INFO] [stderr]     Checking tinytemplate v1.2.1
[INFO] [stderr]     Checking criterion v0.5.1
[INFO] [stderr]     Checking toml v0.8.23
[INFO] [stderr]     Checking secure-rust-chat v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `SystemTime`
[INFO] [stdout]  --> src/presence/manager.rs:3:27
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::time::{Duration, SystemTime};
[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: `Interval`
[INFO] [stdout]  --> src/presence/manager.rs:5:29
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::time::{interval, Interval};
[INFO] [stdout]   |                             ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MessageType`
[INFO] [stdout]  --> src/presence/manager.rs:6:39
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::messaging::types::{PeerId, MessageType};
[INFO] [stdout]   |                                       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::file_transfer::types::TransferStatus`
[INFO] [stdout]   --> src/ui/cli.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use crate::file_transfer::types::TransferStatus;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Subscriber`
[INFO] [stdout]  --> src/utils/logging.rs:1:22
[INFO] [stdout]   |
[INFO] [stdout] 1 | use tracing::{Level, Subscriber};
[INFO] [stdout]   |                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/file_transfer/manager.rs:93:23
[INFO] [stdout]    |
[INFO] [stdout] 93 |             .map_err(|e| FileTransferError::TransferInterrupted)?;
[INFO] [stdout]    |                       ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::messaging::types::PresenceStatus`
[INFO] [stdout]    --> src/messaging/handler.rs:218:9
[INFO] [stdout]     |
[INFO] [stdout] 218 |     use crate::messaging::types::PresenceStatus;
[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: `tokio::net::TcpListener`
[INFO] [stdout]    --> src/networking/connection.rs:169:9
[INFO] [stdout]     |
[INFO] [stdout] 169 |     use tokio::net::TcpListener;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Interval`
[INFO] [stdout]  --> src/presence/manager.rs:5:29
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::time::{interval, Interval};
[INFO] [stdout]   |                             ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MessageType`
[INFO] [stdout]  --> src/presence/manager.rs:6:39
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::messaging::types::{PeerId, MessageType};
[INFO] [stdout]   |                                       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::file_transfer::types::TransferStatus`
[INFO] [stdout]   --> src/ui/cli.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use crate::file_transfer::types::TransferStatus;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Subscriber`
[INFO] [stdout]  --> src/utils/logging.rs:1:22
[INFO] [stdout]   |
[INFO] [stdout] 1 | use tracing::{Level, Subscriber};
[INFO] [stdout]   |                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `transfer_receiver` is never read
[INFO] [stdout]   --> src/file_transfer/manager.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct FileTransferManager {
[INFO] [stdout]    |            ------------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 22 |     transfer_receiver: mpsc::Receiver<(PeerId, FileTransferMessage)>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `global_message_queue` is never read
[INFO] [stdout]    --> src/messaging/handler.rs:127:5
[INFO] [stdout]     |
[INFO] [stdout] 125 | pub struct MessageRouter {
[INFO] [stdout]     |            ------------- field in this struct
[INFO] [stdout] 126 |     handlers: HashMap<PeerId, SecureMessageHandler>,
[INFO] [stdout] 127 |     global_message_queue: Arc<Mutex<Vec<Message>>>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `render_ui` is never used
[INFO] [stdout]    --> src/ui/tui.rs:251:8
[INFO] [stdout]     |
[INFO] [stdout] 160 | impl TuiInterface {
[INFO] [stdout]     | ----------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 251 |     fn render_ui(&mut self, f: &mut Frame) {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]    --> src/auth/session.rs:152:5
[INFO] [stdout]     |
[INFO] [stdout] 152 |     async fn initiate_authentication(&mut self, peer_id: PeerId, shared_key: &[u8]) -> Result<Vec<u8>, AppError>;
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout]     = note: `#[warn(async_fn_in_trait)]` on by default
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]     |
[INFO] [stdout] 152 -     async fn initiate_authentication(&mut self, peer_id: PeerId, shared_key: &[u8]) -> Result<Vec<u8>, AppError>;
[INFO] [stdout] 152 +     fn initiate_authentication(&mut self, peer_id: PeerId, shared_key: &[u8]) -> impl std::future::Future<Output = Result<Vec<u8>, AppError>> + Send;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]    --> src/auth/session.rs:153:5
[INFO] [stdout]     |
[INFO] [stdout] 153 |     async fn respond_to_challenge(&self, challenge: &[u8], shared_key: &[u8], peer_id: &PeerId) -> Result<Vec<u8>, AppError>;
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]     |
[INFO] [stdout] 153 -     async fn respond_to_challenge(&self, challenge: &[u8], shared_key: &[u8], peer_id: &PeerId) -> Result<Vec<u8>, AppError>;
[INFO] [stdout] 153 +     fn respond_to_challenge(&self, challenge: &[u8], shared_key: &[u8], peer_id: &PeerId) -> impl std::future::Future<Output = Result<Vec<u8>, AppError>> + Send;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]    --> src/auth/session.rs:154:5
[INFO] [stdout]     |
[INFO] [stdout] 154 |     async fn verify_authentication(&mut self, peer_id: &PeerId, response: &[u8], shared_key: &[u8]) -> Result<bool, AppError>;
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]     |
[INFO] [stdout] 154 -     async fn verify_authentication(&mut self, peer_id: &PeerId, response: &[u8], shared_key: &[u8]) -> Result<bool, AppError>;
[INFO] [stdout] 154 +     fn verify_authentication(&mut self, peer_id: &PeerId, response: &[u8], shared_key: &[u8]) -> impl std::future::Future<Output = Result<bool, AppError>> + Send;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]  --> src/messaging/handler.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 |     async fn send_message(&mut self, recipient: PeerId, message_type: MessageType) -> Result<(), AppError>;
[INFO] [stdout]   |     ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]   |
[INFO] [stdout] 9 -     async fn send_message(&mut self, recipient: PeerId, message_type: MessageType) -> Result<(), AppError>;
[INFO] [stdout] 9 +     fn send_message(&mut self, recipient: PeerId, message_type: MessageType) -> impl std::future::Future<Output = Result<(), AppError>> + Send;
[INFO] [stdout]   |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/messaging/handler.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 |     async fn receive_message(&mut self) -> Result<Option<Message>, AppError>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 10 -     async fn receive_message(&mut self) -> Result<Option<Message>, AppError>;
[INFO] [stdout] 10 +     fn receive_message(&mut self) -> impl std::future::Future<Output = Result<Option<Message>, AppError>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/networking/discovery.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 |     async fn start_discovery(&self) -> Result<(), AppError>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 10 -     async fn start_discovery(&self) -> Result<(), AppError>;
[INFO] [stdout] 10 +     fn start_discovery(&self) -> impl std::future::Future<Output = Result<(), AppError>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/networking/discovery.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 |     async fn advertise_service(&self, service_info: ServiceInfo) -> Result<(), AppError>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 11 -     async fn advertise_service(&self, service_info: ServiceInfo) -> Result<(), AppError>;
[INFO] [stdout] 11 +     fn advertise_service(&self, service_info: ServiceInfo) -> impl std::future::Future<Output = Result<(), AppError>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/networking/connection.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 |     async fn connect_to_peer(&self, peer: PeerInfo) -> Result<Connection, AppError>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 11 -     async fn connect_to_peer(&self, peer: PeerInfo) -> Result<Connection, AppError>;
[INFO] [stdout] 11 +     fn connect_to_peer(&self, peer: PeerInfo) -> impl std::future::Future<Output = Result<Connection, AppError>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/networking/connection.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 |     async fn accept_connection(&self) -> Result<Connection, AppError>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 12 -     async fn accept_connection(&self) -> Result<Connection, AppError>;
[INFO] [stdout] 12 +     fn accept_connection(&self) -> impl std::future::Future<Output = Result<Connection, AppError>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/networking/connection.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 |     async fn send_message(&self, conn: &mut Connection, message: EncryptedData) -> Result<(), AppError>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 13 -     async fn send_message(&self, conn: &mut Connection, message: EncryptedData) -> Result<(), AppError>;
[INFO] [stdout] 13 +     fn send_message(&self, conn: &mut Connection, message: EncryptedData) -> impl std::future::Future<Output = Result<(), AppError>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/networking/connection.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 |     async fn receive_message(&self, conn: &mut Connection) -> Result<EncryptedData, AppError>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 14 -     async fn receive_message(&self, conn: &mut Connection) -> Result<EncryptedData, AppError>;
[INFO] [stdout] 14 +     fn receive_message(&self, conn: &mut Connection) -> impl std::future::Future<Output = Result<EncryptedData, AppError>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `HeartbeatMessage` and `PresenceStatus`
[INFO] [stdout]    --> tests/integration_tests.rs:101:45
[INFO] [stdout]     |
[INFO] [stdout] 101 |     use secure_rust_chat::presence::types::{PresenceStatus, HeartbeatMessage};
[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: `SessionInfo`
[INFO] [stdout]  --> tests/security_tests.rs:3:100
[INFO] [stdout]   |
[INFO] [stdout] 3 | use secure_rust_chat::auth::session::{SessionManager, MutualAuthenticator, AuthenticationProtocol, SessionInfo};
[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: `EncryptedData`
[INFO] [stdout]  --> tests/security_tests.rs:7:50
[INFO] [stdout]   |
[INFO] [stdout] 7 | use secure_rust_chat::messaging::types::{PeerId, EncryptedData, Message, MessageType};
[INFO] [stdout]   |                                                  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `secure_rust_chat`
[INFO] [stdout]  --> tests/integration_tests.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use secure_rust_chat::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::net::TcpListener`
[INFO] [stdout]    --> src/networking/connection.rs:169:9
[INFO] [stdout]     |
[INFO] [stdout] 169 |     use tokio::net::TcpListener;
[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: `discovery::*`
[INFO] [stdout]  --> src/networking/mod.rs:4:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub use discovery::*;
[INFO] [stdout]   |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `connection::*`
[INFO] [stdout]  --> src/networking/mod.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use connection::*;
[INFO] [stdout]   |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `engine::*`
[INFO] [stdout]  --> src/crypto/mod.rs:4:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub use engine::*;
[INFO] [stdout]   |         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `keys::*`
[INFO] [stdout]  --> src/crypto/mod.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use keys::*;
[INFO] [stdout]   |         ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::messaging::types::PresenceStatus`
[INFO] [stdout]    --> src/messaging/handler.rs:218:9
[INFO] [stdout]     |
[INFO] [stdout] 218 |     use crate::messaging::types::PresenceStatus;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `types::*`
[INFO] [stdout]  --> src/messaging/mod.rs:4:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub use types::*;
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `handler::*`
[INFO] [stdout]  --> src/messaging/mod.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use handler::*;
[INFO] [stdout]   |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `manager::*`
[INFO] [stdout]  --> src/file_transfer/mod.rs:4:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub use manager::*;
[INFO] [stdout]   |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `types::*`
[INFO] [stdout]  --> src/file_transfer/mod.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use types::*;
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Interval`
[INFO] [stdout]  --> src/presence/manager.rs:5:29
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::time::{interval, Interval};
[INFO] [stdout]   |                             ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MessageType`
[INFO] [stdout]  --> src/presence/manager.rs:6:39
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::messaging::types::{PeerId, MessageType};
[INFO] [stdout]   |                                       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `manager::*`
[INFO] [stdout]  --> src/presence/mod.rs:4:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub use manager::*;
[INFO] [stdout]   |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `types::*`
[INFO] [stdout]  --> src/presence/mod.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use types::*;
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::file_transfer::types::TransferStatus`
[INFO] [stdout]   --> src/ui/cli.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use crate::file_transfer::types::TransferStatus;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `cli::*`
[INFO] [stdout]  --> src/ui/mod.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub use cli::*;
[INFO] [stdout]   |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tui::*`
[INFO] [stdout]  --> src/ui/mod.rs:9:9
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub use tui::*;
[INFO] [stdout]   |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Subscriber`
[INFO] [stdout]  --> src/utils/logging.rs:1:22
[INFO] [stdout]   |
[INFO] [stdout] 1 | use tracing::{Level, Subscriber};
[INFO] [stdout]   |                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `config::*`
[INFO] [stdout]  --> src/utils/mod.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use config::*;
[INFO] [stdout]   |         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `logging::*`
[INFO] [stdout]  --> src/utils/mod.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub use logging::*;
[INFO] [stdout]   |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `errors::*`
[INFO] [stdout]  --> src/utils/mod.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use errors::*;
[INFO] [stdout]   |         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MessageRouter`
[INFO] [stdout]  --> tests/performance_tests.rs:4:44
[INFO] [stdout]   |
[INFO] [stdout] 4 | use secure_rust_chat::messaging::handler::{MessageRouter, MessageDeduplicator};
[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: `session::*`
[INFO] [stdout]  --> src/auth/mod.rs:4:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub use session::*;
[INFO] [stdout]   |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `challenge::*`
[INFO] [stdout]  --> src/auth/mod.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use challenge::*;
[INFO] [stdout]   |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]   --> src/main.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use std::sync::Arc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc`
[INFO] [stdout]   --> src/main.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tokio::sync::mpsc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]   --> src/main.rs:15:28
[INFO] [stdout]    |
[INFO] [stdout] 15 | use tracing::{info, error, warn};
[INFO] [stdout]    |                            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SecureMessageHandler`
[INFO] [stdout]   --> src/main.rs:20:33
[INFO] [stdout]    |
[INFO] [stdout] 20 | use crate::messaging::handler::{SecureMessageHandler, MessageRouter};
[INFO] [stdout]    |                                 ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::presence::types::PresenceStatus`
[INFO] [stdout]   --> src/main.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use crate::presence::types::PresenceStatus;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc`
[INFO] [stdout]   --> tests/performance_tests.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tokio::sync::mpsc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around function argument
[INFO] [stdout]    --> tests/performance_tests.rs:287:34
[INFO] [stdout]     |
[INFO] [stdout] 287 |             let file_data = vec![(i as u8); file_size];
[INFO] [stdout]     |                                  ^       ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 287 -             let file_data = vec![(i as u8); file_size];
[INFO] [stdout] 287 +             let file_data = vec![i as u8; file_size];
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `secure_rust_chat::*`
[INFO] [stdout]  --> tests/end_to_end_tests.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use secure_rust_chat::*;
[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: `Message`
[INFO] [stdout]  --> tests/end_to_end_tests.rs:5:50
[INFO] [stdout]   |
[INFO] [stdout] 5 | use secure_rust_chat::messaging::types::{PeerId, Message, MessageType, EncryptedData};
[INFO] [stdout]   |                                                  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MessageDeduplicator`
[INFO] [stdout]  --> tests/end_to_end_tests.rs:6:59
[INFO] [stdout]   |
[INFO] [stdout] 6 | use secure_rust_chat::messaging::handler::{MessageRouter, MessageDeduplicator};
[INFO] [stdout]   |                                                           ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PeerDiscovery`
[INFO] [stdout]  --> tests/end_to_end_tests.rs:8:47
[INFO] [stdout]   |
[INFO] [stdout] 8 | use secure_rust_chat::networking::discovery::{PeerDiscovery, MdnsDiscovery};
[INFO] [stdout]   |                                               ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `CliCommand`
[INFO] [stdout]   --> tests/end_to_end_tests.rs:12:47
[INFO] [stdout]    |
[INFO] [stdout] 12 | use secure_rust_chat::ui::cli::{CliInterface, CliCommand};
[INFO] [stdout]    |                                               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `secure_rust_chat::utils::errors::AppError`
[INFO] [stdout]   --> tests/end_to_end_tests.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use secure_rust_chat::utils::errors::AppError;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc` and `Mutex`
[INFO] [stdout]   --> tests/end_to_end_tests.rs:16:17
[INFO] [stdout]    |
[INFO] [stdout] 16 | use std::sync::{Arc, Mutex};
[INFO] [stdout]    |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc`
[INFO] [stdout]   --> tests/end_to_end_tests.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use tokio::sync::mpsc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `uuid::Uuid`
[INFO] [stdout]   --> tests/end_to_end_tests.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use uuid::Uuid;
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around function argument
[INFO] [stdout]    --> tests/end_to_end_tests.rs:684:38
[INFO] [stdout]     |
[INFO] [stdout] 684 |                 let dummy_key = vec![(i as u8); 32];
[INFO] [stdout]     |                                      ^       ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 684 -                 let dummy_key = vec![(i as u8); 32];
[INFO] [stdout] 684 +                 let dummy_key = vec![i as u8; 32];
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Connection`
[INFO] [stdout]  --> tests/networking_tests.rs:3:89
[INFO] [stdout]   |
[INFO] [stdout] 3 | use secure_rust_chat::networking::connection::{ConnectionManager, TcpConnectionManager, Connection};
[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: `PeerDiscovery`
[INFO] [stdout]  --> tests/networking_tests.rs:4:47
[INFO] [stdout]   |
[INFO] [stdout] 4 | use secure_rust_chat::networking::discovery::{PeerDiscovery, MdnsDiscovery};
[INFO] [stdout]   |                                               ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `TcpListener` and `TcpStream`
[INFO] [stdout]  --> tests/networking_tests.rs:7:18
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::net::{TcpListener, TcpStream};
[INFO] [stdout]   |                  ^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AsyncReadExt` and `AsyncWriteExt`
[INFO] [stdout]  --> tests/networking_tests.rs:8:17
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio::io::{AsyncReadExt, AsyncWriteExt};
[INFO] [stdout]   |                 ^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `discovery::*`
[INFO] [stdout]  --> src/networking/mod.rs:4:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub use discovery::*;
[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: `connection::*`
[INFO] [stdout]  --> src/networking/mod.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use connection::*;
[INFO] [stdout]   |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `engine::*`
[INFO] [stdout]  --> src/crypto/mod.rs:4:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub use engine::*;
[INFO] [stdout]   |         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `keys::*`
[INFO] [stdout]  --> src/crypto/mod.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use keys::*;
[INFO] [stdout]   |         ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `types::*`
[INFO] [stdout]  --> src/messaging/mod.rs:4:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub use types::*;
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `handler::*`
[INFO] [stdout]  --> src/messaging/mod.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use handler::*;
[INFO] [stdout]   |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `manager::*`
[INFO] [stdout]  --> src/file_transfer/mod.rs:4:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub use manager::*;
[INFO] [stdout]   |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `types::*`
[INFO] [stdout]  --> src/file_transfer/mod.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use types::*;
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SystemTime`
[INFO] [stdout]  --> src/presence/manager.rs:3:27
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::time::{Duration, SystemTime};
[INFO] [stdout]   |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Interval`
[INFO] [stdout]  --> src/presence/manager.rs:5:29
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::time::{interval, Interval};
[INFO] [stdout]   |                             ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MessageType`
[INFO] [stdout]  --> src/presence/manager.rs:6:39
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::messaging::types::{PeerId, MessageType};
[INFO] [stdout]   |                                       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `manager::*`
[INFO] [stdout]  --> src/presence/mod.rs:4:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub use manager::*;
[INFO] [stdout]   |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `types::*`
[INFO] [stdout]  --> src/presence/mod.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use types::*;
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::file_transfer::types::TransferStatus`
[INFO] [stdout]   --> src/ui/cli.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use crate::file_transfer::types::TransferStatus;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `cli::*`
[INFO] [stdout]  --> src/ui/mod.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub use cli::*;
[INFO] [stdout]   |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tui::*`
[INFO] [stdout]  --> src/ui/mod.rs:9:9
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub use tui::*;
[INFO] [stdout]   |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Subscriber`
[INFO] [stdout]  --> src/utils/logging.rs:1:22
[INFO] [stdout]   |
[INFO] [stdout] 1 | use tracing::{Level, Subscriber};
[INFO] [stdout]   |                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `config::*`
[INFO] [stdout]  --> src/utils/mod.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use config::*;
[INFO] [stdout]   |         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `logging::*`
[INFO] [stdout]  --> src/utils/mod.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub use logging::*;
[INFO] [stdout]   |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `errors::*`
[INFO] [stdout]  --> src/utils/mod.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use errors::*;
[INFO] [stdout]   |         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `session::*`
[INFO] [stdout]  --> src/auth/mod.rs:4:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub use session::*;
[INFO] [stdout]   |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `challenge::*`
[INFO] [stdout]  --> src/auth/mod.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use challenge::*;
[INFO] [stdout]   |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]   --> src/main.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use std::sync::Arc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc`
[INFO] [stdout]   --> src/main.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tokio::sync::mpsc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]   --> src/main.rs:15:28
[INFO] [stdout]    |
[INFO] [stdout] 15 | use tracing::{info, error, warn};
[INFO] [stdout]    |                            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SecureMessageHandler`
[INFO] [stdout]   --> src/main.rs:20:33
[INFO] [stdout]    |
[INFO] [stdout] 20 | use crate::messaging::handler::{SecureMessageHandler, MessageRouter};
[INFO] [stdout]    |                                 ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::presence::types::PresenceStatus`
[INFO] [stdout]   --> src/main.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use crate::presence::types::PresenceStatus;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `session_id`
[INFO] [stdout]   --> tests/security_tests.rs:23:13
[INFO] [stdout]    |
[INFO] [stdout] 23 |         let session_id = session_manager.create_session(peer_id.clone(), session_key).unwrap();
[INFO] [stdout]    |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_session_id`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> tests/security_tests.rs:179:19
[INFO] [stdout]     |
[INFO] [stdout] 179 |         if let Ok(mut encrypted) = encrypted {
[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]    --> tests/security_tests.rs:244:19
[INFO] [stdout]     |
[INFO] [stdout] 244 |         if let Ok(mut encrypted) = encrypted {
[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]    --> tests/security_tests.rs:299:19
[INFO] [stdout]     |
[INFO] [stdout] 299 |         if let Ok(mut encrypted) = encrypted {
[INFO] [stdout]     |                   ----^^^^^^^^^
[INFO] [stdout]     |                   |
[INFO] [stdout]     |                   help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `decrypted`
[INFO] [stdout]    --> tests/security_tests.rs:444:20
[INFO] [stdout]     |
[INFO] [stdout] 444 |                 Ok(decrypted) => {
[INFO] [stdout]     |                    ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_decrypted`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key_exchange_result2`
[INFO] [stdout]   --> tests/end_to_end_tests.rs:44:13
[INFO] [stdout]    |
[INFO] [stdout] 44 |         let key_exchange_result2 = engine2.derive_session_key(peer1_id.clone(), &public_key1);
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_key_exchange_result2`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> tests/end_to_end_tests.rs:74:13
[INFO] [stdout]    |
[INFO] [stdout] 74 |         let mut authenticator2 = MutualAuthenticator::new();
[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: unused variable: `inbound_tx`
[INFO] [stdout]    --> tests/end_to_end_tests.rs:120:44
[INFO] [stdout]     |
[INFO] [stdout] 120 |         let (mut manager, mut outbound_rx, inbound_tx) = FileTransferManager::new(1024 * 1024, 256);
[INFO] [stdout]     |                                            ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_inbound_tx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> tests/end_to_end_tests.rs:156:24
[INFO] [stdout]     |
[INFO] [stdout] 156 |         let (manager1, mut outbound_rx1, inbound_tx1) = PresenceManager::new(peer1_id.clone());
[INFO] [stdout]     |                        ----^^^^^^^^^^^^
[INFO] [stdout]     |                        |
[INFO] [stdout]     |                        help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> tests/end_to_end_tests.rs:157:24
[INFO] [stdout]     |
[INFO] [stdout] 157 |         let (manager2, mut outbound_rx2, inbound_tx2) = PresenceManager::new(peer2_id.clone());
[INFO] [stdout]     |                        ----^^^^^^^^^^^^
[INFO] [stdout]     |                        |
[INFO] [stdout]     |                        help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `outbound_rx1`
[INFO] [stdout]    --> tests/end_to_end_tests.rs:156:24
[INFO] [stdout]     |
[INFO] [stdout] 156 |         let (manager1, mut outbound_rx1, inbound_tx1) = PresenceManager::new(peer1_id.clone());
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_outbound_rx1`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `inbound_tx1`
[INFO] [stdout]    --> tests/end_to_end_tests.rs:156:42
[INFO] [stdout]     |
[INFO] [stdout] 156 |         let (manager1, mut outbound_rx1, inbound_tx1) = PresenceManager::new(peer1_id.clone());
[INFO] [stdout]     |                                          ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_inbound_tx1`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `outbound_rx2`
[INFO] [stdout]    --> tests/end_to_end_tests.rs:157:24
[INFO] [stdout]     |
[INFO] [stdout] 157 |         let (manager2, mut outbound_rx2, inbound_tx2) = PresenceManager::new(peer2_id.clone());
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_outbound_rx2`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `inbound_tx2`
[INFO] [stdout]    --> tests/end_to_end_tests.rs:157:42
[INFO] [stdout]     |
[INFO] [stdout] 157 |         let (manager2, mut outbound_rx2, inbound_tx2) = PresenceManager::new(peer2_id.clone());
[INFO] [stdout]     |                                          ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_inbound_tx2`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `network_manager`
[INFO] [stdout]    --> tests/end_to_end_tests.rs:345:13
[INFO] [stdout]     |
[INFO] [stdout] 345 |         let network_manager = TcpConnectionManager::new_client();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_network_manager`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> tests/end_to_end_tests.rs:423:14
[INFO] [stdout]     |
[INFO] [stdout] 423 |         let (mut receiver_manager, _outbound_rx2, inbound_tx2) = FileTransferManager::new(1024 * 1024, 512);
[INFO] [stdout]     |              ----^^^^^^^^^^^^^^^^
[INFO] [stdout]     |              |
[INFO] [stdout]     |              help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0616]: field `listener` of struct `secure_rust_chat::TcpConnectionManager` is private
[INFO] [stdout]    --> tests/networking_tests.rs:180:66
[INFO] [stdout]     |
[INFO] [stdout] 180 |         let bound_addr = if let Some(listener) = &server_manager.listener {
[INFO] [stdout]     |                                                                  ^^^^^^^^ private field
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `receiver_manager`
[INFO] [stdout]    --> tests/end_to_end_tests.rs:423:14
[INFO] [stdout]     |
[INFO] [stdout] 423 |         let (mut receiver_manager, _outbound_rx2, inbound_tx2) = FileTransferManager::new(1024 * 1024, 512);
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_receiver_manager`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `inbound_tx2`
[INFO] [stdout]    --> tests/end_to_end_tests.rs:423:51
[INFO] [stdout]     |
[INFO] [stdout] 423 |         let (mut receiver_manager, _outbound_rx2, inbound_tx2) = FileTransferManager::new(1024 * 1024, 512);
[INFO] [stdout]     |                                                   ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_inbound_tx2`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sender_id`
[INFO] [stdout]    --> tests/end_to_end_tests.rs:425:13
[INFO] [stdout]     |
[INFO] [stdout] 425 |         let sender_id = PeerId::new("file_sender".to_string());
[INFO] [stdout]     |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sender_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> tests/networking_tests.rs:181:13
[INFO] [stdout]     |
[INFO] [stdout] 181 |             listener.local_addr().unwrap()
[INFO] [stdout]     |             ^^^^^^^^ cannot infer type
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `crypto_engine`
[INFO] [stdout]    --> tests/end_to_end_tests.rs:542:13
[INFO] [stdout]     |
[INFO] [stdout] 542 |         let crypto_engine = CryptoEngine::new().unwrap();
[INFO] [stdout]     |             ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_crypto_engine`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `cli_interface`
[INFO] [stdout]    --> tests/end_to_end_tests.rs:567:13
[INFO] [stdout]     |
[INFO] [stdout] 567 |         let cli_interface = CliInterface::new();
[INFO] [stdout]     |             ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_cli_interface`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> tests/end_to_end_tests.rs:589:14
[INFO] [stdout]     |
[INFO] [stdout] 589 |         let (mut presence_manager, _p_out, _p_in) = PresenceManager::new(own_peer_id.clone());
[INFO] [stdout]     |              ----^^^^^^^^^^^^^^^^
[INFO] [stdout]     |              |
[INFO] [stdout]     |              help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> tests/end_to_end_tests.rs:590:14
[INFO] [stdout]     |
[INFO] [stdout] 590 |         let (mut file_manager, _f_out, _f_in) = FileTransferManager::new(1024 * 1024, 1024);
[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]    --> tests/performance_tests.rs:294:14
[INFO] [stdout]     |
[INFO] [stdout] 294 |         let (mut manager, _outbound_rx, _inbound_tx) = FileTransferManager::new(1024 * 1024, chunk_size);
[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: unused variable: `peer_id`
[INFO] [stdout]   --> tests/networking_tests.rs:20:13
[INFO] [stdout]    |
[INFO] [stdout] 20 |         let peer_id = PeerId::new("test_peer".to_string());
[INFO] [stdout]    |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_peer_id`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: future cannot be sent between threads safely
[INFO] [stdout]    --> tests/performance_tests.rs:305:26
[INFO] [stdout]     |
[INFO] [stdout] 305 |               let handle = tokio::spawn(async move {
[INFO] [stdout]     |  __________________________^
[INFO] [stdout] 306 | |                 let result = {
[INFO] [stdout] 307 | |                     let mut manager = manager.lock().unwrap();
[INFO] [stdout] 308 | |                     manager.send_file(peer_id, &file_path).await
[INFO] [stdout] 309 | |                 };
[INFO] [stdout] 310 | |                 result
[INFO] [stdout] 311 | |             });
[INFO] [stdout]     | |______________^ future created by async block is not `Send`
[INFO] [stdout]     |
[INFO] [stdout]     = help: within `{async block@tests/performance_tests.rs:305:39: 305:49}`, the trait `Send` is not implemented for `std::sync::MutexGuard<'_, secure_rust_chat::file_transfer::FileTransferManager>`
[INFO] [stdout] note: future is not `Send` as this value is used across an await
[INFO] [stdout]    --> tests/performance_tests.rs:308:60
[INFO] [stdout]     |
[INFO] [stdout] 307 |                     let mut manager = manager.lock().unwrap();
[INFO] [stdout]     |                         ----------- has type `std::sync::MutexGuard<'_, secure_rust_chat::file_transfer::FileTransferManager>` which is not `Send`
[INFO] [stdout] 308 |                     manager.send_file(peer_id, &file_path).await
[INFO] [stdout]     |                                                            ^^^^^ await occurs here, with `mut manager` maybe used later
[INFO] [stdout] note: required by a bound in `tokio::spawn`
[INFO] [stdout]    --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/spawn.rs:168:21
[INFO] [stdout]     |
[INFO] [stdout] 166 |     pub fn spawn<F>(future: F) -> JoinHandle<F::Output>
[INFO] [stdout]     |            ----- required by a bound in this function
[INFO] [stdout] 167 |     where
[INFO] [stdout] 168 |         F: Future + Send + 'static,
[INFO] [stdout]     |                     ^^^^ required by this bound in `spawn`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `thread_id`
[INFO] [stdout]    --> tests/performance_tests.rs:429:13
[INFO] [stdout]     |
[INFO] [stdout] 429 |         for thread_id in 0..num_threads {
[INFO] [stdout]     |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_thread_id`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `manager`
[INFO] [stdout]    --> tests/performance_tests.rs:465:14
[INFO] [stdout]     |
[INFO] [stdout] 465 |         let (manager, _outbound_rx, _inbound_tx) = PresenceManager::new(own_peer_id);
[INFO] [stdout]     |              ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_manager`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `iteration`
[INFO] [stdout]    --> tests/performance_tests.rs:472:13
[INFO] [stdout]     |
[INFO] [stdout] 472 |         for iteration in 0..heartbeat_iterations {
[INFO] [stdout]     |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_iteration`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0597]: `manager` does not live long enough
[INFO] [stdout]    --> tests/performance_tests.rs:631:35
[INFO] [stdout]     |
[INFO] [stdout] 614 |           let manager = TcpConnectionManager::new_client();
[INFO] [stdout]     |               ------- binding `manager` declared here
[INFO] [stdout] ...
[INFO] [stdout] 631 |                   let manager_ref = &manager;
[INFO] [stdout]     |                                     ^^^^^^^^ borrowed value does not live long enough
[INFO] [stdout] ...
[INFO] [stdout] 634 |                   let handle = tokio::spawn(async move {
[INFO] [stdout]     |  ______________________________-
[INFO] [stdout] 635 | |                     let serialized = manager_ref.serialize_message(message_ref).await?;
[INFO] [stdout] 636 | |                     manager_ref.deserialize_message(&serialized).await
[INFO] [stdout] 637 | |                 });
[INFO] [stdout]     | |__________________- argument requires that `manager` is borrowed for `'static`
[INFO] [stdout] ...
[INFO] [stdout] 659 |       }
[INFO] [stdout]     |       - `manager` dropped here while still borrowed
[INFO] [stdout]     |
[INFO] [stdout] note: requirement that the value outlives `'static` introduced here
[INFO] [stdout]    --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/spawn.rs:168:28
[INFO] [stdout]     |
[INFO] [stdout] 168 |         F: Future + Send + 'static,
[INFO] [stdout]     |                            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0597]: `message` does not live long enough
[INFO] [stdout]    --> tests/performance_tests.rs:632:35
[INFO] [stdout]     |
[INFO] [stdout] 618 |           let message = EncryptedData {
[INFO] [stdout]     |               ------- binding `message` declared here
[INFO] [stdout] ...
[INFO] [stdout] 632 |                   let message_ref = &message;
[INFO] [stdout]     |                                     ^^^^^^^^ borrowed value does not live long enough
[INFO] [stdout] 633 |                   
[INFO] [stdout] 634 |                   let handle = tokio::spawn(async move {
[INFO] [stdout]     |  ______________________________-
[INFO] [stdout] 635 | |                     let serialized = manager_ref.serialize_message(message_ref).await?;
[INFO] [stdout] 636 | |                     manager_ref.deserialize_message(&serialized).await
[INFO] [stdout] 637 | |                 });
[INFO] [stdout]     | |__________________- argument requires that `message` is borrowed for `'static`
[INFO] [stdout] ...
[INFO] [stdout] 659 |       }
[INFO] [stdout]     |       - `message` dropped here while still borrowed
[INFO] [stdout]     |
[INFO] [stdout] note: requirement that the value outlives `'static` introduced here
[INFO] [stdout]    --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/spawn.rs:168:28
[INFO] [stdout]     |
[INFO] [stdout] 168 |         F: Future + Send + 'static,
[INFO] [stdout]     |                            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `batch`
[INFO] [stdout]    --> tests/performance_tests.rs:627:13
[INFO] [stdout]     |
[INFO] [stdout] 627 |         for batch in 0..(num_messages / batch_size) {
[INFO] [stdout]     |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_batch`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] For more information about this error, try `rustc --explain E0597`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `secure-rust-chat` (test "performance_tests") due to 3 previous errors; 8 warnings emitted
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stdout] Some errors have detailed explanations: E0282, E0616.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0282`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `secure-rust-chat` (test "networking_tests") due to 2 previous errors; 5 warnings emitted
[INFO] [stdout] warning: unused variable: `removed_key`
[INFO] [stdout]    --> src/crypto/engine.rs:186:13
[INFO] [stdout]     |
[INFO] [stdout] 186 |         let removed_key = engine.remove_session_key(&peer_id);
[INFO] [stdout]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_removed_key`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `removed`
[INFO] [stdout]    --> src/crypto/keys.rs:154:13
[INFO] [stdout]     |
[INFO] [stdout] 154 |         let removed = key_manager.remove_session_key(&peer_id);
[INFO] [stdout]     |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_removed`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/file_transfer/manager.rs:93:23
[INFO] [stdout]    |
[INFO] [stdout] 93 |             .map_err(|e| FileTransferError::TransferInterrupted)?;
[INFO] [stdout]    |                       ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `peer_id`
[INFO] [stdout]    --> src/networking/connection.rs:174:13
[INFO] [stdout]     |
[INFO] [stdout] 174 |         let peer_id = PeerId::new("test_peer".to_string());
[INFO] [stdout]     |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_peer_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `peer_id`
[INFO] [stdout]    --> src/networking/connection.rs:188:13
[INFO] [stdout]     |
[INFO] [stdout] 188 |         let peer_id = PeerId::new("test_peer".to_string());
[INFO] [stdout]     |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_peer_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `peer_id`
[INFO] [stdout]    --> src/networking/connection.rs:236:13
[INFO] [stdout]     |
[INFO] [stdout] 236 |         let peer_id = PeerId::new("test_peer".to_string());
[INFO] [stdout]     |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_peer_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `result`
[INFO] [stdout]    --> src/utils/logging.rs:268:13
[INFO] [stdout]     |
[INFO] [stdout] 268 |         let result = init_logging(config);
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `transfer_receiver` is never read
[INFO] [stdout]   --> src/file_transfer/manager.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct FileTransferManager {
[INFO] [stdout]    |            ------------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 22 |     transfer_receiver: mpsc::Receiver<(PeerId, FileTransferMessage)>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `global_message_queue` is never read
[INFO] [stdout]    --> src/messaging/handler.rs:127:5
[INFO] [stdout]     |
[INFO] [stdout] 125 | pub struct MessageRouter {
[INFO] [stdout]     |            ------------- field in this struct
[INFO] [stdout] 126 |     handlers: HashMap<PeerId, SecureMessageHandler>,
[INFO] [stdout] 127 |     global_message_queue: Arc<Mutex<Vec<Message>>>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `render_ui` is never used
[INFO] [stdout]    --> src/ui/tui.rs:251:8
[INFO] [stdout]     |
[INFO] [stdout] 160 | impl TuiInterface {
[INFO] [stdout]     | ----------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 251 |     fn render_ui(&mut self, f: &mut Frame) {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]    --> src/auth/session.rs:152:5
[INFO] [stdout]     |
[INFO] [stdout] 152 |     async fn initiate_authentication(&mut self, peer_id: PeerId, shared_key: &[u8]) -> Result<Vec<u8>, AppError>;
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout]     = note: `#[warn(async_fn_in_trait)]` on by default
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]     |
[INFO] [stdout] 152 -     async fn initiate_authentication(&mut self, peer_id: PeerId, shared_key: &[u8]) -> Result<Vec<u8>, AppError>;
[INFO] [stdout] 152 +     fn initiate_authentication(&mut self, peer_id: PeerId, shared_key: &[u8]) -> impl std::future::Future<Output = Result<Vec<u8>, AppError>> + Send;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]    --> src/auth/session.rs:153:5
[INFO] [stdout]     |
[INFO] [stdout] 153 |     async fn respond_to_challenge(&self, challenge: &[u8], shared_key: &[u8], peer_id: &PeerId) -> Result<Vec<u8>, AppError>;
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]     |
[INFO] [stdout] 153 -     async fn respond_to_challenge(&self, challenge: &[u8], shared_key: &[u8], peer_id: &PeerId) -> Result<Vec<u8>, AppError>;
[INFO] [stdout] 153 +     fn respond_to_challenge(&self, challenge: &[u8], shared_key: &[u8], peer_id: &PeerId) -> impl std::future::Future<Output = Result<Vec<u8>, AppError>> + Send;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]    --> src/auth/session.rs:154:5
[INFO] [stdout]     |
[INFO] [stdout] 154 |     async fn verify_authentication(&mut self, peer_id: &PeerId, response: &[u8], shared_key: &[u8]) -> Result<bool, AppError>;
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]     |
[INFO] [stdout] 154 -     async fn verify_authentication(&mut self, peer_id: &PeerId, response: &[u8], shared_key: &[u8]) -> Result<bool, AppError>;
[INFO] [stdout] 154 +     fn verify_authentication(&mut self, peer_id: &PeerId, response: &[u8], shared_key: &[u8]) -> impl std::future::Future<Output = Result<bool, AppError>> + Send;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]  --> src/messaging/handler.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 |     async fn send_message(&mut self, recipient: PeerId, message_type: MessageType) -> Result<(), AppError>;
[INFO] [stdout]   |     ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]   |
[INFO] [stdout] 9 -     async fn send_message(&mut self, recipient: PeerId, message_type: MessageType) -> Result<(), AppError>;
[INFO] [stdout] 9 +     fn send_message(&mut self, recipient: PeerId, message_type: MessageType) -> impl std::future::Future<Output = Result<(), AppError>> + Send;
[INFO] [stdout]   |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/messaging/handler.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 |     async fn receive_message(&mut self) -> Result<Option<Message>, AppError>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 10 -     async fn receive_message(&mut self) -> Result<Option<Message>, AppError>;
[INFO] [stdout] 10 +     fn receive_message(&mut self) -> impl std::future::Future<Output = Result<Option<Message>, AppError>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/networking/discovery.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 |     async fn start_discovery(&self) -> Result<(), AppError>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 10 -     async fn start_discovery(&self) -> Result<(), AppError>;
[INFO] [stdout] 10 +     fn start_discovery(&self) -> impl std::future::Future<Output = Result<(), AppError>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/networking/discovery.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 |     async fn advertise_service(&self, service_info: ServiceInfo) -> Result<(), AppError>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 11 -     async fn advertise_service(&self, service_info: ServiceInfo) -> Result<(), AppError>;
[INFO] [stdout] 11 +     fn advertise_service(&self, service_info: ServiceInfo) -> impl std::future::Future<Output = Result<(), AppError>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/networking/connection.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 |     async fn connect_to_peer(&self, peer: PeerInfo) -> Result<Connection, AppError>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 11 -     async fn connect_to_peer(&self, peer: PeerInfo) -> Result<Connection, AppError>;
[INFO] [stdout] 11 +     fn connect_to_peer(&self, peer: PeerInfo) -> impl std::future::Future<Output = Result<Connection, AppError>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/networking/connection.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 |     async fn accept_connection(&self) -> Result<Connection, AppError>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 12 -     async fn accept_connection(&self) -> Result<Connection, AppError>;
[INFO] [stdout] 12 +     fn accept_connection(&self) -> impl std::future::Future<Output = Result<Connection, AppError>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/networking/connection.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 |     async fn send_message(&self, conn: &mut Connection, message: EncryptedData) -> Result<(), AppError>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 13 -     async fn send_message(&self, conn: &mut Connection, message: EncryptedData) -> Result<(), AppError>;
[INFO] [stdout] 13 +     fn send_message(&self, conn: &mut Connection, message: EncryptedData) -> impl std::future::Future<Output = Result<(), AppError>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/networking/connection.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 |     async fn receive_message(&self, conn: &mut Connection) -> Result<EncryptedData, AppError>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 14 -     async fn receive_message(&self, conn: &mut Connection) -> Result<EncryptedData, AppError>;
[INFO] [stdout] 14 +     fn receive_message(&self, conn: &mut Connection) -> impl std::future::Future<Output = Result<EncryptedData, AppError>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `peer_id`
[INFO] [stdout]    --> src/networking/connection.rs:174:13
[INFO] [stdout]     |
[INFO] [stdout] 174 |         let peer_id = PeerId::new("test_peer".to_string());
[INFO] [stdout]     |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_peer_id`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `peer_id`
[INFO] [stdout]    --> src/networking/connection.rs:188:13
[INFO] [stdout]     |
[INFO] [stdout] 188 |         let peer_id = PeerId::new("test_peer".to_string());
[INFO] [stdout]     |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_peer_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `peer_id`
[INFO] [stdout]    --> src/networking/connection.rs:236:13
[INFO] [stdout]     |
[INFO] [stdout] 236 |         let peer_id = PeerId::new("test_peer".to_string());
[INFO] [stdout]     |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_peer_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `removed_key`
[INFO] [stdout]    --> src/crypto/engine.rs:186:13
[INFO] [stdout]     |
[INFO] [stdout] 186 |         let removed_key = engine.remove_session_key(&peer_id);
[INFO] [stdout]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_removed_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `removed`
[INFO] [stdout]    --> src/crypto/keys.rs:154:13
[INFO] [stdout]     |
[INFO] [stdout] 154 |         let removed = key_manager.remove_session_key(&peer_id);
[INFO] [stdout]     |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_removed`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/file_transfer/manager.rs:93:23
[INFO] [stdout]    |
[INFO] [stdout] 93 |             .map_err(|e| FileTransferError::TransferInterrupted)?;
[INFO] [stdout]    |                       ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/file_transfer/manager.rs:93:23
[INFO] [stdout]    |
[INFO] [stdout] 93 |             .map_err(|e| FileTransferError::TransferInterrupted)?;
[INFO] [stdout]    |                       ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `result`
[INFO] [stdout]    --> src/utils/logging.rs:268:13
[INFO] [stdout]     |
[INFO] [stdout] 268 |         let result = init_logging(config);
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `crypto_engine`, `connection_manager`, `discovery`, and `authenticator` are never read
[INFO] [stdout]   --> src/main.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub struct SecureChatApp {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 33 |     crypto_engine: CryptoEngine,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 34 |     connection_manager: TcpConnectionManager,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 35 |     discovery: MdnsDiscovery,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     authenticator: MutualAuthenticator,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `start_discovery` and `advertise_service` are never used
[INFO] [stdout]   --> src/networking/discovery.rs:10:14
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub trait PeerDiscovery {
[INFO] [stdout]    |           ------------- methods in this trait
[INFO] [stdout] 10 |     async fn start_discovery(&self) -> Result<(), AppError>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^
[INFO] [stdout] 11 |     async fn advertise_service(&self, service_info: ServiceInfo) -> Result<(), AppError>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `parse_service_event` is never used
[INFO] [stdout]   --> src/networking/discovery.rs:73:8
[INFO] [stdout]    |
[INFO] [stdout] 22 | impl MdnsDiscovery {
[INFO] [stdout]    | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 73 |     fn parse_service_event(&self, event: ServiceEvent) -> Option<PeerInfo> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `send_message` and `receive_message` are never used
[INFO] [stdout]   --> src/networking/connection.rs:13:14
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub trait ConnectionManager {
[INFO] [stdout]    |           ----------------- methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 13 |     async fn send_message(&self, conn: &mut Connection, message: EncryptedData) -> Result<(), AppError>;
[INFO] [stdout]    |              ^^^^^^^^^^^^
[INFO] [stdout] 14 |     async fn receive_message(&self, conn: &mut Connection) -> Result<EncryptedData, AppError>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `peer_id` and `stream` are never read
[INFO] [stdout]   --> src/networking/connection.rs:19:9
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct Connection {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 19 |     pub peer_id: PeerId,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 20 |     pub stream: TcpStream,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Connection` 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 `update_activity` is never used
[INFO] [stdout]   --> src/networking/connection.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | impl Connection {
[INFO] [stdout]    | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub fn update_activity(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `add_connection`, `remove_connection`, and `get_connection` are never used
[INFO] [stdout]   --> src/networking/connection.rs:68:12
[INFO] [stdout]    |
[INFO] [stdout] 48 | impl TcpConnectionManager {
[INFO] [stdout]    | ------------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn add_connection(&self, connection: Connection) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub fn remove_connection(&self, peer_id: &PeerId) -> Option<Connection> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 79 |     pub fn get_connection(&self, peer_id: &PeerId) -> Option<Connection> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Connection` is never constructed
[INFO] [stdout]   --> src/messaging/types.rs:34:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub struct Connection {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `global_message_queue` is never read
[INFO] [stdout]    --> src/messaging/handler.rs:127:5
[INFO] [stdout]     |
[INFO] [stdout] 125 | pub struct MessageRouter {
[INFO] [stdout]     |            ------------- field in this struct
[INFO] [stdout] 126 |     handlers: HashMap<PeerId, SecureMessageHandler>,
[INFO] [stdout] 127 |     global_message_queue: Arc<Mutex<Vec<Message>>>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `transfer_receiver` and `progress_callbacks` are never read
[INFO] [stdout]   --> src/file_transfer/manager.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct FileTransferManager {
[INFO] [stdout]    |            ------------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 22 |     transfer_receiver: mpsc::Receiver<(PeerId, FileTransferMessage)>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 23 |     progress_callbacks: Vec<Box<dyn Fn(Uuid, f64) + Send + Sync>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/file_transfer/manager.rs:43:12
[INFO] [stdout]     |
[INFO] [stdout]  26 | impl FileTransferManager {
[INFO] [stdout]     | ------------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  43 |     pub fn add_progress_callback(&mut self, callback: Box<dyn Fn(Uuid, f64) + Send + Sync>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub async fn receive_file<P: AsRef<Path>>(&mut self, transfer_id: Uuid, save_path: P) -> Result<(), AppError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub async fn process_transfer_message(&mut self, peer_id: PeerId, message: FileTransferMessage) -> Result<(), AppError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 152 |     async fn handle_transfer_request(&mut self, peer_id: PeerId, transfer_id: Uuid, metadata: FileMetadata) -> Result<(), AppError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 183 |     async fn handle_transfer_response(&mut self, transfer_id: Uuid, accepted: bool, reason: Option<String>) -> Result<(), AppError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 196 |     async fn handle_chunk_request(&mut self, peer_id: PeerId, transfer_id: Uuid, chunk_index: u32) -> Result<(), AppError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 218 |     async fn handle_chunk_data(&mut self, chunk: FileChunk) -> Result<(), AppError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 245 |     async fn handle_transfer_complete(&mut self, transfer_id: Uuid, file_hash: [u8; 32]) -> Result<(), AppError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 259 |     async fn handle_transfer_cancel(&mut self, transfer_id: Uuid, reason: String) -> Result<(), AppError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 283 |     fn write_file_chunk(&self, file_path: &Path, chunk: &FileChunk) -> Result<(), AppError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 329 |     pub fn get_transfer_progress(&self, transfer_id: &Uuid) -> Option<f64> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 354 |     pub fn get_all_transfers(&self) -> Vec<(Uuid, TransferStatus, f64)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `resume_transfer`, `save_transfer_state`, `load_transfer_state`, `retry_failed_chunks`, `estimate_remaining_time`, and `get_transfer_bandwidth` are never used
[INFO] [stdout]    --> src/file_transfer/manager.rs:363:18
[INFO] [stdout]     |
[INFO] [stdout] 362 | impl FileTransferManager {
[INFO] [stdout]     | ------------------------ methods in this implementation
[INFO] [stdout] 363 |     pub async fn resume_transfer(&mut self, transfer_id: Uuid) -> Result<(), AppError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 392 |     pub fn save_transfer_state(&self, transfer_id: &Uuid, state_file: &Path) -> Result<(), AppError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 406 |     pub fn load_transfer_state(&mut self, state_file: &Path) -> Result<Uuid, AppError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 421 |     pub async fn retry_failed_chunks(&mut self, transfer_id: Uuid, max_retries: u32) -> Result<(), AppError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 463 |     pub fn estimate_remaining_time(&self, transfer_id: &Uuid) -> Option<std::time::Duration> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 482 |     pub fn get_transfer_bandwidth(&self, transfer_id: &Uuid) -> Option<f64> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `heartbeat_interval`, `heartbeat_sender`, and `heartbeat_receiver` are never read
[INFO] [stdout]   --> src/presence/manager.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct PresenceManager {
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 14 |     heartbeat_interval: Duration,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 15 |     presence_timeout: Duration,
[INFO] [stdout] 16 |     heartbeat_sender: mpsc::Sender<HeartbeatMessage>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 17 |     heartbeat_receiver: mpsc::Receiver<HeartbeatMessage>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `start_heartbeat_loop` and `send_heartbeat` are never used
[INFO] [stdout]   --> src/presence/manager.rs:52:18
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl PresenceManager {
[INFO] [stdout]    | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 52 |     pub async fn start_heartbeat_loop(&mut self) -> Result<(), AppError> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 70 |     async fn send_heartbeat(&self) -> Result<(), AppError> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `peer_id` is never read
[INFO] [stdout]   --> src/presence/types.rs:26:9
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct PeerPresence {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] 26 |     pub peer_id: PeerId,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PeerPresence` 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: methods `display_message`, `display_file_transfer_notification`, and `display_status_change` are never used
[INFO] [stdout]    --> src/ui/cli.rs:147:12
[INFO] [stdout]     |
[INFO] [stdout]  21 | impl CliInterface {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub fn display_message(&self, sender: &PeerId, content: &str, timestamp: SystemTime) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 166 |     pub fn display_file_transfer_notification(&self, sender: &PeerId, filename: &str, size: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 171 |     pub fn display_status_change(&self, peer_id: &PeerId, old_status: &PresenceStatus, new_status: &PresenceStatus) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `sender`, `timestamp`, and `message_type` are never read
[INFO] [stdout]   --> src/ui/tui.rs:34:9
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct ChatMessage {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 34 |     pub sender: PeerId,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 35 |     pub content: String,
[INFO] [stdout] 36 |     pub timestamp: SystemTime,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 37 |     pub message_type: MessageType,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ChatMessage` 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 `display_name`, `status`, and `last_seen` are never read
[INFO] [stdout]   --> src/ui/tui.rs:44:9
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct TuiPeer {
[INFO] [stdout]    |            ------- fields in this struct
[INFO] [stdout] 43 |     pub id: PeerId,
[INFO] [stdout] 44 |     pub display_name: String,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 45 |     pub status: PresenceStatus,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 46 |     pub last_seen: SystemTime,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TuiPeer` 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 `filename`, `progress`, `total_size`, `peer_id`, and `is_upload` are never read
[INFO] [stdout]   --> src/ui/tui.rs:53:9
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub struct FileTransferInfo {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] 52 |     pub id: Uuid,
[INFO] [stdout] 53 |     pub filename: String,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 54 |     pub progress: f64,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 55 |     pub total_size: u64,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 56 |     pub peer_id: PeerId,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 57 |     pub is_upload: bool,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FileTransferInfo` 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: field `status_message` is never read
[INFO] [stdout]   --> src/ui/tui.rs:70:9
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub struct TuiState {
[INFO] [stdout]    |            -------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 70 |     pub status_message: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TuiState` 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 `remove_peer` is never used
[INFO] [stdout]    --> src/ui/tui.rs:105:12
[INFO] [stdout]     |
[INFO] [stdout]  88 | impl TuiState {
[INFO] [stdout]     | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub fn remove_peer(&mut self, peer_id: &PeerId) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TuiInterface` is never constructed
[INFO] [stdout]    --> src/ui/tui.rs:154:12
[INFO] [stdout]     |
[INFO] [stdout] 154 | pub struct TuiInterface {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/ui/tui.rs:161:12
[INFO] [stdout]     |
[INFO] [stdout] 160 | impl TuiInterface {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout] 161 |     pub fn new() -> Result<Self, AppError> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     pub fn cleanup(&mut self) -> Result<(), AppError> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 188 |     pub fn draw(&mut self) -> Result<(), AppError> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 195 |     pub fn handle_events(&mut self) -> Result<bool, AppError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 210 |     fn handle_key_event(&mut self, key: KeyCode) -> Result<bool, AppError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 232 |     fn send_message(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 251 |     fn render_ui(&mut self, f: &mut Frame) {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_ui` is never used
[INFO] [stdout]    --> src/ui/tui.rs:257:4
[INFO] [stdout]     |
[INFO] [stdout] 257 | fn render_ui(f: &mut Frame, state: &mut TuiState) {
[INFO] [stdout]     |    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_messages` is never used
[INFO] [stdout]    --> src/ui/tui.rs:295:4
[INFO] [stdout]     |
[INFO] [stdout] 295 | fn render_messages(f: &mut Frame, area: Rect, state: &TuiState) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_input` is never used
[INFO] [stdout]    --> src/ui/tui.rs:329:4
[INFO] [stdout]     |
[INFO] [stdout] 329 | fn render_input(f: &mut Frame, area: Rect, state: &TuiState) {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_status` is never used
[INFO] [stdout]    --> src/ui/tui.rs:337:4
[INFO] [stdout]     |
[INFO] [stdout] 337 | fn render_status(f: &mut Frame, area: Rect, state: &TuiState) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_peers` is never used
[INFO] [stdout]    --> src/ui/tui.rs:353:4
[INFO] [stdout]     |
[INFO] [stdout] 353 | fn render_peers(f: &mut Frame, area: Rect, state: &mut TuiState) {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_file_transfers` is never used
[INFO] [stdout]    --> src/ui/tui.rs:382:4
[INFO] [stdout]     |
[INFO] [stdout] 382 | fn render_file_transfers(f: &mut Frame, area: Rect, state: &TuiState) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_help` is never used
[INFO] [stdout]    --> src/ui/tui.rs:408:4
[INFO] [stdout]     |
[INFO] [stdout] 408 | fn render_help(f: &mut Frame) {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `add_message`, `update_peer`, `remove_peer`, `update_file_transfer`, and `set_status_message` are never used
[INFO] [stdout]    --> src/ui/tui.rs:443:12
[INFO] [stdout]     |
[INFO] [stdout] 442 | impl TuiInterface {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] 443 |     pub fn add_message(&mut self, sender: PeerId, content: String, message_type: MessageType) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 453 |     pub fn update_peer(&mut self, peer_id: PeerId, display_name: String, status: PresenceStatus) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 463 |     pub fn remove_peer(&mut self, peer_id: &PeerId) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 467 |     pub fn update_file_transfer(&mut self, id: Uuid, filename: String, progress: f64, total_size: u64, peer_id: PeerId, is_upload: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 479 |     pub fn set_status_message(&mut self, message: String) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `centered_rect` is never used
[INFO] [stdout]    --> src/ui/tui.rs:485:4
[INFO] [stdout]     |
[INFO] [stdout] 485 | fn centered_rect(percent_x: u16, percent_y: u16, r: Rect) -> Rect {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `verify_authentication` is never used
[INFO] [stdout]    --> src/auth/session.rs:154:14
[INFO] [stdout]     |
[INFO] [stdout] 151 | pub trait AuthenticationProtocol {
[INFO] [stdout]     |           ---------------------- method in this trait
[INFO] [stdout] ...
[INFO] [stdout] 154 |     async fn verify_authentication(&mut self, peer_id: &PeerId, response: &[u8], shared_key: &[u8]) -> Result<bool, AppError>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `crypto_engine`, `connection_manager`, `discovery`, and `authenticator` are never read
[INFO] [stdout]   --> src/main.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub struct SecureChatApp {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 33 |     crypto_engine: CryptoEngine,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 34 |     connection_manager: TcpConnectionManager,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 35 |     discovery: MdnsDiscovery,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     authenticator: MutualAuthenticator,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `PeerDiscovery` is never used
[INFO] [stdout]  --> src/networking/discovery.rs:9:11
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub trait PeerDiscovery {
[INFO] [stdout]   |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `service_daemon`, `discovered_peers`, `discovery_callbacks`, and `service_type` are never read
[INFO] [stdout]   --> src/networking/discovery.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct MdnsDiscovery {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] 16 |     service_daemon: Arc<ServiceDaemon>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 17 |     discovered_peers: Arc<Mutex<HashMap<PeerId, PeerInfo>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 18 |     discovery_callbacks: Arc<Mutex<Vec<Box<dyn Fn(PeerInfo) + Send + Sync>>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 19 |     service_type: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `create_service_info`, `browse_services`, `parse_service_event`, and `get_discovered_peers` are never used
[INFO] [stdout]    --> src/networking/discovery.rs:35:12
[INFO] [stdout]     |
[INFO] [stdout]  22 | impl MdnsDiscovery {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  35 |     pub fn create_service_info(&self, peer_id: &PeerId, port: u16, public_key: &[u8]) -> Result<ServiceInfo, AppError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  56 |     pub async fn browse_services(&self) -> Result<mpsc::Receiver<ServiceEvent>, AppError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  73 |     fn parse_service_event(&self, event: ServiceEvent) -> Option<PeerInfo> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub fn get_discovered_peers(&self) -> HashMap<PeerId, PeerInfo> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `ConnectionManager` is never used
[INFO] [stdout]   --> src/networking/connection.rs:10:11
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub trait ConnectionManager {
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `peer_id`, `stream`, and `last_activity` are never read
[INFO] [stdout]   --> src/networking/connection.rs:19:9
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct Connection {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 19 |     pub peer_id: PeerId,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 20 |     pub stream: TcpStream,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 21 |     pub last_activity: SystemTime,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Connection` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `update_activity`, and `is_stale` are never used
[INFO] [stdout]   --> src/networking/connection.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | impl Connection {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 25 |     pub fn new(peer_id: PeerId, stream: TcpStream) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub fn update_activity(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     pub fn is_stale(&self, timeout: Duration) -> bool {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `listener`, `connections`, and `connection_timeout` are never read
[INFO] [stdout]   --> src/networking/connection.rs:43:5
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct TcpConnectionManager {
[INFO] [stdout]    |            -------------------- fields in this struct
[INFO] [stdout] 43 |     listener: Option<TcpListener>,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 44 |     connections: Arc<Mutex<HashMap<PeerId, Connection>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 45 |     connection_timeout: Duration,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/networking/connection.rs:60:12
[INFO] [stdout]    |
[INFO] [stdout] 48 | impl TcpConnectionManager {
[INFO] [stdout]    | ------------------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 60 |     pub fn new_client() -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn add_connection(&self, connection: Connection) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub fn remove_connection(&self, peer_id: &PeerId) -> Option<Connection> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 79 |     pub fn get_connection(&self, peer_id: &PeerId) -> Option<Connection> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     pub fn cleanup_stale_connections(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 89 |     pub fn get_active_connections(&self) -> Vec<PeerId> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 94 |     pub async fn serialize_message(&self, message: &EncryptedData) -> Result<Vec<u8>, AppError> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 99 |     pub async fn deserialize_message(&self, data: &[u8]) -> Result<EncryptedData, AppError> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `decrypt_message` is never used
[INFO] [stdout]  --> src/crypto/engine.rs:9:8
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub trait Encryption {
[INFO] [stdout]   |           ---------- method in this trait
[INFO] [stdout] 8 |     fn encrypt_message(&self, plaintext: &[u8], peer_id: &PeerId) -> Result<EncryptedData, AppError>;
[INFO] [stdout] 9 |     fn decrypt_message(&self, ciphertext: &EncryptedData, peer_id: &PeerId) -> Result<Vec<u8>, AppError>;
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_public_key`, `derive_session_key`, and `remove_session_key` are never used
[INFO] [stdout]   --> src/crypto/engine.rs:22:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | impl CryptoEngine {
[INFO] [stdout]    | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub fn get_public_key(&self) -> &[u8] {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 26 |     pub fn derive_session_key(&mut self, peer_id: PeerId, peer_public_key: &[u8]) -> Result<(), AppError> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     pub fn remove_session_key(&mut self, peer_id: &PeerId) -> Option<SessionKey> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/crypto/keys.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | impl SessionKey {
[INFO] [stdout]    | --------------- associated function in this implementation
[INFO] [stdout] 13 |     pub fn new(key: [u8; 32]) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `private_key_bytes` and `public_key` are never read
[INFO] [stdout]   --> src/crypto/keys.rs:23:9
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub struct KeyPair {
[INFO] [stdout]    |            ------- fields in this struct
[INFO] [stdout] 23 |     pub private_key_bytes: [u8; 32],
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 24 |     pub public_key: Vec<u8>,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `key_pair` is never read
[INFO] [stdout]   --> src/crypto/keys.rs:53:5
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct KeyManager {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] 53 |     key_pair: KeyPair,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_public_key`, `derive_session_key`, and `remove_session_key` are never used
[INFO] [stdout]    --> src/crypto/keys.rs:67:12
[INFO] [stdout]     |
[INFO] [stdout]  57 | impl KeyManager {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  67 |     pub fn get_public_key(&self) -> &[u8] {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  71 |     pub fn derive_session_key(&mut self, peer_id: PeerId, peer_public_key: &[u8]) -> Result<(), AppError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn remove_session_key(&mut self, peer_id: &PeerId) -> Option<SessionKey> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `as_str` is never used
[INFO] [stdout]   --> src/messaging/types.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout]  9 | impl PeerId {
[INFO] [stdout]    | ----------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 14 |     pub fn as_str(&self) -> &str {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Connection` is never constructed
[INFO] [stdout]   --> src/messaging/types.rs:34:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub struct Connection {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `receive_message` and `add_message_callback` are never used
[INFO] [stdout]   --> src/messaging/handler.rs:10:14
[INFO] [stdout]    |
[INFO] [stdout]  8 | pub trait MessageHandler {
[INFO] [stdout]    |           -------------- methods in this trait
[INFO] [stdout]  9 |     async fn send_message(&mut self, recipient: PeerId, message_type: MessageType) -> Result<(), AppError>;
[INFO] [stdout] 10 |     async fn receive_message(&mut self) -> Result<Option<Message>, AppError>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^
[INFO] [stdout] 11 |     fn add_message_callback(&mut self, callback: Box<dyn Fn(Message) + Send + Sync>);
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `message_queue`, `inbound_receiver`, and `message_callbacks` are never read
[INFO] [stdout]   --> src/messaging/handler.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct SecureMessageHandler {
[INFO] [stdout]    |            -------------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 17 |     message_queue: Arc<Mutex<Vec<Message>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 18 |     outbound_sender: mpsc::Sender<(PeerId, EncryptedData)>,
[INFO] [stdout] 19 |     inbound_receiver: mpsc::Receiver<(PeerId, EncryptedData)>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 20 |     message_callbacks: Vec<Box<dyn Fn(Message) + Send + Sync>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `process_inbound_encrypted_message` are never used
[INFO] [stdout]   --> src/messaging/handler.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | impl SecureMessageHandler {
[INFO] [stdout]    | ------------------------- associated items in this implementation
[INFO] [stdout] 25 |     pub fn new(crypto_engine: CryptoEngine, own_peer_id: PeerId) -> (Self, mpsc::Receiver<(PeerId, EncryptedData)>, mpsc::Sender<(PeerId,...
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     pub async fn process_inbound_encrypted_message(&mut self, sender: PeerId, encrypted_data: EncryptedData) -> Result<(), AppError> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `global_message_queue` is never read
[INFO] [stdout]    --> src/messaging/handler.rs:127:5
[INFO] [stdout]     |
[INFO] [stdout] 125 | pub struct MessageRouter {
[INFO] [stdout]     |            ------------- field in this struct
[INFO] [stdout] 126 |     handlers: HashMap<PeerId, SecureMessageHandler>,
[INFO] [stdout] 127 |     global_message_queue: Arc<Mutex<Vec<Message>>>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `add_handler`, `remove_handler`, `collect_messages`, `get_handler_count`, and `get_active_peers` are never used
[INFO] [stdout]    --> src/messaging/handler.rs:138:12
[INFO] [stdout]     |
[INFO] [stdout] 130 | impl MessageRouter {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub fn add_handler(&mut self, peer_id: PeerId, handler: SecureMessageHandler) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 142 |     pub fn remove_handler(&mut self, peer_id: &PeerId) -> Option<SecureMessageHandler> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 155 |     pub async fn collect_messages(&mut self) -> Vec<Message> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 167 |     pub fn get_handler_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 171 |     pub fn get_active_peers(&self) -> Vec<PeerId> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MessageDeduplicator` is never constructed
[INFO] [stdout]    --> src/messaging/handler.rs:176:12
[INFO] [stdout]     |
[INFO] [stdout] 176 | pub struct MessageDeduplicator {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `is_duplicate`, `clear_peer_history`, and `get_peer_count` are never used
[INFO] [stdout]    --> src/messaging/handler.rs:182:12
[INFO] [stdout]     |
[INFO] [stdout] 181 | impl MessageDeduplicator {
[INFO] [stdout]     | ------------------------ associated items in this implementation
[INFO] [stdout] 182 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 189 |     pub fn is_duplicate(&mut self, sender: &PeerId, sequence_number: u64) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 207 |     pub fn clear_peer_history(&mut self, peer_id: &PeerId) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 211 |     pub fn get_peer_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `transfer_receiver` and `progress_callbacks` are never read
[INFO] [stdout]   --> src/file_transfer/manager.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct FileTransferManager {
[INFO] [stdout]    |            ------------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 22 |     transfer_receiver: mpsc::Receiver<(PeerId, FileTransferMessage)>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 23 |     progress_callbacks: Vec<Box<dyn Fn(Uuid, f64) + Send + Sync>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/file_transfer/manager.rs:43:12
[INFO] [stdout]     |
[INFO] [stdout]  26 | impl FileTransferManager {
[INFO] [stdout]     | ------------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  43 |     pub fn add_progress_callback(&mut self, callback: Box<dyn Fn(Uuid, f64) + Send + Sync>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub async fn receive_file<P: AsRef<Path>>(&mut self, transfer_id: Uuid, save_path: P) -> Result<(), AppError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub async fn process_transfer_message(&mut self, peer_id: PeerId, message: FileTransferMessage) -> Result<(), AppError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 152 |     async fn handle_transfer_request(&mut self, peer_id: PeerId, transfer_id: Uuid, metadata: FileMetadata) -> Result<(), AppError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 183 |     async fn handle_transfer_response(&mut self, transfer_id: Uuid, accepted: bool, reason: Option<String>) -> Result<(), AppError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 196 |     async fn handle_chunk_request(&mut self, peer_id: PeerId, transfer_id: Uuid, chunk_index: u32) -> Result<(), AppError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 218 |     async fn handle_chunk_data(&mut self, chunk: FileChunk) -> Result<(), AppError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 245 |     async fn handle_transfer_complete(&mut self, transfer_id: Uuid, file_hash: [u8; 32]) -> Result<(), AppError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 259 |     async fn handle_transfer_cancel(&mut self, transfer_id: Uuid, reason: String) -> Result<(), AppError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 267 |     fn read_file_chunk(&self, file_path: &Path, chunk_index: u32, chunk_size: u32) -> Result<Vec<u8>, AppError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 283 |     fn write_file_chunk(&self, file_path: &Path, chunk: &FileChunk) -> Result<(), AppError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 324 |     pub fn get_transfer_status(&self, transfer_id: &Uuid) -> Option<TransferStatus> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 329 |     pub fn get_transfer_progress(&self, transfer_id: &Uuid) -> Option<f64> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 344 |     pub fn cleanup_completed_transfers(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 349 |     pub fn get_active_transfer_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 354 |     pub fn get_all_transfers(&self) -> Vec<(Uuid, TransferStatus, f64)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/file_transfer/manager.rs:363:18
[INFO] [stdout]     |
[INFO] [stdout] 362 | impl FileTransferManager {
[INFO] [stdout]     | ------------------------ methods in this implementation
[INFO] [stdout] 363 |     pub async fn resume_transfer(&mut self, transfer_id: Uuid) -> Result<(), AppError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 392 |     pub fn save_transfer_state(&self, transfer_id: &Uuid, state_file: &Path) -> Result<(), AppError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 406 |     pub fn load_transfer_state(&mut self, state_file: &Path) -> Result<Uuid, AppError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 421 |     pub async fn retry_failed_chunks(&mut self, transfer_id: Uuid, max_retries: u32) -> Result<(), AppError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 452 |     pub fn get_resumable_transfers(&self) -> Vec<Uuid> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 463 |     pub fn estimate_remaining_time(&self, transfer_id: &Uuid) -> Option<std::time::Duration> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 482 |     pub fn get_transfer_bandwidth(&self, transfer_id: &Uuid) -> Option<f64> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `verify_integrity` are never used
[INFO] [stdout]   --> src/file_transfer/types.rs:38:12
[INFO] [stdout]    |
[INFO] [stdout] 37 | impl FileChunk {
[INFO] [stdout]    | -------------- associated items in this implementation
[INFO] [stdout] 38 |     pub fn new(transfer_id: Uuid, chunk_index: u32, data: Vec<u8>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 55 |     pub fn verify_integrity(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/file_transfer/types.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout]  92 | impl TransferState {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub fn new_download(
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     pub fn update_progress(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 142 |     pub fn mark_chunk_received(&mut self, chunk_index: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 151 |     pub fn is_chunk_received(&self, chunk_index: u32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 155 |     pub fn get_missing_chunks(&self) -> Vec<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 161 |     pub fn set_error(&mut self, error: String) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 172 |     pub fn is_active(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     pub fn is_complete(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 180 |     pub fn is_failed(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/presence/manager.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct PresenceManager {
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] 11 |     own_peer_id: PeerId,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 12 |     own_status: PresenceStatus,
[INFO] [stdout] 13 |     peer_presence: Arc<Mutex<HashMap<PeerId, PeerPresence>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 14 |     heartbeat_interval: Duration,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 15 |     presence_timeout: Duration,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 16 |     heartbeat_sender: mpsc::Sender<HeartbeatMessage>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 17 |     heartbeat_receiver: mpsc::Receiver<HeartbeatMessage>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 18 |     status_change_callbacks: Vec<Box<dyn Fn(PeerId, PresenceStatus) + Send + Sync>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/presence/manager.rs:44:12
[INFO] [stdout]     |
[INFO] [stdout]  21 | impl PresenceManager {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  44 |     pub fn get_own_status(&self) -> &PresenceStatus {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  48 |     pub fn add_status_change_callback(&mut self, callback: Box<dyn Fn(PeerId, PresenceStatus) + Send + Sync>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  52 |     pub async fn start_heartbeat_loop(&mut self) -> Result<(), AppError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  70 |     async fn send_heartbeat(&self) -> Result<(), AppError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  79 |     async fn process_heartbeat(&mut self, heartbeat: HeartbeatMessage) -> Result<(), AppError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub fn get_peer_status(&self, peer_id: &PeerId) -> Option<PresenceStatus> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 121 |     pub fn get_all_peer_statuses(&self) -> HashMap<PeerId, PresenceStatus> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 137 |     pub fn get_online_peers(&self) -> Vec<PeerId> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub fn cleanup_offline_peers(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 154 |     pub fn force_peer_offline(&self, peer_id: &PeerId) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 161 |     pub fn get_peer_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 166 |     pub fn get_online_peer_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `peer_id`, `status`, `last_seen`, and `last_heartbeat` are never read
[INFO] [stdout]   --> src/presence/types.rs:26:9
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct PeerPresence {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 26 |     pub peer_id: PeerId,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 27 |     pub status: PresenceStatus,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 28 |     pub last_seen: SystemTime,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 29 |     pub last_heartbeat: SystemTime,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PeerPresence` 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: associated items `new`, `update_heartbeat`, `update_status`, and `is_online` are never used
[INFO] [stdout]   --> src/presence/types.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 32 | impl PeerPresence {
[INFO] [stdout]    | ----------------- associated items in this implementation
[INFO] [stdout] 33 |     pub fn new(peer_id: PeerId, status: PresenceStatus) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub fn update_heartbeat(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub fn update_status(&mut self, status: PresenceStatus) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn is_online(&self, timeout_secs: u64) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/presence/types.rs:67:12
[INFO] [stdout]    |
[INFO] [stdout] 66 | impl HeartbeatMessage {
[INFO] [stdout]    | --------------------- associated function in this implementation
[INFO] [stdout] 67 |     pub fn new(peer_id: PeerId, status: PresenceStatus) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `show_timestamps` is never read
[INFO] [stdout]   --> src/ui/cli.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct CliInterface {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 18 |     show_timestamps: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/ui/cli.rs:36:12
[INFO] [stdout]     |
[INFO] [stdout]  21 | impl CliInterface {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  36 |     pub fn update_peer_status(&mut self, peer_id: PeerId, status: PresenceStatus) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  40 |     pub fn remove_peer(&mut self, peer_id: &PeerId) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub fn display_message(&self, sender: &PeerId, content: &str, timestamp: SystemTime) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 166 |     pub fn display_file_transfer_notification(&self, sender: &PeerId, filename: &str, size: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 171 |     pub fn display_status_change(&self, peer_id: &PeerId, old_status: &PresenceStatus, new_status: &PresenceStatus) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 288 |     pub fn toggle_timestamps(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 294 |     pub fn get_command_history(&self) -> &[String] {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ChatMessage` is never constructed
[INFO] [stdout]   --> src/ui/tui.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct ChatMessage {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TuiPeer` is never constructed
[INFO] [stdout]   --> src/ui/tui.rs:42:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct TuiPeer {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FileTransferInfo` is never constructed
[INFO] [stdout]   --> src/ui/tui.rs:51:12
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub struct FileTransferInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TuiState` is never constructed
[INFO] [stdout]   --> src/ui/tui.rs:62:12
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub struct TuiState {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/ui/tui.rs:89:12
[INFO] [stdout]     |
[INFO] [stdout]  88 | impl TuiState {
[INFO] [stdout]     | ------------- associated items in this implementation
[INFO] [stdout]  89 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  93 |     pub fn add_message(&mut self, message: ChatMessage) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn update_peer(&mut self, peer: TuiPeer) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub fn remove_peer(&mut self, peer_id: &PeerId) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 109 |     pub fn update_file_transfer(&mut self, transfer: FileTransferInfo) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     pub fn remove_file_transfer(&mut self, transfer_id: &Uuid) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 117 |     pub fn select_next_peer(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 134 |     pub fn select_previous_peer(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TuiInterface` is never constructed
[INFO] [stdout]    --> src/ui/tui.rs:154:12
[INFO] [stdout]     |
[INFO] [stdout] 154 | pub struct TuiInterface {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/ui/tui.rs:161:12
[INFO] [stdout]     |
[INFO] [stdout] 160 | impl TuiInterface {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout] 161 |     pub fn new() -> Result<Self, AppError> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     pub fn cleanup(&mut self) -> Result<(), AppError> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 188 |     pub fn draw(&mut self) -> Result<(), AppError> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 195 |     pub fn handle_events(&mut self) -> Result<bool, AppError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 210 |     fn handle_key_event(&mut self, key: KeyCode) -> Result<bool, AppError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 232 |     fn send_message(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 251 |     fn render_ui(&mut self, f: &mut Frame) {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_ui` is never used
[INFO] [stdout]    --> src/ui/tui.rs:257:4
[INFO] [stdout]     |
[INFO] [stdout] 257 | fn render_ui(f: &mut Frame, state: &mut TuiState) {
[INFO] [stdout]     |    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_messages` is never used
[INFO] [stdout]    --> src/ui/tui.rs:295:4
[INFO] [stdout]     |
[INFO] [stdout] 295 | fn render_messages(f: &mut Frame, area: Rect, state: &TuiState) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_input` is never used
[INFO] [stdout]    --> src/ui/tui.rs:329:4
[INFO] [stdout]     |
[INFO] [stdout] 329 | fn render_input(f: &mut Frame, area: Rect, state: &TuiState) {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_status` is never used
[INFO] [stdout]    --> src/ui/tui.rs:337:4
[INFO] [stdout]     |
[INFO] [stdout] 337 | fn render_status(f: &mut Frame, area: Rect, state: &TuiState) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_peers` is never used
[INFO] [stdout]    --> src/ui/tui.rs:353:4
[INFO] [stdout]     |
[INFO] [stdout] 353 | fn render_peers(f: &mut Frame, area: Rect, state: &mut TuiState) {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_file_transfers` is never used
[INFO] [stdout]    --> src/ui/tui.rs:382:4
[INFO] [stdout]     |
[INFO] [stdout] 382 | fn render_file_transfers(f: &mut Frame, area: Rect, state: &TuiState) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_help` is never used
[INFO] [stdout]    --> src/ui/tui.rs:408:4
[INFO] [stdout]     |
[INFO] [stdout] 408 | fn render_help(f: &mut Frame) {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `add_message`, `update_peer`, `remove_peer`, `update_file_transfer`, and `set_status_message` are never used
[INFO] [stdout]    --> src/ui/tui.rs:443:12
[INFO] [stdout]     |
[INFO] [stdout] 442 | impl TuiInterface {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] 443 |     pub fn add_message(&mut self, sender: PeerId, content: String, message_type: MessageType) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 453 |     pub fn update_peer(&mut self, peer_id: PeerId, display_name: String, status: PresenceStatus) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 463 |     pub fn remove_peer(&mut self, peer_id: &PeerId) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 467 |     pub fn update_file_transfer(&mut self, id: Uuid, filename: String, progress: f64, total_size: u64, peer_id: PeerId, is_upload: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 479 |     pub fn set_status_message(&mut self, message: String) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `centered_rect` is never used
[INFO] [stdout]    --> src/ui/tui.rs:485:4
[INFO] [stdout]     |
[INFO] [stdout] 485 | fn centered_rect(percent_x: u16, percent_y: u16, r: Rect) -> Rect {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `include_timestamps` is never read
[INFO] [stdout]   --> src/utils/logging.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct LoggingConfig {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 17 |     pub include_timestamps: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `log_security_event` is never used
[INFO] [stdout]   --> src/utils/logging.rs:96:8
[INFO] [stdout]    |
[INFO] [stdout] 96 | pub fn log_security_event(event: &str, peer_id: Option<&str>, details: Option<&str>) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `log_network_event` is never used
[INFO] [stdout]    --> src/utils/logging.rs:106:8
[INFO] [stdout]     |
[INFO] [stdout] 106 | pub fn log_network_event(event: &str, peer_id: Option<&str>, details: Option<&str>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `log_crypto_event` is never used
[INFO] [stdout]    --> src/utils/logging.rs:116:8
[INFO] [stdout]     |
[INFO] [stdout] 116 | pub fn log_crypto_event(event: &str, peer_id: Option<&str>, details: Option<&str>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `log_file_transfer_event` is never used
[INFO] [stdout]    --> src/utils/logging.rs:126:8
[INFO] [stdout]     |
[INFO] [stdout] 126 | pub fn log_file_transfer_event(event: &str, transfer_id: Option<&str>, details: Option<&str>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `log_performance_metric` is never used
[INFO] [stdout]    --> src/utils/logging.rs:136:8
[INFO] [stdout]     |
[INFO] [stdout] 136 | pub fn log_performance_metric(metric: &str, value: f64, unit: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RetryConfig` is never constructed
[INFO] [stdout]    --> src/utils/logging.rs:152:16
[INFO] [stdout]     |
[INFO] [stdout] 152 |     pub struct RetryConfig {
[INFO] [stdout]     |                ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `retry_with_backoff` is never used
[INFO] [stdout]    --> src/utils/logging.rs:170:18
[INFO] [stdout]     |
[INFO] [stdout] 170 |     pub async fn retry_with_backoff<F, Fut, T, E>(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_critical_error` is never used
[INFO] [stdout]    --> src/utils/logging.rs:211:12
[INFO] [stdout]     |
[INFO] [stdout] 211 |     pub fn handle_critical_error(error: &dyn std::error::Error, context: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `graceful_shutdown` is never used
[INFO] [stdout]    --> src/utils/logging.rs:234:18
[INFO] [stdout]     |
[INFO] [stdout] 234 |     pub async fn graceful_shutdown(reason: &str) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `session_id`, `peer_id`, `session_key`, `created_at`, `last_activity`, and `is_authenticated` are never read
[INFO] [stdout]   --> src/auth/session.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct SessionInfo {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 10 |     pub session_id: Uuid,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 11 |     pub peer_id: PeerId,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 12 |     pub session_key: SessionKey,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 13 |     pub created_at: SystemTime,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 14 |     pub last_activity: SystemTime,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 15 |     pub is_authenticated: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SessionInfo` 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: associated items `new`, `authenticate`, `update_activity`, `is_expired`, and `session_age` are never used
[INFO] [stdout]   --> src/auth/session.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | impl SessionInfo {
[INFO] [stdout]    | ---------------- associated items in this implementation
[INFO] [stdout] 19 |     pub fn new(peer_id: PeerId, session_key: SessionKey) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn authenticate(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn update_activity(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub fn is_expired(&self, timeout: Duration) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub fn session_age(&self) -> Duration {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `sessions`, `session_timeout`, and `max_session_age` are never read
[INFO] [stdout]   --> src/auth/session.rs:50:9
[INFO] [stdout]    |
[INFO] [stdout] 49 | pub struct SessionManager {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] 50 |     pub sessions: HashMap<PeerId, SessionInfo>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 51 |     session_timeout: Duration,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 52 |     max_session_age: Duration,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/auth/session.rs:64:12
[INFO] [stdout]     |
[INFO] [stdout]  55 | impl SessionManager {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  64 |     pub fn create_session(&mut self, peer_id: PeerId, session_key: SessionKey) -> Result<Uuid, AppError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  71 |     pub fn authenticate_session(&mut self, peer_id: &PeerId) -> Result<(), AppError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  84 |     pub fn get_session(&mut self, peer_id: &PeerId) -> Option<&mut SessionInfo> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn get_session_key(&mut self, peer_id: &PeerId) -> Option<&SessionKey> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub fn is_authenticated(&mut self, peer_id: &PeerId) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 116 |     pub fn remove_session(&mut self, peer_id: &PeerId) -> Option<SessionInfo> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub fn cleanup_expired_sessions(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub fn get_active_sessions(&self) -> Vec<PeerId> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 133 |     pub fn get_authenticated_sessions(&self) -> Vec<PeerId> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 140 |     pub fn session_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub fn authenticated_session_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `AuthenticationProtocol` is never used
[INFO] [stdout]    --> src/auth/session.rs:151:11
[INFO] [stdout]     |
[INFO] [stdout] 151 | pub trait AuthenticationProtocol {
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `challenge_manager` and `session_manager` are never read
[INFO] [stdout]    --> src/auth/session.rs:158:5
[INFO] [stdout]     |
[INFO] [stdout] 157 | pub struct MutualAuthenticator {
[INFO] [stdout]     |            ------------------- fields in this struct
[INFO] [stdout] 158 |     challenge_manager: crate::auth::challenge::ChallengeManager,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 159 |     session_manager: SessionManager,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_session_manager` and `cleanup` are never used
[INFO] [stdout]    --> src/auth/session.rs:170:12
[INFO] [stdout]     |
[INFO] [stdout] 162 | impl MutualAuthenticator {
[INFO] [stdout]     | ------------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 170 |     pub fn get_session_manager(&mut self) -> &mut SessionManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 174 |     pub fn cleanup(&mut self) {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `challenge`, `timestamp`, and `peer_id` are never read
[INFO] [stdout]   --> src/auth/challenge.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct AuthChallenge {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] 10 |     pub challenge: Vec<u8>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 11 |     pub timestamp: SystemTime,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 12 |     pub peer_id: PeerId,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AuthChallenge` 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: associated items `new`, `is_expired`, `verify_response`, and `compute_response` are never used
[INFO] [stdout]   --> src/auth/challenge.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | impl AuthChallenge {
[INFO] [stdout]    | ------------------ associated items in this implementation
[INFO] [stdout] 16 |     pub fn new(peer_id: PeerId) -> Result<Self, AppError> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn is_expired(&self, timeout: Duration) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub fn verify_response(&self, response: &[u8], shared_key: &[u8]) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 38 |     pub fn compute_response(&self, shared_key: &[u8]) -> Vec<u8> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `active_challenges` and `challenge_timeout` are never read
[INFO] [stdout]   --> src/auth/challenge.rs:48:5
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub struct ChallengeManager {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] 48 |     active_challenges: HashMap<PeerId, AuthChallenge>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 49 |     challenge_timeout: Duration,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `create_challenge`, `get_challenge`, `verify_challenge_response`, `cleanup_expired_challenges`, and `get_active_challenge_count` are never used
[INFO] [stdout]   --> src/auth/challenge.rs:60:12
[INFO] [stdout]    |
[INFO] [stdout] 52 | impl ChallengeManager {
[INFO] [stdout]    | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 60 |     pub fn create_challenge(&mut self, peer_id: PeerId) -> Result<AuthChallenge, AppError> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 66 |     pub fn get_challenge(&self, peer_id: &PeerId) -> Option<&AuthChallenge> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 70 |     pub fn verify_challenge_response(&mut self, peer_id: &PeerId, response: &[u8], shared_key: &[u8]) -> Result<bool, AppError> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub fn cleanup_expired_challenges(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 87 |     pub fn get_active_challenge_count(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "6d7132cf4e52120f48a6fc74628bea24afd64a029860aea910efaa4223d75d75", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "6d7132cf4e52120f48a6fc74628bea24afd64a029860aea910efaa4223d75d75", kill_on_drop: false }`
[INFO] [stdout] 6d7132cf4e52120f48a6fc74628bea24afd64a029860aea910efaa4223d75d75
