[INFO] cloning repository https://github.com/hex0gen1/vpn
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/hex0gen1/vpn" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fhex0gen1%2Fvpn", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fhex0gen1%2Fvpn'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] f14f0835c1bfdd9fcc21cb5c568b4803cfb8c312
[INFO] checking hex0gen1/vpn against try#6713fa75964eb229409a9c6f6f5c418423e313ff for pr-133502-22
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fhex0gen1%2Fvpn" "/workspace/builds/worker-7-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/hex0gen1/vpn
[INFO] finished tweaking git repo https://github.com/hex0gen1/vpn
[INFO] tweaked toml for git repo https://github.com/hex0gen1/vpn written to /workspace/builds/worker-7-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/hex0gen1/vpn on toolchain 6713fa75964eb229409a9c6f6f5c418423e313ff
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+6713fa75964eb229409a9c6f6f5c418423e313ff" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/hex0gen1/vpn 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" "+6713fa75964eb229409a9c6f6f5c418423e313ff" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded lic v0.4.0
[INFO] [stderr]   Downloaded gip v0.7.1
[INFO] [stderr]   Downloaded hmac v0.13.0
[INFO] [stderr]   Downloaded enum-as-inner v0.3.4
[INFO] [stderr]   Downloaded trust-dns-resolver v0.20.4
[INFO] [stderr]   Downloaded hkdf v0.13.0
[INFO] [stderr]   Downloaded trust-dns-proto v0.20.4
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+6713fa75964eb229409a9c6f6f5c418423e313ff" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 3ff4f258da1ce4d1ca854ae022892654963ca2d60d2da2433c4598ae523263f7
[INFO] running `Command { std: "docker" "start" "-a" "3ff4f258da1ce4d1ca854ae022892654963ca2d60d2da2433c4598ae523263f7", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "3ff4f258da1ce4d1ca854ae022892654963ca2d60d2da2433c4598ae523263f7", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "3ff4f258da1ce4d1ca854ae022892654963ca2d60d2da2433c4598ae523263f7", kill_on_drop: false }`
[INFO] [stdout] 3ff4f258da1ce4d1ca854ae022892654963ca2d60d2da2433c4598ae523263f7
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+6713fa75964eb229409a9c6f6f5c418423e313ff" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 2fc50a57bdc16a473514ff6949ad849754ba4d5fdb019b73459ab58bbdf963dd
[INFO] running `Command { std: "docker" "start" "-a" "2fc50a57bdc16a473514ff6949ad849754ba4d5fdb019b73459ab58bbdf963dd", kill_on_drop: false }`
[INFO] [stderr] warning: vpn-daemon v0.1.0 (/opt/rustwide/workdir/crates/vpn-daemon) ignoring invalid dependency `lic` which is missing a lib target
[INFO] [stderr]     Checking typenum v1.20.0
[INFO] [stderr]    Compiling libc v0.2.185
[INFO] [stderr]     Checking lock_api v0.4.14
[INFO] [stderr]     Checking mio v1.2.0
[INFO] [stderr]     Checking parking_lot_core v0.9.12
[INFO] [stderr]     Checking socket2 v0.6.3
[INFO] [stderr]    Compiling fs_extra v1.3.0
[INFO] [stderr]     Checking signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling futures-macro v0.3.32
[INFO] [stderr]    Compiling zeroize_derive v1.4.3
[INFO] [stderr]    Compiling dunce v1.0.5
[INFO] [stderr]     Checking serde v1.0.228
[INFO] [stderr]     Checking icu_normalizer v2.2.0
[INFO] [stderr]    Compiling syn v1.0.109
[INFO] [stderr]     Checking http v0.2.12
[INFO] [stderr]    Compiling aws-lc-rs v1.16.3
[INFO] [stderr]     Checking hashbrown v0.17.0
[INFO] [stderr]     Checking ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking cmov v0.5.3
[INFO] [stderr]     Checking matchers v0.2.0
[INFO] [stderr]     Checking socket2 v0.5.10
[INFO] [stderr]     Checking instant v0.1.13
[INFO] [stderr]     Checking idna_adapter v1.2.1
[INFO] [stderr]     Checking const-oid v0.10.2
[INFO] [stderr]     Checking tokio v1.51.0
[INFO] [stderr]     Checking ctutils v0.4.2
[INFO] [stderr]     Checking idna v1.1.0
[INFO] [stderr]     Checking zeroize v1.8.2
[INFO] [stderr]    Compiling heck v0.3.3
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking rustls-pki-types v1.14.1
[INFO] [stderr]     Checking parking_lot_core v0.8.6
[INFO] [stderr]    Compiling curve25519-dalek v4.1.3
[INFO] [stderr]     Checking textwrap v0.11.0
[INFO] [stderr]     Checking rand v0.8.6
[INFO] [stderr]     Checking url v2.5.8
[INFO] [stderr]     Checking futures-util v0.3.32
[INFO] [stderr]     Checking indexmap v2.14.0
[INFO] [stderr]     Checking atty v0.2.14
[INFO] [stderr]     Checking data-encoding v2.11.0
[INFO] [stderr]     Checking http-body v0.4.6
[INFO] [stderr]     Checking ansi_term v0.12.1
[INFO] [stderr]    Compiling rustls v0.23.40
[INFO] [stderr]     Checking serde_urlencoded v0.7.1
[INFO] [stderr]     Checking clap v2.34.0
[INFO] [stderr]    Compiling jobserver v0.1.34
[INFO] [stderr]     Checking parking_lot v0.11.2
[INFO] [stderr]    Compiling nix v0.31.2
[INFO] [stderr]     Checking getrandom v0.4.2
[INFO] [stderr]    Compiling cc v1.2.61
[INFO] [stderr]    Compiling curve25519-dalek-derive v0.1.1
[INFO] [stderr]     Checking dirs-sys v0.3.7
[INFO] [stderr]     Checking winnow v1.0.2
[INFO] [stderr]     Checking resolv-conf v0.7.6
[INFO] [stderr]     Checking dirs-sys v0.5.0
[INFO] [stderr]     Checking tracing v0.1.44
[INFO] [stderr]     Checking dirs v4.0.0
[INFO] [stderr]     Checking toml v0.5.11
[INFO] [stderr]     Checking regex v1.12.3
[INFO] [stderr]     Checking toml_datetime v1.1.1+spec-1.1.0
[INFO] [stderr]     Checking tracing-subscriber v0.3.23
[INFO] [stderr]     Checking serde_spanned v1.1.1
[INFO] [stderr]     Checking toml_writer v1.1.1+spec-1.1.0
[INFO] [stderr]    Compiling darling_core v0.23.0
[INFO] [stderr]     Checking tempfile v3.27.0
[INFO] [stderr]     Checking rand v0.10.1
[INFO] [stderr]     Checking directories v6.0.0
[INFO] [stderr]     Checking webpki-roots v1.0.7
[INFO] [stderr]     Checking toml_parser v1.1.2+spec-1.1.0
[INFO] [stderr]     Checking uuid v1.23.1
[INFO] [stderr]     Checking thiserror v2.0.18
[INFO] [stderr]    Compiling owo-colors v4.3.0
[INFO] [stderr]     Checking vpn-types v0.1.0 (/opt/rustwide/workdir/crates/vpn-types)
[INFO] [stderr]     Checking signal-hook v0.3.18
[INFO] [stderr]     Checking toml v1.1.2+spec-1.1.0
[INFO] [stderr]    Compiling color-spantrace v0.3.0
[INFO] [stderr]    Compiling strum_macros v0.26.4
[INFO] [stderr]     Checking signal-hook-mio v0.2.5
[INFO] [stderr]     Checking miniz_oxide v0.8.9
[INFO] [stderr]     Checking indenter v0.3.4
[INFO] [stderr]     Checking eyre v0.6.12
[INFO] [stderr]     Checking crossterm v0.28.1
[INFO] [stderr]     Checking backtrace v0.3.76
[INFO] [stderr]    Compiling cmake v0.1.58
[INFO] [stderr]     Checking generic-array v0.14.7
[INFO] [stderr]     Checking hybrid-array v0.4.12
[INFO] [stderr]     Checking tracing-error v0.2.1
[INFO] [stderr]     Checking x25519-dalek v2.0.1
[INFO] [stderr]    Compiling proc-macro-error v1.0.4
[INFO] [stderr]    Compiling openssl-sys v0.9.114
[INFO] [stderr]    Compiling aws-lc-sys v0.40.0
[INFO] [stderr]     Checking strum v0.26.3
[INFO] [stderr]     Checking color-eyre v0.6.5
[INFO] [stderr]     Checking crypto-common v0.1.7
[INFO] [stderr]     Checking inout v0.1.4
[INFO] [stderr]     Checking universal-hash v0.5.1
[INFO] [stderr]     Checking cipher v0.4.4
[INFO] [stderr]     Checking aead v0.5.2
[INFO] [stderr]    Compiling openssl v0.10.78
[INFO] [stderr]    Compiling native-tls v0.2.18
[INFO] [stderr]    Compiling enum-as-inner v0.3.4
[INFO] [stderr]    Compiling structopt-derive v0.4.18
[INFO] [stderr]     Checking polyval v0.6.2
[INFO] [stderr]     Checking ctr v0.9.2
[INFO] [stderr]     Checking aes v0.8.4
[INFO] [stderr]     Checking block-buffer v0.12.0
[INFO] [stderr]     Checking crypto-common v0.2.1
[INFO] [stderr]     Checking ghash v0.5.1
[INFO] [stderr]     Checking aes-gcm v0.10.3
[INFO] [stderr]     Checking futures-executor v0.3.32
[INFO] [stderr]     Checking futures v0.3.32
[INFO] [stderr]     Checking structopt v0.3.26
[INFO] [stderr]    Compiling darling_macro v0.23.0
[INFO] [stderr]    Compiling darling v0.23.0
[INFO] [stderr]     Checking digest v0.11.3
[INFO] [stderr]    Compiling instability v0.3.12
[INFO] [stderr]     Checking hmac v0.13.0
[INFO] [stderr]     Checking sha2 v0.11.0
[INFO] [stderr]     Checking hkdf v0.13.0
[INFO] [stderr]     Checking ratatui v0.29.0
[INFO] [stderr]     Checking tokio-util v0.7.18
[INFO] [stderr]     Checking trust-dns-proto v0.20.4
[INFO] [stderr]     Checking vpn-core v0.1.0 (/opt/rustwide/workdir/crates/vpn-core)
[INFO] [stdout] warning: unused imports: `Deserialize` and `Serialize`
[INFO] [stdout]  --> crates/vpn-core/src/error.rs:1:13
[INFO] [stdout]   |
[INFO] [stdout] 1 | use serde::{Deserialize, Serialize};
[INFO] [stdout]   |             ^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CoreError` is never used
[INFO] [stdout]  --> crates/vpn-core/src/error.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum CoreError {
[INFO] [stdout]   |          ^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserialize` and `Serialize`
[INFO] [stdout]  --> crates/vpn-core/src/error.rs:1:13
[INFO] [stdout]   |
[INFO] [stdout] 1 | use serde::{Deserialize, Serialize};
[INFO] [stdout]   |             ^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CoreError` is never used
[INFO] [stdout]  --> crates/vpn-core/src/error.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum CoreError {
[INFO] [stdout]   |          ^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Checking tokio-native-tls v0.3.1
[INFO] [stderr]     Checking h2 v0.3.27
[INFO] [stderr]     Checking trust-dns-resolver v0.20.4
[INFO] [stderr]     Checking hyper v0.14.32
[INFO] [stderr]     Checking hyper-tls v0.5.0
[INFO] [stderr]     Checking reqwest v0.11.27
[INFO] [stderr]     Checking gip v0.7.1
[INFO] [stderr]     Checking rustls-webpki v0.103.13
[INFO] [stderr]     Checking tokio-rustls v0.26.4
[INFO] [stderr]     Checking vpn-daemon v0.1.0 (/opt/rustwide/workdir/crates/vpn-daemon)
[INFO] [stdout] warning: unused imports: `SignalKind` and `Signal`
[INFO] [stdout]  --> crates/vpn-daemon/src/daemon/runtime.rs:4:27
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tokio::signal::unix::{Signal, SignalKind};
[INFO] [stdout]   |                           ^^^^^^  ^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `TunInterface` and `create_interface`
[INFO] [stdout]  --> crates/vpn-daemon/src/tests/tun_read.rs:1:25
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::linux::tun::{TunInterface, create_interface};
[INFO] [stdout]   |                         ^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> crates/vpn-daemon/src/tests/tun_read.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `sleep` and `timeout`
[INFO] [stdout]  --> crates/vpn-daemon/src/tests/tun_read.rs:5:19
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::time::{sleep, timeout};
[INFO] [stdout]   |                   ^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `TunInterface` and `create_interface`
[INFO] [stdout]  --> crates/vpn-daemon/src/transport/frame.rs:1:25
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::linux::tun::{TunInterface, create_interface};
[INFO] [stdout]   |                         ^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ClientNetworkConfig`, `RouteConfig`, and `TransportConfig`
[INFO] [stdout]  --> crates/vpn-daemon/src/transport/server.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 |     ClientNetworkConfig, RouteConfig, ServerNetworkConfig, TransportConfig,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^                       ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `TunFd` and `create_interface`
[INFO] [stdout]  --> crates/vpn-daemon/src/transport/server.rs:4:25
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::linux::tun::{TunFd, TunInterface, create_interface};
[INFO] [stdout]   |                         ^^^^^                ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DecodeError` and `DecodedFrame`
[INFO] [stdout]  --> crates/vpn-daemon/src/transport/server.rs:6:31
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::transport::frame::{DecodeError, DecodedFrame, FrameKind, decode_frame, encode_frame};
[INFO] [stdout]   |                               ^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ErrorLevel`
[INFO] [stdout]   --> crates/vpn-daemon/src/transport/server.rs:14:13
[INFO] [stdout]    |
[INFO] [stdout] 14 |     error::{ErrorLevel, VpnError},
[INFO] [stdout]    |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AsyncRead` and `AsyncWrite`
[INFO] [stdout]   --> crates/vpn-daemon/src/transport/server.rs:17:17
[INFO] [stdout]    |
[INFO] [stdout] 17 | use tokio::io::{AsyncRead, AsyncWrite};
[INFO] [stdout]    |                 ^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `peers_table` should have an upper camel case name
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:269:12
[INFO] [stdout]     |
[INFO] [stdout] 269 | pub struct peers_table {
[INFO] [stdout]     |            ^^^^^^^^^^^ help: convert the identifier to upper camel case: `PeersTable`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Key`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:471:18
[INFO] [stdout]     |
[INFO] [stdout] 471 | use aead::{Aead, Key, KeyInit};
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::PathBuf`
[INFO] [stdout]  --> crates/vpn-daemon/src/transport/singbox.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::path::PathBuf;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `client::TlsStream`
[INFO] [stdout]  --> crates/vpn-daemon/src/transport/transport.rs:8:34
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio_rustls::{TlsConnector, client::TlsStream};
[INFO] [stdout]   |                                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `anyhow::Result`
[INFO] [stdout]   --> crates/vpn-daemon/src/lib.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use anyhow::Result;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `SignalKind` and `Signal`
[INFO] [stdout]  --> crates/vpn-daemon/src/daemon/runtime.rs:4:27
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tokio::signal::unix::{Signal, SignalKind};
[INFO] [stdout]   |                           ^^^^^^  ^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `TunInterface` and `create_interface`
[INFO] [stdout]  --> crates/vpn-daemon/src/transport/frame.rs:1:25
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::linux::tun::{TunInterface, create_interface};
[INFO] [stdout]   |                         ^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ClientNetworkConfig`, `RouteConfig`, and `TransportConfig`
[INFO] [stdout]  --> crates/vpn-daemon/src/transport/server.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 |     ClientNetworkConfig, RouteConfig, ServerNetworkConfig, TransportConfig,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^                       ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `TunFd` and `create_interface`
[INFO] [stdout]  --> crates/vpn-daemon/src/transport/server.rs:4:25
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::linux::tun::{TunFd, TunInterface, create_interface};
[INFO] [stdout]   |                         ^^^^^                ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DecodeError` and `DecodedFrame`
[INFO] [stdout]  --> crates/vpn-daemon/src/transport/server.rs:6:31
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::transport::frame::{DecodeError, DecodedFrame, FrameKind, decode_frame, encode_frame};
[INFO] [stdout]   |                               ^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ErrorLevel`
[INFO] [stdout]   --> crates/vpn-daemon/src/transport/server.rs:14:13
[INFO] [stdout]    |
[INFO] [stdout] 14 |     error::{ErrorLevel, VpnError},
[INFO] [stdout]    |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AsyncRead` and `AsyncWrite`
[INFO] [stdout]   --> crates/vpn-daemon/src/transport/server.rs:17:17
[INFO] [stdout]    |
[INFO] [stdout] 17 | use tokio::io::{AsyncRead, AsyncWrite};
[INFO] [stdout]    |                 ^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `peers_table` should have an upper camel case name
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:269:12
[INFO] [stdout]     |
[INFO] [stdout] 269 | pub struct peers_table {
[INFO] [stdout]     |            ^^^^^^^^^^^ help: convert the identifier to upper camel case: `PeersTable`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Key`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:471:18
[INFO] [stdout]     |
[INFO] [stdout] 471 | use aead::{Aead, Key, KeyInit};
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::PathBuf`
[INFO] [stdout]  --> crates/vpn-daemon/src/transport/singbox.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::path::PathBuf;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `client::TlsStream`
[INFO] [stdout]  --> crates/vpn-daemon/src/transport/transport.rs:8:34
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio_rustls::{TlsConnector, client::TlsStream};
[INFO] [stdout]   |                                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `anyhow::Result`
[INFO] [stdout]   --> crates/vpn-daemon/src/lib.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use anyhow::Result;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:453:9
[INFO] [stdout]     |
[INFO] [stdout] 453 |     let mut frame = encode_frame(kind, session_id, &mut payload);
[INFO] [stdout]     |         ----^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:453:9
[INFO] [stdout]     |
[INFO] [stdout] 453 |     let mut frame = encode_frame(kind, session_id, &mut payload);
[INFO] [stdout]     |         ----^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:646:5
[INFO] [stdout]     |
[INFO] [stdout] 646 |     mut peers: Arc<TokioMutex<peers_table>>,
[INFO] [stdout]     |     ----^^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:646:5
[INFO] [stdout]     |
[INFO] [stdout] 646 |     mut peers: Arc<TokioMutex<peers_table>>,
[INFO] [stdout]     |     ----^^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:912:21
[INFO] [stdout]     |
[INFO] [stdout] 904 |                     Ok(len) => match len{
[INFO] [stdout]     |                     ------- matches all the relevant values
[INFO] [stdout] ...
[INFO] [stdout] 912 |                     Ok(0) => {
[INFO] [stdout]     |                     ^^^^^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:912:21
[INFO] [stdout]     |
[INFO] [stdout] 904 |                     Ok(len) => match len{
[INFO] [stdout]     |                     ------- matches all the relevant values
[INFO] [stdout] ...
[INFO] [stdout] 912 |                     Ok(0) => {
[INFO] [stdout]     |                     ^^^^^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `plan`
[INFO] [stdout]    --> crates/vpn-daemon/src/daemon/runtime.rs:109:24
[INFO] [stdout]     |
[INFO] [stdout] 109 |     pub async fn start(plan: RuntimePlan) -> anyhow::Result<(RuntimeHandle, RuntimeTask)> {
[INFO] [stdout]     |                        ^^^^ help: if this is intentional, prefix it with an underscore: `_plan`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tun_to_transport_tx`
[INFO] [stdout]    --> crates/vpn-daemon/src/daemon/runtime.rs:111:14
[INFO] [stdout]     |
[INFO] [stdout] 111 |         let (tun_to_transport_tx, tun_to_transport_rx) = tokio::sync::mpsc::channel::<Packet>(256);
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tun_to_transport_tx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tun_to_transport_rx`
[INFO] [stdout]    --> crates/vpn-daemon/src/daemon/runtime.rs:111:35
[INFO] [stdout]     |
[INFO] [stdout] 111 |         let (tun_to_transport_tx, tun_to_transport_rx) = tokio::sync::mpsc::channel::<Packet>(256);
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tun_to_transport_rx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `plan`
[INFO] [stdout]    --> crates/vpn-daemon/src/daemon/runtime.rs:109:24
[INFO] [stdout]     |
[INFO] [stdout] 109 |     pub async fn start(plan: RuntimePlan) -> anyhow::Result<(RuntimeHandle, RuntimeTask)> {
[INFO] [stdout]     |                        ^^^^ help: if this is intentional, prefix it with an underscore: `_plan`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tun_to_transport_tx`
[INFO] [stdout]    --> crates/vpn-daemon/src/daemon/runtime.rs:111:14
[INFO] [stdout]     |
[INFO] [stdout] 111 |         let (tun_to_transport_tx, tun_to_transport_rx) = tokio::sync::mpsc::channel::<Packet>(256);
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tun_to_transport_tx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tun_to_transport_rx`
[INFO] [stdout]    --> crates/vpn-daemon/src/daemon/runtime.rs:111:35
[INFO] [stdout]     |
[INFO] [stdout] 111 |         let (tun_to_transport_tx, tun_to_transport_rx) = tokio::sync::mpsc::channel::<Packet>(256);
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tun_to_transport_rx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ip`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:344:9
[INFO] [stdout]     |
[INFO] [stdout] 344 |     let ip = state
[INFO] [stdout]     |         ^^ help: if this is intentional, prefix it with an underscore: `_ip`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `peers`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:364:5
[INFO] [stdout]     |
[INFO] [stdout] 364 |     peers: Arc<TokioMutex<peers_table>>,
[INFO] [stdout]     |     ^^^^^ help: if this is intentional, prefix it with an underscore: `_peers`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ip`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:400:9
[INFO] [stdout]     |
[INFO] [stdout] 400 |     let ip = state
[INFO] [stdout]     |         ^^ help: if this is intentional, prefix it with an underscore: `_ip`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `peers`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:646:5
[INFO] [stdout]     |
[INFO] [stdout] 646 |     mut peers: Arc<TokioMutex<peers_table>>,
[INFO] [stdout]     |     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_peers`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `allocator`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:647:5
[INFO] [stdout]     |
[INFO] [stdout] 647 |     allocator: Arc<tokio::sync::Mutex<IpAllocator>>,
[INFO] [stdout]     |     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_allocator`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ip`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:344:9
[INFO] [stdout]     |
[INFO] [stdout] 344 |     let ip = state
[INFO] [stdout]     |         ^^ help: if this is intentional, prefix it with an underscore: `_ip`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `peers`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:364:5
[INFO] [stdout]     |
[INFO] [stdout] 364 |     peers: Arc<TokioMutex<peers_table>>,
[INFO] [stdout]     |     ^^^^^ help: if this is intentional, prefix it with an underscore: `_peers`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ip`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:400:9
[INFO] [stdout]     |
[INFO] [stdout] 400 |     let ip = state
[INFO] [stdout]     |         ^^ help: if this is intentional, prefix it with an underscore: `_ip`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `config`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/singbox.rs:186:13
[INFO] [stdout]     |
[INFO] [stdout] 186 |         let config = SingBoxConfig {
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_config`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `peers`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:646:5
[INFO] [stdout]     |
[INFO] [stdout] 646 |     mut peers: Arc<TokioMutex<peers_table>>,
[INFO] [stdout]     |     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_peers`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `allocator`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:647:5
[INFO] [stdout]     |
[INFO] [stdout] 647 |     allocator: Arc<tokio::sync::Mutex<IpAllocator>>,
[INFO] [stdout]     |     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_allocator`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `config`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/singbox.rs:186:13
[INFO] [stdout]     |
[INFO] [stdout] 186 |         let config = SingBoxConfig {
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_config`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `errors` is never read
[INFO] [stdout]   --> crates/vpn-daemon/src/daemon/runtime.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct RuntimeStatistics {
[INFO] [stdout]    |            ----------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 27 |     errors: AtomicU64,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> crates/vpn-daemon/src/daemon/runtime.rs:102:8
[INFO] [stdout]     |
[INFO] [stdout] 101 | impl RuntimePlan {
[INFO] [stdout]     | ---------------- associated function in this implementation
[INFO] [stdout] 102 |     fn new(tun_dec_name: String) -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `routes` is never read
[INFO] [stdout]  --> crates/vpn-daemon/src/linux/routing.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub struct ClientNetworkConfig {
[INFO] [stdout]   |            ------------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 7 |     routes: Vec<RouteConfig>,
[INFO] [stdout]   |     ^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `ClientNetworkConfig` 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: function `require_root` is never used
[INFO] [stdout]  --> crates/vpn-daemon/src/tests/tun_read.rs:7:4
[INFO] [stdout]   |
[INFO] [stdout] 7 | fn require_root() {
[INFO] [stdout]   |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_ok` is never used
[INFO] [stdout]   --> crates/vpn-daemon/src/tests/tun_read.rs:15:10
[INFO] [stdout]    |
[INFO] [stdout] 15 | async fn run_ok(program: &str, args: &[&str]) -> Result<()> {
[INFO] [stdout]    |          ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `resolve_addr` is never used
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/transport.rs:252:10
[INFO] [stdout]     |
[INFO] [stdout] 252 | async fn resolve_addr(
[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]   --> crates/vpn-daemon/src/transport/server.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     async fn recv_frame(&mut self, buf: &mut [u8]) -> std::io::Result<usize>;
[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] 32 -     async fn recv_frame(&mut self, buf: &mut [u8]) -> std::io::Result<usize>;
[INFO] [stdout] 32 +     fn recv_frame(&mut self, buf: &mut [u8]) -> impl std::future::Future<Output = std::io::Result<usize>> + 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]   --> crates/vpn-daemon/src/transport/server.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     async fn send_frame(&mut self, buf: &[u8]) -> std::io::Result<usize>;
[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] 33 -     async fn send_frame(&mut self, buf: &[u8]) -> std::io::Result<usize>;
[INFO] [stdout] 33 +     fn send_frame(&mut self, buf: &[u8]) -> impl std::future::Future<Output = std::io::Result<usize>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:371:5
[INFO] [stdout]     |
[INFO] [stdout] 371 | /     stream
[INFO] [stdout] 372 | |         .read_exact(len_buf.as_mut_slice())
[INFO] [stdout] 373 | |         .await
[INFO] [stdout] 374 | |         .map_err(|e| VpnError::Io(e));
[INFO] [stdout]     | |_____________________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 371 |     let _ = stream
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:381:5
[INFO] [stdout]     |
[INFO] [stdout] 381 | /     stream
[INFO] [stdout] 382 | |         .read_exact(&mut encrypted)
[INFO] [stdout] 383 | |         .await
[INFO] [stdout] 384 | |         .map_err(|e| VpnError::Io(e));
[INFO] [stdout]     | |_____________________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 381 |     let _ = stream
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:434:5
[INFO] [stdout]     |
[INFO] [stdout] 434 |     getrandom::fill(&mut key);
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 434 |     let _ = getrandom::fill(&mut key);
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:542:5
[INFO] [stdout]     |
[INFO] [stdout] 542 |     fill(&mut nonce_bytes);
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 542 |     let _ = fill(&mut nonce_bytes);
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused implementer of `std::future::Future` that must be used
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:856:25
[INFO] [stdout]     |
[INFO] [stdout] 856 |                         guard.write_packet(packet.as_mut_slice());
[INFO] [stdout]     |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: futures do nothing unless you `.await` or poll them
[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]   --> crates/vpn-daemon/src/transport/transport.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     async fn send_frame(&mut self, buf: &mut [u8]) -> Result<usize, Self::Error>;
[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] 26 -     async fn send_frame(&mut self, buf: &mut [u8]) -> Result<usize, Self::Error>;
[INFO] [stdout] 26 +     fn send_frame(&mut self, buf: &mut [u8]) -> impl std::future::Future<Output = Result<usize, Self::Error>> + 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]   --> crates/vpn-daemon/src/transport/transport.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     async fn recv_frame(&mut self, buf: &mut [u8]) -> Result<usize, Self::Error>;
[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] 27 -     async fn recv_frame(&mut self, buf: &mut [u8]) -> Result<usize, Self::Error>;
[INFO] [stdout] 27 +     fn recv_frame(&mut self, buf: &mut [u8]) -> impl std::future::Future<Output = Result<usize, Self::Error>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `errors` is never read
[INFO] [stdout]   --> crates/vpn-daemon/src/daemon/runtime.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct RuntimeStatistics {
[INFO] [stdout]    |            ----------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 27 |     errors: AtomicU64,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> crates/vpn-daemon/src/daemon/runtime.rs:102:8
[INFO] [stdout]     |
[INFO] [stdout] 101 | impl RuntimePlan {
[INFO] [stdout]     | ---------------- associated function in this implementation
[INFO] [stdout] 102 |     fn new(tun_dec_name: String) -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `routes` is never read
[INFO] [stdout]  --> crates/vpn-daemon/src/linux/routing.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub struct ClientNetworkConfig {
[INFO] [stdout]   |            ------------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 7 |     routes: Vec<RouteConfig>,
[INFO] [stdout]   |     ^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `ClientNetworkConfig` 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: function `resolve_addr` is never used
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/transport.rs:252:10
[INFO] [stdout]     |
[INFO] [stdout] 252 | async fn resolve_addr(
[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]   --> crates/vpn-daemon/src/transport/server.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     async fn recv_frame(&mut self, buf: &mut [u8]) -> std::io::Result<usize>;
[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] 32 -     async fn recv_frame(&mut self, buf: &mut [u8]) -> std::io::Result<usize>;
[INFO] [stdout] 32 +     fn recv_frame(&mut self, buf: &mut [u8]) -> impl std::future::Future<Output = std::io::Result<usize>> + 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]   --> crates/vpn-daemon/src/transport/server.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     async fn send_frame(&mut self, buf: &[u8]) -> std::io::Result<usize>;
[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] 33 -     async fn send_frame(&mut self, buf: &[u8]) -> std::io::Result<usize>;
[INFO] [stdout] 33 +     fn send_frame(&mut self, buf: &[u8]) -> impl std::future::Future<Output = std::io::Result<usize>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:371:5
[INFO] [stdout]     |
[INFO] [stdout] 371 | /     stream
[INFO] [stdout] 372 | |         .read_exact(len_buf.as_mut_slice())
[INFO] [stdout] 373 | |         .await
[INFO] [stdout] 374 | |         .map_err(|e| VpnError::Io(e));
[INFO] [stdout]     | |_____________________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 371 |     let _ = stream
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:381:5
[INFO] [stdout]     |
[INFO] [stdout] 381 | /     stream
[INFO] [stdout] 382 | |         .read_exact(&mut encrypted)
[INFO] [stdout] 383 | |         .await
[INFO] [stdout] 384 | |         .map_err(|e| VpnError::Io(e));
[INFO] [stdout]     | |_____________________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 381 |     let _ = stream
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:434:5
[INFO] [stdout]     |
[INFO] [stdout] 434 |     getrandom::fill(&mut key);
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 434 |     let _ = getrandom::fill(&mut key);
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:542:5
[INFO] [stdout]     |
[INFO] [stdout] 542 |     fill(&mut nonce_bytes);
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 542 |     let _ = fill(&mut nonce_bytes);
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused implementer of `std::future::Future` that must be used
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:856:25
[INFO] [stdout]     |
[INFO] [stdout] 856 |                         guard.write_packet(packet.as_mut_slice());
[INFO] [stdout]     |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: futures do nothing unless you `.await` or poll them
[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]   --> crates/vpn-daemon/src/transport/transport.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     async fn send_frame(&mut self, buf: &mut [u8]) -> Result<usize, Self::Error>;
[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] 26 -     async fn send_frame(&mut self, buf: &mut [u8]) -> Result<usize, Self::Error>;
[INFO] [stdout] 26 +     fn send_frame(&mut self, buf: &mut [u8]) -> impl std::future::Future<Output = Result<usize, Self::Error>> + 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]   --> crates/vpn-daemon/src/transport/transport.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     async fn recv_frame(&mut self, buf: &mut [u8]) -> Result<usize, Self::Error>;
[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] 27 -     async fn recv_frame(&mut self, buf: &mut [u8]) -> Result<usize, Self::Error>;
[INFO] [stdout] 27 +     fn recv_frame(&mut self, buf: &mut [u8]) -> impl std::future::Future<Output = Result<usize, Self::Error>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Checking vpn-tui v0.1.0 (/opt/rustwide/workdir/crates/vpn-tui)
[INFO] [stdout] warning: unused imports: `SignalKind` and `Signal`
[INFO] [stdout]  --> crates/vpn-daemon/src/daemon/runtime.rs:4:27
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tokio::signal::unix::{Signal, SignalKind};
[INFO] [stdout]   |                           ^^^^^^  ^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `TunInterface` and `create_interface`
[INFO] [stdout]  --> crates/vpn-daemon/src/tests/tun_read.rs:1:25
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::linux::tun::{TunInterface, create_interface};
[INFO] [stdout]   |                         ^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> crates/vpn-daemon/src/tests/tun_read.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `sleep` and `timeout`
[INFO] [stdout]  --> crates/vpn-daemon/src/tests/tun_read.rs:5:19
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::time::{sleep, timeout};
[INFO] [stdout]   |                   ^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `TunInterface` and `create_interface`
[INFO] [stdout]  --> crates/vpn-daemon/src/transport/frame.rs:1:25
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::linux::tun::{TunInterface, create_interface};
[INFO] [stdout]   |                         ^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ClientNetworkConfig`, `RouteConfig`, and `TransportConfig`
[INFO] [stdout]  --> crates/vpn-daemon/src/transport/server.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 |     ClientNetworkConfig, RouteConfig, ServerNetworkConfig, TransportConfig,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^                       ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `TunFd` and `create_interface`
[INFO] [stdout]  --> crates/vpn-daemon/src/transport/server.rs:4:25
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::linux::tun::{TunFd, TunInterface, create_interface};
[INFO] [stdout]   |                         ^^^^^                ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DecodeError` and `DecodedFrame`
[INFO] [stdout]  --> crates/vpn-daemon/src/transport/server.rs:6:31
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::transport::frame::{DecodeError, DecodedFrame, FrameKind, decode_frame, encode_frame};
[INFO] [stdout]   |                               ^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ErrorLevel`
[INFO] [stdout]   --> crates/vpn-daemon/src/transport/server.rs:14:13
[INFO] [stdout]    |
[INFO] [stdout] 14 |     error::{ErrorLevel, VpnError},
[INFO] [stdout]    |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AsyncRead` and `AsyncWrite`
[INFO] [stdout]   --> crates/vpn-daemon/src/transport/server.rs:17:17
[INFO] [stdout]    |
[INFO] [stdout] 17 | use tokio::io::{AsyncRead, AsyncWrite};
[INFO] [stdout]    |                 ^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `peers_table` should have an upper camel case name
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:269:12
[INFO] [stdout]     |
[INFO] [stdout] 269 | pub struct peers_table {
[INFO] [stdout]     |            ^^^^^^^^^^^ help: convert the identifier to upper camel case: `PeersTable`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Key`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:471:18
[INFO] [stdout]     |
[INFO] [stdout] 471 | use aead::{Aead, Key, KeyInit};
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::PathBuf`
[INFO] [stdout]  --> crates/vpn-daemon/src/transport/singbox.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::path::PathBuf;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `client::TlsStream`
[INFO] [stdout]  --> crates/vpn-daemon/src/transport/transport.rs:8:34
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio_rustls::{TlsConnector, client::TlsStream};
[INFO] [stdout]   |                                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `SignalKind` and `Signal`
[INFO] [stdout]  --> crates/vpn-daemon/src/daemon/runtime.rs:4:27
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tokio::signal::unix::{Signal, SignalKind};
[INFO] [stdout]   |                           ^^^^^^  ^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `TunInterface` and `create_interface`
[INFO] [stdout]  --> crates/vpn-daemon/src/transport/frame.rs:1:25
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::linux::tun::{TunInterface, create_interface};
[INFO] [stdout]   |                         ^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ClientNetworkConfig`, `RouteConfig`, and `TransportConfig`
[INFO] [stdout]  --> crates/vpn-daemon/src/transport/server.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 |     ClientNetworkConfig, RouteConfig, ServerNetworkConfig, TransportConfig,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^                       ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `TunFd` and `create_interface`
[INFO] [stdout]  --> crates/vpn-daemon/src/transport/server.rs:4:25
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::linux::tun::{TunFd, TunInterface, create_interface};
[INFO] [stdout]   |                         ^^^^^                ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DecodeError` and `DecodedFrame`
[INFO] [stdout]  --> crates/vpn-daemon/src/transport/server.rs:6:31
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::transport::frame::{DecodeError, DecodedFrame, FrameKind, decode_frame, encode_frame};
[INFO] [stdout]   |                               ^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ErrorLevel`
[INFO] [stdout]   --> crates/vpn-daemon/src/transport/server.rs:14:13
[INFO] [stdout]    |
[INFO] [stdout] 14 |     error::{ErrorLevel, VpnError},
[INFO] [stdout]    |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AsyncRead` and `AsyncWrite`
[INFO] [stdout]   --> crates/vpn-daemon/src/transport/server.rs:17:17
[INFO] [stdout]    |
[INFO] [stdout] 17 | use tokio::io::{AsyncRead, AsyncWrite};
[INFO] [stdout]    |                 ^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `peers_table` should have an upper camel case name
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:269:12
[INFO] [stdout]     |
[INFO] [stdout] 269 | pub struct peers_table {
[INFO] [stdout]     |            ^^^^^^^^^^^ help: convert the identifier to upper camel case: `PeersTable`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Key`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:471:18
[INFO] [stdout]     |
[INFO] [stdout] 471 | use aead::{Aead, Key, KeyInit};
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::PathBuf`
[INFO] [stdout]  --> crates/vpn-daemon/src/transport/singbox.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::path::PathBuf;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `client::TlsStream`
[INFO] [stdout]  --> crates/vpn-daemon/src/transport/transport.rs:8:34
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio_rustls::{TlsConnector, client::TlsStream};
[INFO] [stdout]   |                                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `vpn_daemon::transport::singbox::socks5_connect`
[INFO] [stdout]    --> crates/vpn-tui/src/backend/backend.rs:505:5
[INFO] [stdout]     |
[INFO] [stdout] 505 | use vpn_daemon::transport::singbox::socks5_connect;
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Block`, `Borders`, `Color`, `Constraint`, `Direction`, `Layout`, `Paragraph`, `Style`, and `Stylize`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/connection.rs:4:14
[INFO] [stdout]   |
[INFO] [stdout] 4 |     layout::{Constraint, Direction, Layout, Rect},
[INFO] [stdout]   |              ^^^^^^^^^^  ^^^^^^^^^  ^^^^^^
[INFO] [stdout] 5 |     style::{Color, Style, Stylize},
[INFO] [stdout]   |             ^^^^^  ^^^^^  ^^^^^^^
[INFO] [stdout] 6 |     widgets::{Block, Borders, Paragraph},
[INFO] [stdout]   |               ^^^^^  ^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Modifier` and `Style`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/constants.rs:1:29
[INFO] [stdout]   |
[INFO] [stdout] 1 | use ratatui::style::{Color, Modifier, Style};
[INFO] [stdout]   |                             ^^^^^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::text::Span`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/constants.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use ratatui::text::Span;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Color`, `Direction`, `Rect`, `Style`, and `Stylize`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/pdetails.rs:4:26
[INFO] [stdout]   |
[INFO] [stdout] 4 |     layout::{Constraint, Direction, Layout, Rect},
[INFO] [stdout]   |                          ^^^^^^^^^          ^^^^
[INFO] [stdout] 5 |     style::{Color, Style, Stylize},
[INFO] [stdout]   |             ^^^^^  ^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Paragraph`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/profiles.rs:4:31
[INFO] [stdout]   |
[INFO] [stdout] 4 |     widgets::{Block, Borders, Paragraph},
[INFO] [stdout]   |                               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::screens::constants`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/profiles.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::screens::constants;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `vpn_daemon::transport::singbox::socks5_connect`
[INFO] [stdout]    --> crates/vpn-tui/src/backend/backend.rs:505:5
[INFO] [stdout]     |
[INFO] [stdout] 505 | use vpn_daemon::transport::singbox::socks5_connect;
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Block`, `Borders`, `Color`, `Constraint`, `Direction`, `Layout`, `Paragraph`, `Style`, and `Stylize`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/connection.rs:4:14
[INFO] [stdout]   |
[INFO] [stdout] 4 |     layout::{Constraint, Direction, Layout, Rect},
[INFO] [stdout]   |              ^^^^^^^^^^  ^^^^^^^^^  ^^^^^^
[INFO] [stdout] 5 |     style::{Color, Style, Stylize},
[INFO] [stdout]   |             ^^^^^  ^^^^^  ^^^^^^^
[INFO] [stdout] 6 |     widgets::{Block, Borders, Paragraph},
[INFO] [stdout]   |               ^^^^^  ^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Modifier` and `Style`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/constants.rs:1:29
[INFO] [stdout]   |
[INFO] [stdout] 1 | use ratatui::style::{Color, Modifier, Style};
[INFO] [stdout]   |                             ^^^^^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::text::Span`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/constants.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use ratatui::text::Span;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Color`, `Direction`, `Rect`, `Style`, and `Stylize`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/pdetails.rs:4:26
[INFO] [stdout]   |
[INFO] [stdout] 4 |     layout::{Constraint, Direction, Layout, Rect},
[INFO] [stdout]   |                          ^^^^^^^^^          ^^^^
[INFO] [stdout] 5 |     style::{Color, Style, Stylize},
[INFO] [stdout]   |             ^^^^^  ^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Paragraph`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/profiles.rs:4:31
[INFO] [stdout]   |
[INFO] [stdout] 4 |     widgets::{Block, Borders, Paragraph},
[INFO] [stdout]   |                               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::screens::constants`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/profiles.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::screens::constants;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:453:9
[INFO] [stdout]     |
[INFO] [stdout] 453 |     let mut frame = encode_frame(kind, session_id, &mut payload);
[INFO] [stdout]     |         ----^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:453:9
[INFO] [stdout]     |
[INFO] [stdout] 453 |     let mut frame = encode_frame(kind, session_id, &mut payload);
[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: `frame`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/connection.rs:9:11
[INFO] [stdout]   |
[INFO] [stdout] 9 | fn render(frame: Frame, app: &App, area: Rect) {}
[INFO] [stdout]   |           ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/connection.rs:9:25
[INFO] [stdout]   |
[INFO] [stdout] 9 | fn render(frame: Frame, app: &App, area: Rect) {}
[INFO] [stdout]   |                         ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `area`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/connection.rs:9:36
[INFO] [stdout]   |
[INFO] [stdout] 9 | fn render(frame: Frame, app: &App, area: Rect) {}
[INFO] [stdout]   |                                    ^^^^ help: if this is intentional, prefix it with an underscore: `_area`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/logs.rs:5:34
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub fn render(frame: &mut Frame, app: &App, area: Rect) {
[INFO] [stdout]   |                                  ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `header`
[INFO] [stdout]   --> crates/vpn-tui/src/screens/pdetails.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 |     let [header, body, description] = Layout::vertical([
[INFO] [stdout]    |          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_header`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `description`
[INFO] [stdout]   --> crates/vpn-tui/src/screens/pdetails.rs:10:24
[INFO] [stdout]    |
[INFO] [stdout] 10 |     let [header, body, description] = Layout::vertical([
[INFO] [stdout]    |                        ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_description`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:324:37
[INFO] [stdout]     |
[INFO] [stdout] 324 | fn render_footer(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {
[INFO] [stdout]     |                                     ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `backend`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:340:5
[INFO] [stdout]     |
[INFO] [stdout] 340 |     backend: &tokio::sync::watch::Ref<'_, BackendState>,
[INFO] [stdout]     |     ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_backend`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `final_output`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:361:9
[INFO] [stdout]     |
[INFO] [stdout] 361 |     let final_output =
[INFO] [stdout]     |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_final_output`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:376:5
[INFO] [stdout]     |
[INFO] [stdout] 376 |     app: &App,
[INFO] [stdout]     |     ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:414:41
[INFO] [stdout]     |
[INFO] [stdout] 414 | fn render_exit_popup(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {
[INFO] [stdout]     |                                         ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:430:47
[INFO] [stdout]     |
[INFO] [stdout] 430 | fn render_confirmdel_popup(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {
[INFO] [stdout]     |                                               ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:478:25
[INFO] [stdout]     |
[INFO] [stdout] 478 | fn render_popup_overlay(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {}
[INFO] [stdout]     |                         ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:478:44
[INFO] [stdout]     |
[INFO] [stdout] 478 | fn render_popup_overlay(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {}
[INFO] [stdout]     |                                            ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `area`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:478:55
[INFO] [stdout]     |
[INFO] [stdout] 478 | fn render_popup_overlay(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {}
[INFO] [stdout]     |                                                       ^^^^ help: if this is intentional, prefix it with an underscore: `_area`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:480:9
[INFO] [stdout]     |
[INFO] [stdout] 480 |     let mut popup_area = centered_popup(area, 50, 40);
[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: `app`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:479:42
[INFO] [stdout]     |
[INFO] [stdout] 479 | fn render_error_popup(frame: &mut Frame, app: &App, area: Rect, message: &str) {
[INFO] [stdout]     |                                          ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render` is never used
[INFO] [stdout]  --> crates/vpn-tui/src/screens/connection.rs:9:4
[INFO] [stdout]   |
[INFO] [stdout] 9 | fn render(frame: Frame, app: &App, area: Rect) {}
[INFO] [stdout]   |    ^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_footer` is never used
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:324:4
[INFO] [stdout]     |
[INFO] [stdout] 324 | fn render_footer(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_status_bar_old` is never used
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:337:4
[INFO] [stdout]     |
[INFO] [stdout] 337 | fn render_status_bar_old(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_popup_overlay` is never used
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:478:4
[INFO] [stdout]     |
[INFO] [stdout] 478 | fn render_popup_overlay(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {}
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused implementer of `Future` that must be used
[INFO] [stdout]    --> crates/vpn-tui/src/backend/backend.rs:199:25
[INFO] [stdout]     |
[INFO] [stdout] 199 | /                         self.handle_error(vpn_types::error::VpnError::DnsFailed(
[INFO] [stdout] 200 | |                             "Invalid host".into(),
[INFO] [stdout] 201 | |                         ));
[INFO] [stdout]     | |__________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: futures do nothing unless you `.await` or poll them
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> crates/vpn-tui/src/backend/backend.rs:390:9
[INFO] [stdout]     |
[INFO] [stdout] 390 | /         self.event_tx.send(BackendEvent::ConnectionStateChanged(
[INFO] [stdout] 391 | |             ConnectionState::Connecting,
[INFO] [stdout] 392 | |         ));
[INFO] [stdout]     | |__________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 390 |         let _ = self.event_tx.send(BackendEvent::ConnectionStateChanged(
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> crates/vpn-tui/src/backend/backend.rs:393:9
[INFO] [stdout]     |
[INFO] [stdout] 393 | /         self.event_tx.send(BackendEvent::LogAdded {
[INFO] [stdout] 394 | |             level: LogLevel::Info,
[INFO] [stdout] 395 | |             message: "Reconnecting...".into(),
[INFO] [stdout] 396 | |             source: "Backend".into(),
[INFO] [stdout] 397 | |         });
[INFO] [stdout]     | |__________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 393 |         let _ = self.event_tx.send(BackendEvent::LogAdded {
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `Groups` should have a snake case name
[INFO] [stdout]   --> crates/vpn-tui/src/screens/pdetails.rs:23:9
[INFO] [stdout]    |
[INFO] [stdout] 23 |     let Groups = vec![
[INFO] [stdout]    |         ^^^^^^ help: convert the identifier to snake case: `groups`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:646:5
[INFO] [stdout]     |
[INFO] [stdout] 646 |     mut peers: Arc<TokioMutex<peers_table>>,
[INFO] [stdout]     |     ----^^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:912:21
[INFO] [stdout]     |
[INFO] [stdout] 904 |                     Ok(len) => match len{
[INFO] [stdout]     |                     ------- matches all the relevant values
[INFO] [stdout] ...
[INFO] [stdout] 912 |                     Ok(0) => {
[INFO] [stdout]     |                     ^^^^^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `vpn_daemon::transport::singbox::socks5_connect`
[INFO] [stdout]    --> crates/vpn-tui/src/backend/backend.rs:505:5
[INFO] [stdout]     |
[INFO] [stdout] 505 | use vpn_daemon::transport::singbox::socks5_connect;
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Block`, `Borders`, `Color`, `Constraint`, `Direction`, `Layout`, `Paragraph`, `Style`, and `Stylize`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/connection.rs:4:14
[INFO] [stdout]   |
[INFO] [stdout] 4 |     layout::{Constraint, Direction, Layout, Rect},
[INFO] [stdout]   |              ^^^^^^^^^^  ^^^^^^^^^  ^^^^^^
[INFO] [stdout] 5 |     style::{Color, Style, Stylize},
[INFO] [stdout]   |             ^^^^^  ^^^^^  ^^^^^^^
[INFO] [stdout] 6 |     widgets::{Block, Borders, Paragraph},
[INFO] [stdout]   |               ^^^^^  ^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Modifier` and `Style`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/constants.rs:1:29
[INFO] [stdout]   |
[INFO] [stdout] 1 | use ratatui::style::{Color, Modifier, Style};
[INFO] [stdout]   |                             ^^^^^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::text::Span`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/constants.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use ratatui::text::Span;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Color`, `Direction`, `Rect`, `Style`, and `Stylize`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/pdetails.rs:4:26
[INFO] [stdout]   |
[INFO] [stdout] 4 |     layout::{Constraint, Direction, Layout, Rect},
[INFO] [stdout]   |                          ^^^^^^^^^          ^^^^
[INFO] [stdout] 5 |     style::{Color, Style, Stylize},
[INFO] [stdout]   |             ^^^^^  ^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Paragraph`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/profiles.rs:4:31
[INFO] [stdout]   |
[INFO] [stdout] 4 |     widgets::{Block, Borders, Paragraph},
[INFO] [stdout]   |                               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::screens::constants`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/profiles.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::screens::constants;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `vpn_daemon::transport::singbox::socks5_connect`
[INFO] [stdout]    --> crates/vpn-tui/src/backend/backend.rs:505:5
[INFO] [stdout]     |
[INFO] [stdout] 505 | use vpn_daemon::transport::singbox::socks5_connect;
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Block`, `Borders`, `Color`, `Constraint`, `Direction`, `Layout`, `Paragraph`, `Style`, and `Stylize`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/connection.rs:4:14
[INFO] [stdout]   |
[INFO] [stdout] 4 |     layout::{Constraint, Direction, Layout, Rect},
[INFO] [stdout]   |              ^^^^^^^^^^  ^^^^^^^^^  ^^^^^^
[INFO] [stdout] 5 |     style::{Color, Style, Stylize},
[INFO] [stdout]   |             ^^^^^  ^^^^^  ^^^^^^^
[INFO] [stdout] 6 |     widgets::{Block, Borders, Paragraph},
[INFO] [stdout]   |               ^^^^^  ^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Modifier` and `Style`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/constants.rs:1:29
[INFO] [stdout]   |
[INFO] [stdout] 1 | use ratatui::style::{Color, Modifier, Style};
[INFO] [stdout]   |                             ^^^^^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::text::Span`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/constants.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use ratatui::text::Span;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Color`, `Direction`, `Rect`, `Style`, and `Stylize`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/pdetails.rs:4:26
[INFO] [stdout]   |
[INFO] [stdout] 4 |     layout::{Constraint, Direction, Layout, Rect},
[INFO] [stdout]   |                          ^^^^^^^^^          ^^^^
[INFO] [stdout] 5 |     style::{Color, Style, Stylize},
[INFO] [stdout]   |             ^^^^^  ^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Paragraph`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/profiles.rs:4:31
[INFO] [stdout]   |
[INFO] [stdout] 4 |     widgets::{Block, Borders, Paragraph},
[INFO] [stdout]   |                               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::screens::constants`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/profiles.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::screens::constants;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:646:5
[INFO] [stdout]     |
[INFO] [stdout] 646 |     mut peers: Arc<TokioMutex<peers_table>>,
[INFO] [stdout]     |     ----^^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:912:21
[INFO] [stdout]     |
[INFO] [stdout] 904 |                     Ok(len) => match len{
[INFO] [stdout]     |                     ------- matches all the relevant values
[INFO] [stdout] ...
[INFO] [stdout] 912 |                     Ok(0) => {
[INFO] [stdout]     |                     ^^^^^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/connection.rs:9:11
[INFO] [stdout]   |
[INFO] [stdout] 9 | fn render(frame: Frame, app: &App, area: Rect) {}
[INFO] [stdout]   |           ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/connection.rs:9:25
[INFO] [stdout]   |
[INFO] [stdout] 9 | fn render(frame: Frame, app: &App, area: Rect) {}
[INFO] [stdout]   |                         ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `area`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/connection.rs:9:36
[INFO] [stdout]   |
[INFO] [stdout] 9 | fn render(frame: Frame, app: &App, area: Rect) {}
[INFO] [stdout]   |                                    ^^^^ help: if this is intentional, prefix it with an underscore: `_area`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/logs.rs:5:34
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub fn render(frame: &mut Frame, app: &App, area: Rect) {
[INFO] [stdout]   |                                  ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `header`
[INFO] [stdout]   --> crates/vpn-tui/src/screens/pdetails.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 |     let [header, body, description] = Layout::vertical([
[INFO] [stdout]    |          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_header`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `description`
[INFO] [stdout]   --> crates/vpn-tui/src/screens/pdetails.rs:10:24
[INFO] [stdout]    |
[INFO] [stdout] 10 |     let [header, body, description] = Layout::vertical([
[INFO] [stdout]    |                        ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_description`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:324:37
[INFO] [stdout]     |
[INFO] [stdout] 324 | fn render_footer(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {
[INFO] [stdout]     |                                     ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `backend`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:340:5
[INFO] [stdout]     |
[INFO] [stdout] 340 |     backend: &tokio::sync::watch::Ref<'_, BackendState>,
[INFO] [stdout]     |     ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_backend`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `final_output`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:361:9
[INFO] [stdout]     |
[INFO] [stdout] 361 |     let final_output =
[INFO] [stdout]     |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_final_output`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:376:5
[INFO] [stdout]     |
[INFO] [stdout] 376 |     app: &App,
[INFO] [stdout]     |     ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:414:41
[INFO] [stdout]     |
[INFO] [stdout] 414 | fn render_exit_popup(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {
[INFO] [stdout]     |                                         ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:430:47
[INFO] [stdout]     |
[INFO] [stdout] 430 | fn render_confirmdel_popup(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {
[INFO] [stdout]     |                                               ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:478:25
[INFO] [stdout]     |
[INFO] [stdout] 478 | fn render_popup_overlay(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {}
[INFO] [stdout]     |                         ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:478:44
[INFO] [stdout]     |
[INFO] [stdout] 478 | fn render_popup_overlay(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {}
[INFO] [stdout]     |                                            ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `area`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:478:55
[INFO] [stdout]     |
[INFO] [stdout] 478 | fn render_popup_overlay(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {}
[INFO] [stdout]     |                                                       ^^^^ help: if this is intentional, prefix it with an underscore: `_area`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:480:9
[INFO] [stdout]     |
[INFO] [stdout] 480 |     let mut popup_area = centered_popup(area, 50, 40);
[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: `app`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:479:42
[INFO] [stdout]     |
[INFO] [stdout] 479 | fn render_error_popup(frame: &mut Frame, app: &App, area: Rect, message: &str) {
[INFO] [stdout]     |                                          ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render` is never used
[INFO] [stdout]  --> crates/vpn-tui/src/screens/connection.rs:9:4
[INFO] [stdout]   |
[INFO] [stdout] 9 | fn render(frame: Frame, app: &App, area: Rect) {}
[INFO] [stdout]   |    ^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_footer` is never used
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:324:4
[INFO] [stdout]     |
[INFO] [stdout] 324 | fn render_footer(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_status_bar_old` is never used
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:337:4
[INFO] [stdout]     |
[INFO] [stdout] 337 | fn render_status_bar_old(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_popup_overlay` is never used
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:478:4
[INFO] [stdout]     |
[INFO] [stdout] 478 | fn render_popup_overlay(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {}
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused implementer of `Future` that must be used
[INFO] [stdout]    --> crates/vpn-tui/src/backend/backend.rs:199:25
[INFO] [stdout]     |
[INFO] [stdout] 199 | /                         self.handle_error(vpn_types::error::VpnError::DnsFailed(
[INFO] [stdout] 200 | |                             "Invalid host".into(),
[INFO] [stdout] 201 | |                         ));
[INFO] [stdout]     | |__________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: futures do nothing unless you `.await` or poll them
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> crates/vpn-tui/src/backend/backend.rs:390:9
[INFO] [stdout]     |
[INFO] [stdout] 390 | /         self.event_tx.send(BackendEvent::ConnectionStateChanged(
[INFO] [stdout] 391 | |             ConnectionState::Connecting,
[INFO] [stdout] 392 | |         ));
[INFO] [stdout]     | |__________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 390 |         let _ = self.event_tx.send(BackendEvent::ConnectionStateChanged(
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> crates/vpn-tui/src/backend/backend.rs:393:9
[INFO] [stdout]     |
[INFO] [stdout] 393 | /         self.event_tx.send(BackendEvent::LogAdded {
[INFO] [stdout] 394 | |             level: LogLevel::Info,
[INFO] [stdout] 395 | |             message: "Reconnecting...".into(),
[INFO] [stdout] 396 | |             source: "Backend".into(),
[INFO] [stdout] 397 | |         });
[INFO] [stdout]     | |__________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 393 |         let _ = self.event_tx.send(BackendEvent::LogAdded {
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `Groups` should have a snake case name
[INFO] [stdout]   --> crates/vpn-tui/src/screens/pdetails.rs:23:9
[INFO] [stdout]    |
[INFO] [stdout] 23 |     let Groups = vec![
[INFO] [stdout]    |         ^^^^^^ help: convert the identifier to snake case: `groups`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/connection.rs:9:11
[INFO] [stdout]   |
[INFO] [stdout] 9 | fn render(frame: Frame, app: &App, area: Rect) {}
[INFO] [stdout]   |           ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/connection.rs:9:25
[INFO] [stdout]   |
[INFO] [stdout] 9 | fn render(frame: Frame, app: &App, area: Rect) {}
[INFO] [stdout]   |                         ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `area`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/connection.rs:9:36
[INFO] [stdout]   |
[INFO] [stdout] 9 | fn render(frame: Frame, app: &App, area: Rect) {}
[INFO] [stdout]   |                                    ^^^^ help: if this is intentional, prefix it with an underscore: `_area`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/logs.rs:5:34
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub fn render(frame: &mut Frame, app: &App, area: Rect) {
[INFO] [stdout]   |                                  ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `header`
[INFO] [stdout]   --> crates/vpn-tui/src/screens/pdetails.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 |     let [header, body, description] = Layout::vertical([
[INFO] [stdout]    |          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_header`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `description`
[INFO] [stdout]   --> crates/vpn-tui/src/screens/pdetails.rs:10:24
[INFO] [stdout]    |
[INFO] [stdout] 10 |     let [header, body, description] = Layout::vertical([
[INFO] [stdout]    |                        ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_description`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:324:37
[INFO] [stdout]     |
[INFO] [stdout] 324 | fn render_footer(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {
[INFO] [stdout]     |                                     ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `backend`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:340:5
[INFO] [stdout]     |
[INFO] [stdout] 340 |     backend: &tokio::sync::watch::Ref<'_, BackendState>,
[INFO] [stdout]     |     ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_backend`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `final_output`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:361:9
[INFO] [stdout]     |
[INFO] [stdout] 361 |     let final_output =
[INFO] [stdout]     |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_final_output`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:376:5
[INFO] [stdout]     |
[INFO] [stdout] 376 |     app: &App,
[INFO] [stdout]     |     ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:414:41
[INFO] [stdout]     |
[INFO] [stdout] 414 | fn render_exit_popup(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {
[INFO] [stdout]     |                                         ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:430:47
[INFO] [stdout]     |
[INFO] [stdout] 430 | fn render_confirmdel_popup(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {
[INFO] [stdout]     |                                               ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:478:25
[INFO] [stdout]     |
[INFO] [stdout] 478 | fn render_popup_overlay(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {}
[INFO] [stdout]     |                         ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:478:44
[INFO] [stdout]     |
[INFO] [stdout] 478 | fn render_popup_overlay(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {}
[INFO] [stdout]     |                                            ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `area`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:478:55
[INFO] [stdout]     |
[INFO] [stdout] 478 | fn render_popup_overlay(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {}
[INFO] [stdout]     |                                                       ^^^^ help: if this is intentional, prefix it with an underscore: `_area`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:480:9
[INFO] [stdout]     |
[INFO] [stdout] 480 |     let mut popup_area = centered_popup(area, 50, 40);
[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: `app`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:479:42
[INFO] [stdout]     |
[INFO] [stdout] 479 | fn render_error_popup(frame: &mut Frame, app: &App, area: Rect, message: &str) {
[INFO] [stdout]     |                                          ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `plan`
[INFO] [stdout]    --> crates/vpn-daemon/src/daemon/runtime.rs:109:24
[INFO] [stdout]     |
[INFO] [stdout] 109 |     pub async fn start(plan: RuntimePlan) -> anyhow::Result<(RuntimeHandle, RuntimeTask)> {
[INFO] [stdout]     |                        ^^^^ help: if this is intentional, prefix it with an underscore: `_plan`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tun_to_transport_tx`
[INFO] [stdout]    --> crates/vpn-daemon/src/daemon/runtime.rs:111:14
[INFO] [stdout]     |
[INFO] [stdout] 111 |         let (tun_to_transport_tx, tun_to_transport_rx) = tokio::sync::mpsc::channel::<Packet>(256);
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tun_to_transport_tx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tun_to_transport_rx`
[INFO] [stdout]    --> crates/vpn-daemon/src/daemon/runtime.rs:111:35
[INFO] [stdout]     |
[INFO] [stdout] 111 |         let (tun_to_transport_tx, tun_to_transport_rx) = tokio::sync::mpsc::channel::<Packet>(256);
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tun_to_transport_rx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `tun_name` is never read
[INFO] [stdout]    --> crates/vpn-tui/src/backend/backend.rs:102:9
[INFO] [stdout]     |
[INFO] [stdout]  99 | pub struct BackendConfig {
[INFO] [stdout]     |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub tun_name: String,
[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 `server_addr` is never read
[INFO] [stdout]    --> crates/vpn-tui/src/backend/backend.rs:500:9
[INFO] [stdout]     |
[INFO] [stdout] 495 | pub struct ClientContext {
[INFO] [stdout]     |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 500 |     pub server_addr: std::net::SocketAddr,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render` is never used
[INFO] [stdout]  --> crates/vpn-tui/src/screens/connection.rs:9:4
[INFO] [stdout]   |
[INFO] [stdout] 9 | fn render(frame: Frame, app: &App, area: Rect) {}
[INFO] [stdout]   |    ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_simple_popup` is never used
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:209:8
[INFO] [stdout]     |
[INFO] [stdout] 209 | pub fn render_simple_popup(frame: &mut Frame, area: Rect, title: &str, message: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_confirm_popup` is never used
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:229:8
[INFO] [stdout]     |
[INFO] [stdout] 229 | pub fn render_confirm_popup(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_footer` is never used
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:324:4
[INFO] [stdout]     |
[INFO] [stdout] 324 | fn render_footer(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_status_bar_old` is never used
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:337:4
[INFO] [stdout]     |
[INFO] [stdout] 337 | fn render_status_bar_old(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_popup_overlay` is never used
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:478:4
[INFO] [stdout]     |
[INFO] [stdout] 478 | fn render_popup_overlay(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {}
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused implementer of `futures::Future` that must be used
[INFO] [stdout]    --> crates/vpn-tui/src/backend/backend.rs:199:25
[INFO] [stdout]     |
[INFO] [stdout] 199 | /                         self.handle_error(vpn_types::error::VpnError::DnsFailed(
[INFO] [stdout] 200 | |                             "Invalid host".into(),
[INFO] [stdout] 201 | |                         ));
[INFO] [stdout]     | |__________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: futures do nothing unless you `.await` or poll them
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> crates/vpn-tui/src/backend/backend.rs:390:9
[INFO] [stdout]     |
[INFO] [stdout] 390 | /         self.event_tx.send(BackendEvent::ConnectionStateChanged(
[INFO] [stdout] 391 | |             ConnectionState::Connecting,
[INFO] [stdout] 392 | |         ));
[INFO] [stdout]     | |__________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 390 |         let _ = self.event_tx.send(BackendEvent::ConnectionStateChanged(
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> crates/vpn-tui/src/backend/backend.rs:393:9
[INFO] [stdout]     |
[INFO] [stdout] 393 | /         self.event_tx.send(BackendEvent::LogAdded {
[INFO] [stdout] 394 | |             level: LogLevel::Info,
[INFO] [stdout] 395 | |             message: "Reconnecting...".into(),
[INFO] [stdout] 396 | |             source: "Backend".into(),
[INFO] [stdout] 397 | |         });
[INFO] [stdout]     | |__________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 393 |         let _ = self.event_tx.send(BackendEvent::LogAdded {
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `Groups` should have a snake case name
[INFO] [stdout]   --> crates/vpn-tui/src/screens/pdetails.rs:23:9
[INFO] [stdout]    |
[INFO] [stdout] 23 |     let Groups = vec![
[INFO] [stdout]    |         ^^^^^^ help: convert the identifier to snake case: `groups`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `plan`
[INFO] [stdout]    --> crates/vpn-daemon/src/daemon/runtime.rs:109:24
[INFO] [stdout]     |
[INFO] [stdout] 109 |     pub async fn start(plan: RuntimePlan) -> anyhow::Result<(RuntimeHandle, RuntimeTask)> {
[INFO] [stdout]     |                        ^^^^ help: if this is intentional, prefix it with an underscore: `_plan`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tun_to_transport_tx`
[INFO] [stdout]    --> crates/vpn-daemon/src/daemon/runtime.rs:111:14
[INFO] [stdout]     |
[INFO] [stdout] 111 |         let (tun_to_transport_tx, tun_to_transport_rx) = tokio::sync::mpsc::channel::<Packet>(256);
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tun_to_transport_tx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tun_to_transport_rx`
[INFO] [stdout]    --> crates/vpn-daemon/src/daemon/runtime.rs:111:35
[INFO] [stdout]     |
[INFO] [stdout] 111 |         let (tun_to_transport_tx, tun_to_transport_rx) = tokio::sync::mpsc::channel::<Packet>(256);
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tun_to_transport_rx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ip`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:344:9
[INFO] [stdout]     |
[INFO] [stdout] 344 |     let ip = state
[INFO] [stdout]     |         ^^ help: if this is intentional, prefix it with an underscore: `_ip`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `peers`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:364:5
[INFO] [stdout]     |
[INFO] [stdout] 364 |     peers: Arc<TokioMutex<peers_table>>,
[INFO] [stdout]     |     ^^^^^ help: if this is intentional, prefix it with an underscore: `_peers`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ip`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:400:9
[INFO] [stdout]     |
[INFO] [stdout] 400 |     let ip = state
[INFO] [stdout]     |         ^^ help: if this is intentional, prefix it with an underscore: `_ip`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ip`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:344:9
[INFO] [stdout]     |
[INFO] [stdout] 344 |     let ip = state
[INFO] [stdout]     |         ^^ help: if this is intentional, prefix it with an underscore: `_ip`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `peers`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:364:5
[INFO] [stdout]     |
[INFO] [stdout] 364 |     peers: Arc<TokioMutex<peers_table>>,
[INFO] [stdout]     |     ^^^^^ help: if this is intentional, prefix it with an underscore: `_peers`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ip`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:400:9
[INFO] [stdout]     |
[INFO] [stdout] 400 |     let ip = state
[INFO] [stdout]     |         ^^ help: if this is intentional, prefix it with an underscore: `_ip`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `peers`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:646:5
[INFO] [stdout]     |
[INFO] [stdout] 646 |     mut peers: Arc<TokioMutex<peers_table>>,
[INFO] [stdout]     |     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_peers`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `allocator`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:647:5
[INFO] [stdout]     |
[INFO] [stdout] 647 |     allocator: Arc<tokio::sync::Mutex<IpAllocator>>,
[INFO] [stdout]     |     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_allocator`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `peers`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:646:5
[INFO] [stdout]     |
[INFO] [stdout] 646 |     mut peers: Arc<TokioMutex<peers_table>>,
[INFO] [stdout]     |     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_peers`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `allocator`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:647:5
[INFO] [stdout]     |
[INFO] [stdout] 647 |     allocator: Arc<tokio::sync::Mutex<IpAllocator>>,
[INFO] [stdout]     |     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_allocator`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/connection.rs:9:11
[INFO] [stdout]   |
[INFO] [stdout] 9 | fn render(frame: Frame, app: &App, area: Rect) {}
[INFO] [stdout]   |           ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/connection.rs:9:25
[INFO] [stdout]   |
[INFO] [stdout] 9 | fn render(frame: Frame, app: &App, area: Rect) {}
[INFO] [stdout]   |                         ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `area`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/connection.rs:9:36
[INFO] [stdout]   |
[INFO] [stdout] 9 | fn render(frame: Frame, app: &App, area: Rect) {}
[INFO] [stdout]   |                                    ^^^^ help: if this is intentional, prefix it with an underscore: `_area`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]  --> crates/vpn-tui/src/screens/logs.rs:5:34
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub fn render(frame: &mut Frame, app: &App, area: Rect) {
[INFO] [stdout]   |                                  ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `header`
[INFO] [stdout]   --> crates/vpn-tui/src/screens/pdetails.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 |     let [header, body, description] = Layout::vertical([
[INFO] [stdout]    |          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_header`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `description`
[INFO] [stdout]   --> crates/vpn-tui/src/screens/pdetails.rs:10:24
[INFO] [stdout]    |
[INFO] [stdout] 10 |     let [header, body, description] = Layout::vertical([
[INFO] [stdout]    |                        ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_description`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `config`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/singbox.rs:186:13
[INFO] [stdout]     |
[INFO] [stdout] 186 |         let config = SingBoxConfig {
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_config`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `config`
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/singbox.rs:186:13
[INFO] [stdout]     |
[INFO] [stdout] 186 |         let config = SingBoxConfig {
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_config`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:324:37
[INFO] [stdout]     |
[INFO] [stdout] 324 | fn render_footer(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {
[INFO] [stdout]     |                                     ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `backend`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:340:5
[INFO] [stdout]     |
[INFO] [stdout] 340 |     backend: &tokio::sync::watch::Ref<'_, BackendState>,
[INFO] [stdout]     |     ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_backend`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `final_output`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:361:9
[INFO] [stdout]     |
[INFO] [stdout] 361 |     let final_output =
[INFO] [stdout]     |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_final_output`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:376:5
[INFO] [stdout]     |
[INFO] [stdout] 376 |     app: &App,
[INFO] [stdout]     |     ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:414:41
[INFO] [stdout]     |
[INFO] [stdout] 414 | fn render_exit_popup(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {
[INFO] [stdout]     |                                         ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:430:47
[INFO] [stdout]     |
[INFO] [stdout] 430 | fn render_confirmdel_popup(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {
[INFO] [stdout]     |                                               ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:478:25
[INFO] [stdout]     |
[INFO] [stdout] 478 | fn render_popup_overlay(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {}
[INFO] [stdout]     |                         ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:478:44
[INFO] [stdout]     |
[INFO] [stdout] 478 | fn render_popup_overlay(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {}
[INFO] [stdout]     |                                            ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `area`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:478:55
[INFO] [stdout]     |
[INFO] [stdout] 478 | fn render_popup_overlay(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {}
[INFO] [stdout]     |                                                       ^^^^ help: if this is intentional, prefix it with an underscore: `_area`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:480:9
[INFO] [stdout]     |
[INFO] [stdout] 480 |     let mut popup_area = centered_popup(area, 50, 40);
[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: `app`
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:479:42
[INFO] [stdout]     |
[INFO] [stdout] 479 | fn render_error_popup(frame: &mut Frame, app: &App, area: Rect, message: &str) {
[INFO] [stdout]     |                                          ^^^ help: if this is intentional, prefix it with an underscore: `_app`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `server_token`
[INFO] [stdout]   --> crates/vpn-daemon/src/main.rs:25:9
[INFO] [stdout]    |
[INFO] [stdout] 25 |     let server_token = Token::new_with("8d29950e-2fee-48df-b9d2-6475e929f01e");
[INFO] [stdout]    |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_server_token`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tun_writer_handle`
[INFO] [stdout]   --> crates/vpn-daemon/src/main.rs:54:9
[INFO] [stdout]    |
[INFO] [stdout] 54 |     let tun_writer_handle = tokio::spawn(tun_write_all(rx_to_tun, tun_writer, cancel_token_writer));
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tun_writer_handle`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `server_token`
[INFO] [stdout]   --> crates/vpn-daemon/src/main.rs:25:9
[INFO] [stdout]    |
[INFO] [stdout] 25 |     let server_token = Token::new_with("8d29950e-2fee-48df-b9d2-6475e929f01e");
[INFO] [stdout]    |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_server_token`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tun_writer_handle`
[INFO] [stdout]   --> crates/vpn-daemon/src/main.rs:54:9
[INFO] [stdout]    |
[INFO] [stdout] 54 |     let tun_writer_handle = tokio::spawn(tun_write_all(rx_to_tun, tun_writer, cancel_token_writer));
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tun_writer_handle`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `errors` is never read
[INFO] [stdout]   --> crates/vpn-daemon/src/daemon/runtime.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct RuntimeStatistics {
[INFO] [stdout]    |            ----------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 27 |     errors: AtomicU64,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> crates/vpn-daemon/src/daemon/runtime.rs:102:8
[INFO] [stdout]     |
[INFO] [stdout] 101 | impl RuntimePlan {
[INFO] [stdout]     | ---------------- associated function in this implementation
[INFO] [stdout] 102 |     fn new(tun_dec_name: String) -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `routes` is never read
[INFO] [stdout]  --> crates/vpn-daemon/src/linux/routing.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub struct ClientNetworkConfig {
[INFO] [stdout]   |            ------------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 7 |     routes: Vec<RouteConfig>,
[INFO] [stdout]   |     ^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `ClientNetworkConfig` 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: function `resolve_addr` is never used
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/transport.rs:252:10
[INFO] [stdout]     |
[INFO] [stdout] 252 | async fn resolve_addr(
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> crates/vpn-daemon/src/main.rs:59:9
[INFO] [stdout]    |
[INFO] [stdout] 59 |         run_tcp_server(tcp_addr, state, tx_clone, traffic_tcp).await;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]    = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 59 |         let _ = run_tcp_server(tcp_addr, state, tx_clone, traffic_tcp).await;
[INFO] [stdout]    |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `errors` is never read
[INFO] [stdout]   --> crates/vpn-daemon/src/daemon/runtime.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct RuntimeStatistics {
[INFO] [stdout]    |            ----------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 27 |     errors: AtomicU64,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[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]   --> crates/vpn-daemon/src/transport/server.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     async fn recv_frame(&mut self, buf: &mut [u8]) -> std::io::Result<usize>;
[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] 32 -     async fn recv_frame(&mut self, buf: &mut [u8]) -> std::io::Result<usize>;
[INFO] [stdout] 32 +     fn recv_frame(&mut self, buf: &mut [u8]) -> impl std::future::Future<Output = std::io::Result<usize>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> crates/vpn-daemon/src/daemon/runtime.rs:102:8
[INFO] [stdout]     |
[INFO] [stdout] 101 | impl RuntimePlan {
[INFO] [stdout]     | ---------------- associated function in this implementation
[INFO] [stdout] 102 |     fn new(tun_dec_name: String) -> Self {
[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]   --> crates/vpn-daemon/src/transport/server.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     async fn send_frame(&mut self, buf: &[u8]) -> std::io::Result<usize>;
[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] 33 -     async fn send_frame(&mut self, buf: &[u8]) -> std::io::Result<usize>;
[INFO] [stdout] 33 +     fn send_frame(&mut self, buf: &[u8]) -> impl std::future::Future<Output = std::io::Result<usize>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `routes` is never read
[INFO] [stdout]  --> crates/vpn-daemon/src/linux/routing.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub struct ClientNetworkConfig {
[INFO] [stdout]   |            ------------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 7 |     routes: Vec<RouteConfig>,
[INFO] [stdout]   |     ^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `ClientNetworkConfig` 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: function `require_root` is never used
[INFO] [stdout]  --> crates/vpn-daemon/src/tests/tun_read.rs:7:4
[INFO] [stdout]   |
[INFO] [stdout] 7 | fn require_root() {
[INFO] [stdout]   |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_ok` is never used
[INFO] [stdout]   --> crates/vpn-daemon/src/tests/tun_read.rs:15:10
[INFO] [stdout]    |
[INFO] [stdout] 15 | async fn run_ok(program: &str, args: &[&str]) -> Result<()> {
[INFO] [stdout]    |          ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `resolve_addr` is never used
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/transport.rs:252:10
[INFO] [stdout]     |
[INFO] [stdout] 252 | async fn resolve_addr(
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> crates/vpn-daemon/src/main.rs:59:9
[INFO] [stdout]    |
[INFO] [stdout] 59 |         run_tcp_server(tcp_addr, state, tx_clone, traffic_tcp).await;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]    = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 59 |         let _ = run_tcp_server(tcp_addr, state, tx_clone, traffic_tcp).await;
[INFO] [stdout]    |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:371:5
[INFO] [stdout]     |
[INFO] [stdout] 371 | /     stream
[INFO] [stdout] 372 | |         .read_exact(len_buf.as_mut_slice())
[INFO] [stdout] 373 | |         .await
[INFO] [stdout] 374 | |         .map_err(|e| VpnError::Io(e));
[INFO] [stdout]     | |_____________________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 371 |     let _ = stream
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:381:5
[INFO] [stdout]     |
[INFO] [stdout] 381 | /     stream
[INFO] [stdout] 382 | |         .read_exact(&mut encrypted)
[INFO] [stdout] 383 | |         .await
[INFO] [stdout] 384 | |         .map_err(|e| VpnError::Io(e));
[INFO] [stdout]     | |_____________________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 381 |     let _ = stream
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:434:5
[INFO] [stdout]     |
[INFO] [stdout] 434 |     getrandom::fill(&mut key);
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 434 |     let _ = getrandom::fill(&mut key);
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:542:5
[INFO] [stdout]     |
[INFO] [stdout] 542 |     fill(&mut nonce_bytes);
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 542 |     let _ = fill(&mut nonce_bytes);
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused implementer of `std::future::Future` that must be used
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:856:25
[INFO] [stdout]     |
[INFO] [stdout] 856 |                         guard.write_packet(packet.as_mut_slice());
[INFO] [stdout]     |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: futures do nothing unless you `.await` or poll them
[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]   --> crates/vpn-daemon/src/transport/server.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     async fn recv_frame(&mut self, buf: &mut [u8]) -> std::io::Result<usize>;
[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] 32 -     async fn recv_frame(&mut self, buf: &mut [u8]) -> std::io::Result<usize>;
[INFO] [stdout] 32 +     fn recv_frame(&mut self, buf: &mut [u8]) -> impl std::future::Future<Output = std::io::Result<usize>> + 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]   --> crates/vpn-daemon/src/transport/server.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     async fn send_frame(&mut self, buf: &[u8]) -> std::io::Result<usize>;
[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] 33 -     async fn send_frame(&mut self, buf: &[u8]) -> std::io::Result<usize>;
[INFO] [stdout] 33 +     fn send_frame(&mut self, buf: &[u8]) -> impl std::future::Future<Output = std::io::Result<usize>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `tun_name` is never read
[INFO] [stdout]    --> crates/vpn-tui/src/backend/backend.rs:102:9
[INFO] [stdout]     |
[INFO] [stdout]  99 | pub struct BackendConfig {
[INFO] [stdout]     |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub tun_name: String,
[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 `server_addr` is never read
[INFO] [stdout]    --> crates/vpn-tui/src/backend/backend.rs:500:9
[INFO] [stdout]     |
[INFO] [stdout] 495 | pub struct ClientContext {
[INFO] [stdout]     |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 500 |     pub server_addr: std::net::SocketAddr,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render` is never used
[INFO] [stdout]  --> crates/vpn-tui/src/screens/connection.rs:9:4
[INFO] [stdout]   |
[INFO] [stdout] 9 | fn render(frame: Frame, app: &App, area: Rect) {}
[INFO] [stdout]   |    ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_simple_popup` is never used
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:209:8
[INFO] [stdout]     |
[INFO] [stdout] 209 | pub fn render_simple_popup(frame: &mut Frame, area: Rect, title: &str, message: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_confirm_popup` is never used
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:229:8
[INFO] [stdout]     |
[INFO] [stdout] 229 | pub fn render_confirm_popup(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_footer` is never used
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:324:4
[INFO] [stdout]     |
[INFO] [stdout] 324 | fn render_footer(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_status_bar_old` is never used
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:337:4
[INFO] [stdout]     |
[INFO] [stdout] 337 | fn render_status_bar_old(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_popup_overlay` is never used
[INFO] [stdout]    --> crates/vpn-tui/src/ui.rs:478:4
[INFO] [stdout]     |
[INFO] [stdout] 478 | fn render_popup_overlay(frame: &mut Frame, app: &App, area: ratatui::layout::Rect) {}
[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]   --> crates/vpn-daemon/src/transport/transport.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     async fn send_frame(&mut self, buf: &mut [u8]) -> Result<usize, Self::Error>;
[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] 26 -     async fn send_frame(&mut self, buf: &mut [u8]) -> Result<usize, Self::Error>;
[INFO] [stdout] 26 +     fn send_frame(&mut self, buf: &mut [u8]) -> impl std::future::Future<Output = Result<usize, Self::Error>> + 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]   --> crates/vpn-daemon/src/transport/transport.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     async fn recv_frame(&mut self, buf: &mut [u8]) -> Result<usize, Self::Error>;
[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] 27 -     async fn recv_frame(&mut self, buf: &mut [u8]) -> Result<usize, Self::Error>;
[INFO] [stdout] 27 +     fn recv_frame(&mut self, buf: &mut [u8]) -> impl std::future::Future<Output = Result<usize, Self::Error>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:371:5
[INFO] [stdout]     |
[INFO] [stdout] 371 | /     stream
[INFO] [stdout] 372 | |         .read_exact(len_buf.as_mut_slice())
[INFO] [stdout] 373 | |         .await
[INFO] [stdout] 374 | |         .map_err(|e| VpnError::Io(e));
[INFO] [stdout]     | |_____________________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 371 |     let _ = stream
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:381:5
[INFO] [stdout]     |
[INFO] [stdout] 381 | /     stream
[INFO] [stdout] 382 | |         .read_exact(&mut encrypted)
[INFO] [stdout] 383 | |         .await
[INFO] [stdout] 384 | |         .map_err(|e| VpnError::Io(e));
[INFO] [stdout]     | |_____________________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 381 |     let _ = stream
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:434:5
[INFO] [stdout]     |
[INFO] [stdout] 434 |     getrandom::fill(&mut key);
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 434 |     let _ = getrandom::fill(&mut key);
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:542:5
[INFO] [stdout]     |
[INFO] [stdout] 542 |     fill(&mut nonce_bytes);
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 542 |     let _ = fill(&mut nonce_bytes);
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused implementer of `std::future::Future` that must be used
[INFO] [stdout]    --> crates/vpn-daemon/src/transport/server.rs:856:25
[INFO] [stdout]     |
[INFO] [stdout] 856 |                         guard.write_packet(packet.as_mut_slice());
[INFO] [stdout]     |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: futures do nothing unless you `.await` or poll them
[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]   --> crates/vpn-daemon/src/transport/transport.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     async fn send_frame(&mut self, buf: &mut [u8]) -> Result<usize, Self::Error>;
[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] 26 -     async fn send_frame(&mut self, buf: &mut [u8]) -> Result<usize, Self::Error>;
[INFO] [stdout] 26 +     fn send_frame(&mut self, buf: &mut [u8]) -> impl std::future::Future<Output = Result<usize, Self::Error>> + 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]   --> crates/vpn-daemon/src/transport/transport.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     async fn recv_frame(&mut self, buf: &mut [u8]) -> Result<usize, Self::Error>;
[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] 27 -     async fn recv_frame(&mut self, buf: &mut [u8]) -> Result<usize, Self::Error>;
[INFO] [stdout] 27 +     fn recv_frame(&mut self, buf: &mut [u8]) -> impl std::future::Future<Output = Result<usize, Self::Error>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused implementer of `futures::Future` that must be used
[INFO] [stdout]    --> crates/vpn-tui/src/backend/backend.rs:199:25
[INFO] [stdout]     |
[INFO] [stdout] 199 | /                         self.handle_error(vpn_types::error::VpnError::DnsFailed(
[INFO] [stdout] 200 | |                             "Invalid host".into(),
[INFO] [stdout] 201 | |                         ));
[INFO] [stdout]     | |__________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: futures do nothing unless you `.await` or poll them
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> crates/vpn-tui/src/backend/backend.rs:390:9
[INFO] [stdout]     |
[INFO] [stdout] 390 | /         self.event_tx.send(BackendEvent::ConnectionStateChanged(
[INFO] [stdout] 391 | |             ConnectionState::Connecting,
[INFO] [stdout] 392 | |         ));
[INFO] [stdout]     | |__________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 390 |         let _ = self.event_tx.send(BackendEvent::ConnectionStateChanged(
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> crates/vpn-tui/src/backend/backend.rs:393:9
[INFO] [stdout]     |
[INFO] [stdout] 393 | /         self.event_tx.send(BackendEvent::LogAdded {
[INFO] [stdout] 394 | |             level: LogLevel::Info,
[INFO] [stdout] 395 | |             message: "Reconnecting...".into(),
[INFO] [stdout] 396 | |             source: "Backend".into(),
[INFO] [stdout] 397 | |         });
[INFO] [stdout]     | |__________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 393 |         let _ = self.event_tx.send(BackendEvent::LogAdded {
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `Groups` should have a snake case name
[INFO] [stdout]   --> crates/vpn-tui/src/screens/pdetails.rs:23:9
[INFO] [stdout]    |
[INFO] [stdout] 23 |     let Groups = vec![
[INFO] [stdout]    |         ^^^^^^ help: convert the identifier to snake case: `groups`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 59.62s
[INFO] running `Command { std: "docker" "inspect" "2fc50a57bdc16a473514ff6949ad849754ba4d5fdb019b73459ab58bbdf963dd", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "2fc50a57bdc16a473514ff6949ad849754ba4d5fdb019b73459ab58bbdf963dd", kill_on_drop: false }`
[INFO] [stdout] 2fc50a57bdc16a473514ff6949ad849754ba4d5fdb019b73459ab58bbdf963dd
