[INFO] cloning repository https://github.com/redgreat/proxywong
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/redgreat/proxywong" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fredgreat%2Fproxywong", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fredgreat%2Fproxywong'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 72dc5cebdbfedf504d0d480724c74f9bfe635915
[INFO] checking redgreat/proxywong against 5c543b0b8c73c7b72bc8284ced4fb22ead15734d for pr-160186
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fredgreat%2Fproxywong" "/workspace/builds/worker-5-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/redgreat/proxywong
[INFO] finished tweaking git repo https://github.com/redgreat/proxywong
[INFO] tweaked toml for git repo https://github.com/redgreat/proxywong written to /workspace/builds/worker-5-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/redgreat/proxywong on toolchain 5c543b0b8c73c7b72bc8284ced4fb22ead15734d
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+5c543b0b8c73c7b72bc8284ced4fb22ead15734d" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/redgreat/proxywong 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" "+5c543b0b8c73c7b72bc8284ced4fb22ead15734d" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr] warning: unused workspace dependency `clap_lex`
[INFO] [stderr]   --> Cargo.toml:10:1
[INFO] [stderr]    |
[INFO] [stderr] 10 | clap_lex = "=0.6.0"
[INFO] [stderr]    | ^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::unused_workspace_dependencies` is set to `warn` by default
[INFO] [stderr] help: consider removing the workspace dependency `clap_lex`
[INFO] [stderr] warning: unused workspace dependency `getrandom`
[INFO] [stderr]   --> Cargo.toml:13:1
[INFO] [stderr]    |
[INFO] [stderr] 13 | getrandom = "=0.2.12"
[INFO] [stderr]    | ^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr] help: consider removing the workspace dependency `getrandom`
[INFO] [stderr] warning: unused workspace dependency `hashbrown`
[INFO] [stderr]   --> Cargo.toml:14:1
[INFO] [stderr]    |
[INFO] [stderr] 14 | hashbrown = "=0.14.5"
[INFO] [stderr]    | ^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr] help: consider removing the workspace dependency `hashbrown`
[INFO] [stderr] warning: unused field `authors` in `workspace.package`
[INFO] [stderr]   --> Cargo.toml:53:1
[INFO] [stderr]    |
[INFO] [stderr] 53 | authors = ["proxywong"]
[INFO] [stderr]    | ^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::unused_workspace_package_fields` is set to `warn` by default
[INFO] [stderr] help: consider removing the field `workspace.package.authors`
[INFO] [stderr] warning: unused field `license` in `workspace.package`
[INFO] [stderr]   --> Cargo.toml:55:1
[INFO] [stderr]    |
[INFO] [stderr] 55 | license = "MIT"
[INFO] [stderr]    | ^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr] help: consider removing the field `workspace.package.license`
[INFO] [stderr] warning: workspace (manifest) generated 5 warnings
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded zerovec-derive v0.11.5
[INFO] [stderr]   Downloaded zerovec v0.11.7
[INFO] [stderr]   Downloaded tokio-rustls v0.25.0
[INFO] [stderr]   Downloaded icu_provider v2.3.0
[INFO] [stderr]   Downloaded clap_lex v0.6.0
[INFO] [stderr]   Downloaded clap_derive v4.4.7
[INFO] [stderr]   Downloaded clap v4.4.18
[INFO] [stderr]   Downloaded clap_builder v4.4.18
[INFO] [stderr]   Downloaded rustls v0.22.4
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,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" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:77db811e55d90add9212f6832c23229e3de5f1c1f9905e8cb07319ea15df73ac" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 9dd50fcaa47db7f9260313474768c663482a8ae207f6688ff43691756348d8aa
[INFO] running `Command { std: "docker" "start" "9dd50fcaa47db7f9260313474768c663482a8ae207f6688ff43691756348d8aa", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "9dd50fcaa47db7f9260313474768c663482a8ae207f6688ff43691756348d8aa", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "9dd50fcaa47db7f9260313474768c663482a8ae207f6688ff43691756348d8aa" "/opt/rustwide/cargo-home/bin/cargo" "+5c543b0b8c73c7b72bc8284ced4fb22ead15734d" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "9dd50fcaa47db7f9260313474768c663482a8ae207f6688ff43691756348d8aa", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-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" "-w" "/opt/rustwide/workdir" "--user" "0:0" "9dd50fcaa47db7f9260313474768c663482a8ae207f6688ff43691756348d8aa" "/opt/rustwide/cargo-home/bin/cargo" "+5c543b0b8c73c7b72bc8284ced4fb22ead15734d" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr] warning: unused workspace dependency `clap_lex`
[INFO] [stderr]   --> Cargo.toml:10:1
[INFO] [stderr]    |
[INFO] [stderr] 10 | clap_lex = "=0.6.0"
[INFO] [stderr]    | ^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::unused_workspace_dependencies` is set to `warn` by default
[INFO] [stderr] help: consider removing the workspace dependency `clap_lex`
[INFO] [stderr] warning: unused workspace dependency `getrandom`
[INFO] [stderr]   --> Cargo.toml:13:1
[INFO] [stderr]    |
[INFO] [stderr] 13 | getrandom = "=0.2.12"
[INFO] [stderr]    | ^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr] help: consider removing the workspace dependency `getrandom`
[INFO] [stderr] warning: unused workspace dependency `hashbrown`
[INFO] [stderr]   --> Cargo.toml:14:1
[INFO] [stderr]    |
[INFO] [stderr] 14 | hashbrown = "=0.14.5"
[INFO] [stderr]    | ^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr] help: consider removing the workspace dependency `hashbrown`
[INFO] [stderr] warning: unused field `authors` in `workspace.package`
[INFO] [stderr]   --> Cargo.toml:53:1
[INFO] [stderr]    |
[INFO] [stderr] 53 | authors = ["proxywong"]
[INFO] [stderr]    | ^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::unused_workspace_package_fields` is set to `warn` by default
[INFO] [stderr] help: consider removing the field `workspace.package.authors`
[INFO] [stderr] warning: unused field `license` in `workspace.package`
[INFO] [stderr]   --> Cargo.toml:55:1
[INFO] [stderr]    |
[INFO] [stderr] 55 | license = "MIT"
[INFO] [stderr]    | ^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr] help: consider removing the field `workspace.package.license`
[INFO] [stderr] warning: workspace (manifest) generated 5 warnings
[INFO] [stderr]    Compiling libc v0.2.189
[INFO] [stderr]    Compiling proc-macro2 v1.0.107
[INFO] [stderr]     Checking log v0.4.33
[INFO] [stderr]     Checking futures-core v0.3.34
[INFO] [stderr]     Checking futures-sink v0.3.34
[INFO] [stderr]     Checking http v1.5.0
[INFO] [stderr]     Checking writeable v0.6.4
[INFO] [stderr]     Checking litemap v0.8.3
[INFO] [stderr]     Checking futures-task v0.3.34
[INFO] [stderr]     Checking futures-channel v0.3.34
[INFO] [stderr]    Compiling icu_normalizer_data v2.3.0
[INFO] [stderr]    Compiling find-msvc-tools v0.1.11
[INFO] [stderr]    Compiling icu_properties_data v2.3.0
[INFO] [stderr]     Checking futures-io v0.3.34
[INFO] [stderr]     Checking zeroize v1.9.0
[INFO] [stderr]    Compiling zerocopy v0.8.56
[INFO] [stderr]    Compiling serde_json v1.0.151
[INFO] [stderr]    Compiling cc v1.4.3
[INFO] [stderr]     Checking rustls-pki-types v1.15.1
[INFO] [stderr]     Checking anstyle-parse v0.2.7
[INFO] [stderr]    Compiling quote v1.0.47
[INFO] [stderr]     Checking is_terminal_polyfill v1.70.2
[INFO] [stderr]    Compiling syn v3.0.3
[INFO] [stderr]    Compiling syn v2.0.119
[INFO] [stderr]     Checking colorchoice v1.0.5
[INFO] [stderr]     Checking regex-syntax v0.8.11
[INFO] [stderr]     Checking http-body v1.1.0
[INFO] [stderr]     Checking anstyle-query v1.1.5
[INFO] [stderr]     Checking hashbrown v0.14.5
[INFO] [stderr]     Checking parking_lot_core v0.9.12
[INFO] [stderr]     Checking errno v0.3.14
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking signal-hook-registry v1.4.8
[INFO] [stderr]     Checking socket2 v0.6.5
[INFO] [stderr]     Checking mio v1.2.2
[INFO] [stderr]     Checking getrandom v0.2.17
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]     Checking dashmap v5.5.3
[INFO] [stderr]     Checking anstream v0.6.21
[INFO] [stderr]     Checking regex-automata v0.4.18
[INFO] [stderr]     Checking clap_lex v0.6.0
[INFO] [stderr]    Compiling heck v0.4.1
[INFO] [stderr]    Compiling rustversion v1.0.23
[INFO] [stderr]     Checking clap_builder v4.4.18
[INFO] [stderr]     Checking http-body-util v0.1.5
[INFO] [stderr]     Checking tracing-log v0.2.0
[INFO] [stderr]     Checking thread_local v1.1.10
[INFO] [stderr]    Compiling rustls v0.22.4
[INFO] [stderr]     Checking sha1 v0.10.7
[INFO] [stderr]     Checking data-encoding v2.11.1
[INFO] [stderr]     Checking webpki-roots v1.0.9
[INFO] [stderr]     Checking serde_path_to_error v0.1.20
[INFO] [stderr]     Checking bitflags v2.13.1
[INFO] [stderr]     Checking matchit v0.7.3
[INFO] [stderr]     Checking webpki-roots v0.26.11
[INFO] [stderr]     Checking rustls-pemfile v2.2.0
[INFO] [stderr]     Checking matchers v0.2.0
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling zerovec-derive v0.11.5
[INFO] [stderr]    Compiling tokio-macros v2.7.2
[INFO] [stderr]    Compiling displaydoc v0.2.7
[INFO] [stderr]    Compiling serde_derive v1.0.229
[INFO] [stderr]    Compiling futures-macro v0.3.34
[INFO] [stderr]    Compiling zerofrom-derive v0.1.7
[INFO] [stderr]    Compiling yoke-derive v0.8.2
[INFO] [stderr]     Checking tokio v1.53.1
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]     Checking futures-util v0.3.34
[INFO] [stderr]    Compiling async-trait v0.1.92
[INFO] [stderr]     Checking zerofrom v0.1.8
[INFO] [stderr]     Checking ppv-lite86 v0.2.21
[INFO] [stderr]     Checking yoke v0.8.3
[INFO] [stderr]     Checking thiserror v1.0.69
[INFO] [stderr]    Compiling clap_derive v4.4.7
[INFO] [stderr]     Checking zerovec v0.11.7
[INFO] [stderr]     Checking zerotrie v0.2.5
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking tracing v0.1.44
[INFO] [stderr]     Checking rustls-webpki v0.102.8
[INFO] [stderr]     Checking rand v0.8.7
[INFO] [stderr]     Checking tracing-subscriber v0.3.23
[INFO] [stderr]     Checking tinystr v0.8.4
[INFO] [stderr]     Checking potential_utf v0.1.6
[INFO] [stderr]     Checking icu_locale_core v2.3.0
[INFO] [stderr]     Checking icu_collections v2.3.0
[INFO] [stderr]     Checking tower v0.4.13
[INFO] [stderr]     Checking serde v1.0.229
[INFO] [stderr]     Checking clap v4.4.18
[INFO] [stderr]     Checking icu_provider v2.3.0
[INFO] [stderr]     Checking icu_normalizer v2.3.0
[INFO] [stderr]     Checking icu_properties v2.3.0
[INFO] [stderr]     Checking serde_spanned v0.6.9
[INFO] [stderr]     Checking toml_datetime v0.6.11
[INFO] [stderr]     Checking chrono v0.4.45
[INFO] [stderr]     Checking serde_urlencoded v0.7.1
[INFO] [stderr]     Checking toml_edit v0.22.27
[INFO] [stderr]     Checking futures-executor v0.3.34
[INFO] [stderr]     Checking axum-core v0.4.5
[INFO] [stderr]     Checking futures v0.3.34
[INFO] [stderr]     Checking idna_adapter v1.2.2
[INFO] [stderr]     Checking idna v1.1.0
[INFO] [stderr]     Checking url v2.5.8
[INFO] [stderr]     Checking tungstenite v0.21.0
[INFO] [stderr]     Checking toml v0.8.23
[INFO] [stderr]     Checking hyper v1.11.0
[INFO] [stderr]     Checking proxywong-core v0.1.0 (/opt/rustwide/workdir/crates/proxywong-core)
[INFO] [stderr]     Checking tower v0.5.3
[INFO] [stderr]     Checking tokio-util v0.7.19
[INFO] [stderr]     Checking tokio-rustls v0.25.0
[INFO] [stderr]     Checking tokio-tungstenite v0.21.0
[INFO] [stderr]     Checking tower-http v0.5.2
[INFO] [stderr]     Checking proxywong-client v0.1.0 (/opt/rustwide/workdir/crates/proxywong-client)
[INFO] [stderr]     Checking hyper-util v0.1.20
[INFO] [stderr]     Checking axum v0.7.9
[INFO] [stderr]     Checking proxywong-server v0.1.0 (/opt/rustwide/workdir/crates/proxywong-server)
[INFO] [stdout] warning: unused import: `error`
[INFO] [stdout]  --> crates/proxywong-server/src/handler.rs:9:15
[INFO] [stdout]   |
[INFO] [stdout] 9 | use tracing::{error, info, warn};
[INFO] [stdout]   |               ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> crates/proxywong-server/src/p2p/manager.rs:6:21
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tracing::{info, warn};
[INFO] [stdout]   |                     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `nat_detect::NatDetector`
[INFO] [stdout]  --> crates/proxywong-server/src/p2p/mod.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub use nat_detect::NatDetector;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `STUN_MAGIC_COOKIE`, `StunMessageType`, and `StunMessage`
[INFO] [stdout]  --> crates/proxywong-server/src/p2p/mod.rs:8:16
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use stun::{StunMessage, StunMessageType, STUN_MAGIC_COOKIE};
[INFO] [stdout]   |                ^^^^^^^^^^^  ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ProxyConfig`
[INFO] [stdout]  --> crates/proxywong-server/src/proxy/mod.rs:7:40
[INFO] [stdout]   |
[INFO] [stdout] 7 | use proxywong_core::proxy::{ProxyType, ProxyConfig};
[INFO] [stdout]   |                                        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `connection_limit::ConnectionLimit`
[INFO] [stdout]  --> crates/proxywong-server/src/security/mod.rs:4:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub use connection_limit::ConnectionLimit;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `FilterMode` and `IpFilter`
[INFO] [stdout]  --> crates/proxywong-server/src/security/mod.rs:5:21
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use ip_filter::{FilterMode, IpFilter};
[INFO] [stdout]   |                     ^^^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ClientConfig`
[INFO] [stdout]  --> crates/proxywong-server/src/state.rs:2:37
[INFO] [stdout]   |
[INFO] [stdout] 2 | use proxywong_core::types::{Client, ClientConfig, TrafficStats};
[INFO] [stdout]   |                                     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> crates/proxywong-server/src/state.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `async_trait::async_trait`
[INFO] [stdout]  --> crates/proxywong-server/src/transport/mod.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use async_trait::async_trait;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Transport`
[INFO] [stdout]  --> crates/proxywong-server/src/transport/mod.rs:5:33
[INFO] [stdout]   |
[INFO] [stdout] 5 | use proxywong_core::transport::{Transport, TransportConfig, TransportType};
[INFO] [stdout]   |                                 ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `proxywong_core::Result`
[INFO] [stdout]  --> crates/proxywong-server/src/transport/mod.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use proxywong_core::Result;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tls::TlsTransport`
[INFO] [stdout]   --> crates/proxywong-server/src/transport/mod.rs:28:9
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub use tls::TlsTransport;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ws::WsTransport`
[INFO] [stdout]   --> crates/proxywong-server/src/transport/mod.rs:29:9
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub use ws::WsTransport;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `delete` and `put`
[INFO] [stdout]  --> crates/proxywong-server/src/web/api.rs:5:15
[INFO] [stdout]   |
[INFO] [stdout] 5 |     routing::{delete, get, post, put},
[INFO] [stdout]   |               ^^^^^^             ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]   --> crates/proxywong-server/src/main.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use std::sync::Arc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `error`
[INFO] [stdout]  --> crates/proxywong-server/src/handler.rs:9:15
[INFO] [stdout]   |
[INFO] [stdout] 9 | use tracing::{error, info, warn};
[INFO] [stdout]   |               ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> crates/proxywong-server/src/p2p/manager.rs:6:21
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tracing::{info, warn};
[INFO] [stdout]   |                     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `nat_detect::NatDetector`
[INFO] [stdout]  --> crates/proxywong-server/src/p2p/mod.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub use nat_detect::NatDetector;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `STUN_MAGIC_COOKIE`, `StunMessageType`, and `StunMessage`
[INFO] [stdout]  --> crates/proxywong-server/src/p2p/mod.rs:8:16
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use stun::{StunMessage, StunMessageType, STUN_MAGIC_COOKIE};
[INFO] [stdout]   |                ^^^^^^^^^^^  ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ProxyConfig`
[INFO] [stdout]  --> crates/proxywong-server/src/proxy/mod.rs:7:40
[INFO] [stdout]   |
[INFO] [stdout] 7 | use proxywong_core::proxy::{ProxyType, ProxyConfig};
[INFO] [stdout]   |                                        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `connection_limit::ConnectionLimit`
[INFO] [stdout]  --> crates/proxywong-server/src/security/mod.rs:4:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub use connection_limit::ConnectionLimit;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `FilterMode` and `IpFilter`
[INFO] [stdout]  --> crates/proxywong-server/src/security/mod.rs:5:21
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use ip_filter::{FilterMode, IpFilter};
[INFO] [stdout]   |                     ^^^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ClientConfig`
[INFO] [stdout]  --> crates/proxywong-server/src/state.rs:2:37
[INFO] [stdout]   |
[INFO] [stdout] 2 | use proxywong_core::types::{Client, ClientConfig, TrafficStats};
[INFO] [stdout]   |                                     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> crates/proxywong-server/src/state.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `async_trait::async_trait`
[INFO] [stdout]  --> crates/proxywong-server/src/transport/mod.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use async_trait::async_trait;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Transport`
[INFO] [stdout]  --> crates/proxywong-server/src/transport/mod.rs:5:33
[INFO] [stdout]   |
[INFO] [stdout] 5 | use proxywong_core::transport::{Transport, TransportConfig, TransportType};
[INFO] [stdout]   |                                 ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `proxywong_core::Result`
[INFO] [stdout]  --> crates/proxywong-server/src/transport/mod.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use proxywong_core::Result;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tls::TlsTransport`
[INFO] [stdout]   --> crates/proxywong-server/src/transport/mod.rs:28:9
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub use tls::TlsTransport;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ws::WsTransport`
[INFO] [stdout]   --> crates/proxywong-server/src/transport/mod.rs:29:9
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub use ws::WsTransport;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `delete` and `put`
[INFO] [stdout]  --> crates/proxywong-server/src/web/api.rs:5:15
[INFO] [stdout]   |
[INFO] [stdout] 5 |     routing::{delete, get, post, put},
[INFO] [stdout]   |               ^^^^^^             ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]   --> crates/proxywong-server/src/main.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use std::sync::Arc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> crates/proxywong-server/src/proxy/http.rs:118:9
[INFO] [stdout]     |
[INFO] [stdout] 118 |     let mut target_stream = TcpStream::connect(target).await.map_err(|e| {
[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/proxywong-server/src/proxy/http.rs:118:9
[INFO] [stdout]     |
[INFO] [stdout] 118 |     let mut target_stream = TcpStream::connect(target).await.map_err(|e| {
[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/proxywong-server/src/proxy/http.rs:169:30
[INFO] [stdout]     |
[INFO] [stdout] 169 | async fn handle_http_request(mut stream: TcpStream, request: &str) -> Result<()> {
[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/proxywong-server/src/proxy/http.rs:169:30
[INFO] [stdout]     |
[INFO] [stdout] 169 | async fn handle_http_request(mut stream: TcpStream, request: &str) -> Result<()> {
[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/proxywong-server/src/proxy/socks5.rs:161:9
[INFO] [stdout]     |
[INFO] [stdout] 161 |     let mut target_stream = match TcpStream::connect(&target_addr).await {
[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/proxywong-server/src/proxy/socks5.rs:161:9
[INFO] [stdout]     |
[INFO] [stdout] 161 |     let mut target_stream = match TcpStream::connect(&target_addr).await {
[INFO] [stdout]     |         ----^^^^^^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Metrics` is never constructed
[INFO] [stdout]  --> crates/proxywong-server/src/metrics.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct Metrics {
[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 items `new`, `record_connection`, `record_disconnection`, `record_traffic`, `record_request`, and `get_snapshot` are never used
[INFO] [stdout]   --> crates/proxywong-server/src/metrics.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | impl Metrics {
[INFO] [stdout]    | ------------ associated items in this implementation
[INFO] [stdout] 13 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 24 |     pub fn record_connection(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn record_disconnection(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub fn record_traffic(&self, bytes_in: u64, bytes_out: u64) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 38 |     pub fn record_request(&self, success: bool) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub fn get_snapshot(&self) -> MetricsSnapshot {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MetricsSnapshot` is never constructed
[INFO] [stdout]   --> crates/proxywong-server/src/metrics.rs:64:12
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub struct MetricsSnapshot {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `register_peer`, `unregister_peer`, `update_peer_addr`, and `update_nat_type` are never used
[INFO] [stdout]   --> crates/proxywong-server/src/p2p/manager.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl P2pManager {
[INFO] [stdout]    | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub fn register_peer(&self, peer: PeerInfo) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn unregister_peer(&self, peer_id: &str) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 38 |     pub fn update_peer_addr(&self, peer_id: &str, public_addr: SocketAddr) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub fn update_nat_type(&self, peer_id: &str, nat_type: NatType) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `NatDetector` is never constructed
[INFO] [stdout]  --> crates/proxywong-server/src/p2p/nat_detect.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct NatDetector;
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `detect`, `get_public_addr`, `detect_cone_type`, `create_stun_request`, and `parse_stun_response` are never used
[INFO] [stdout]   --> crates/proxywong-server/src/p2p/nat_detect.rs:12:18
[INFO] [stdout]    |
[INFO] [stdout] 11 | impl NatDetector {
[INFO] [stdout]    | ---------------- associated functions in this implementation
[INFO] [stdout] 12 |     pub async fn detect(stun_servers: &[SocketAddr], local_socket: &UdpSocket) -> NatType {
[INFO] [stdout]    |                  ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 35 |     pub async fn get_public_addr(
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 46 |     async fn detect_cone_type(socket: &UdpSocket, stun_server: SocketAddr) -> NatType {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     fn create_stun_request() -> Vec<u8> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     fn parse_stun_response(data: &[u8]) -> Result<SocketAddr, Box<dyn std::error::Error>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `STUN_MAGIC_COOKIE` is never used
[INFO] [stdout]  --> crates/proxywong-server/src/p2p/stun.rs:3:11
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub const STUN_MAGIC_COOKIE: u32 = 0x2112A442;
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `StunMessageType` is never used
[INFO] [stdout]  --> crates/proxywong-server/src/p2p/stun.rs:6:10
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub enum StunMessageType {
[INFO] [stdout]   |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StunMessage` is never constructed
[INFO] [stdout]   --> crates/proxywong-server/src/p2p/stun.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct StunMessage {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `StunAttribute` is never used
[INFO] [stdout]   --> crates/proxywong-server/src/p2p/stun.rs:20:10
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub enum StunAttribute {
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> crates/proxywong-server/src/p2p/stun.rs:40:12
[INFO] [stdout]     |
[INFO] [stdout]  39 | impl StunMessage {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  40 |     pub fn new(message_type: StunMessageType) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  52 |     pub fn binding_request() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  56 |     pub fn binding_response(transaction_id: [u8; 12]) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  62 |     pub fn add_xor_mapped_address(&mut self, addr: std::net::SocketAddr) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     pub fn encode(&self) -> Bytes {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     pub fn decode(buf: &mut BytesMut) -> Option<Self> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 207 |     pub fn get_xor_mapped_address(&self) -> Option<std::net::SocketAddr> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 219 |     pub fn get_mapped_address(&self) -> Option<std::net::SocketAddr> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BufferPool` is never constructed
[INFO] [stdout]  --> crates/proxywong-server/src/pool.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct BufferPool {
[INFO] [stdout]   |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `acquire`, `release`, and `available` are never used
[INFO] [stdout]   --> crates/proxywong-server/src/pool.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | impl BufferPool {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 11 |     pub fn new(pool_size: usize, buffer_size: usize) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub async fn acquire(&self) -> BytesMut {
[INFO] [stdout]    |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub async fn release(&self, mut buffer: BytesMut) {
[INFO] [stdout]    |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub async fn available(&self) -> usize {
[INFO] [stdout]    |                  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConnectionPool` is never constructed
[INFO] [stdout]   --> crates/proxywong-server/src/pool.rs:38:12
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub struct ConnectionPool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `acquire`, and `available` are never used
[INFO] [stdout]   --> crates/proxywong-server/src/pool.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | impl ConnectionPool {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout] 43 |     pub fn new(max_connections: usize) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 49 |     pub async fn acquire(&self) -> tokio::sync::SemaphorePermit<'_> {
[INFO] [stdout]    |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn available(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `stop`, `proxy_type`, and `listen_addr` are never used
[INFO] [stdout]   --> crates/proxywong-server/src/proxy/mod.rs:16:14
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait ProxyHandler: Send + Sync {
[INFO] [stdout]    |           ------------ methods in this trait
[INFO] [stdout] 15 |     async fn start(&self) -> Result<()>;
[INFO] [stdout] 16 |     async fn stop(&self) -> Result<()>;
[INFO] [stdout]    |              ^^^^
[INFO] [stdout] 17 |     fn proxy_type(&self) -> ProxyType;
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 18 |     fn listen_addr(&self) -> SocketAddr;
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `stop_proxy`, `remove_proxy`, and `stop_all` are never used
[INFO] [stdout]   --> crates/proxywong-server/src/proxy/mod.rs:51:18
[INFO] [stdout]    |
[INFO] [stdout] 26 | impl ProxyManager {
[INFO] [stdout]    | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 51 |     pub async fn stop_proxy(&self, id: u64) -> Result<()> {
[INFO] [stdout]    |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 60 |     pub async fn remove_proxy(&self, id: u64) -> Result<()> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub async fn stop_all(&self) -> Result<()> {
[INFO] [stdout]    |                  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UdpProxy` is never constructed
[INFO] [stdout]   --> crates/proxywong-server/src/proxy/udp.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct UdpProxy {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `run` are never used
[INFO] [stdout]   --> crates/proxywong-server/src/proxy/udp.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | impl UdpProxy {
[INFO] [stdout]    | ------------- associated items in this implementation
[INFO] [stdout] 16 |     pub fn new(config: ProxyConfig) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     pub async fn run(&self) -> Result<()> {
[INFO] [stdout]    |                  ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConnectionLimit` is never constructed
[INFO] [stdout]  --> crates/proxywong-server/src/security/connection_limit.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct ConnectionLimit {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> crates/proxywong-server/src/security/connection_limit.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl ConnectionLimit {
[INFO] [stdout]    | -------------------- associated items in this implementation
[INFO] [stdout] 14 |     pub fn new(max_per_ip: i32, max_total: i32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     pub fn try_connect(&self, ip: IpAddr) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     pub fn disconnect(&self, ip: IpAddr) {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn get_total_connections(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn get_ip_connections(&self, ip: IpAddr) -> i32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     pub fn set_max_per_ip(&mut self, max: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     pub fn set_max_total(&mut self, max: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 66 |     pub fn get_max_per_ip(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 70 |     pub fn get_max_total(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `IpFilter` is never constructed
[INFO] [stdout]  --> crates/proxywong-server/src/security/ip_filter.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct IpFilter {
[INFO] [stdout]   |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FilterMode` is never used
[INFO] [stdout]   --> crates/proxywong-server/src/security/ip_filter.rs:12:10
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum FilterMode {
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> crates/proxywong-server/src/security/ip_filter.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | impl IpFilter {
[INFO] [stdout]    | ------------- associated items in this implementation
[INFO] [stdout] 19 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub fn set_mode(&mut self, mode: FilterMode) {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn add_to_blacklist(&self, ip: IpAddr) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 35 |     pub fn remove_from_blacklist(&self, ip: IpAddr) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     pub fn add_to_whitelist(&self, ip: IpAddr) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub fn remove_from_whitelist(&self, ip: IpAddr) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn is_allowed(&self, ip: IpAddr) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 55 |     pub fn list_blacklist(&self) -> Vec<IpAddr> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub fn list_whitelist(&self) -> Vec<IpAddr> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub fn clear_blacklist(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 67 |     pub fn clear_whitelist(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 71 |     pub fn get_mode(&self) -> FilterMode {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `stats` is never read
[INFO] [stdout]  --> crates/proxywong-server/src/state.rs:9:9
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct AppState {
[INFO] [stdout]   |            -------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 9 |     pub stats: TrafficStats,
[INFO] [stdout]   |         ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `auth_client` is never used
[INFO] [stdout]   --> crates/proxywong-server/src/state.rs:37:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | impl AppState {
[INFO] [stdout]    | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 37 |     pub fn auth_client(&self, vkey: &str) -> Option<Client> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TransportManager` is never constructed
[INFO] [stdout]  --> crates/proxywong-server/src/transport/mod.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct TransportManager;
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `create_config` and `with_certs` are never used
[INFO] [stdout]   --> crates/proxywong-server/src/transport/mod.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | impl TransportManager {
[INFO] [stdout]    | --------------------- associated functions in this implementation
[INFO] [stdout] 12 |     pub fn create_config(
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |     pub fn with_certs(
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TlsTransport` is never constructed
[INFO] [stdout]   --> crates/proxywong-server/src/transport/tls.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct TlsTransport {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `connect_with_config` and `accept_with_config` are never used
[INFO] [stdout]   --> crates/proxywong-server/src/transport/tls.rs:17:18
[INFO] [stdout]    |
[INFO] [stdout] 16 | impl TlsTransport {
[INFO] [stdout]    | ----------------- associated functions in this implementation
[INFO] [stdout] 17 |     pub async fn connect_with_config(addr: &SocketAddr, _config: &TransportConfig) -> Result<Self> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     pub async fn accept_with_config(
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `load_certs` is never used
[INFO] [stdout]   --> crates/proxywong-server/src/transport/tls.rs:73:4
[INFO] [stdout]    |
[INFO] [stdout] 73 | fn load_certs(path: &str) -> Result<Vec<rustls::pki_types::CertificateDer<'static>>> {
[INFO] [stdout]    |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `load_key` is never used
[INFO] [stdout]   --> crates/proxywong-server/src/transport/tls.rs:82:4
[INFO] [stdout]    |
[INFO] [stdout] 82 | fn load_key(path: &str) -> Result<rustls::pki_types::PrivateKeyDer<'static>> {
[INFO] [stdout]    |    ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `WsStream` is never used
[INFO] [stdout]   --> crates/proxywong-server/src/transport/ws.rs:12:6
[INFO] [stdout]    |
[INFO] [stdout] 12 | enum WsStream {
[INFO] [stdout]    |      ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WsTransport` is never constructed
[INFO] [stdout]   --> crates/proxywong-server/src/transport/ws.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct WsTransport {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `connect_with_config` and `accept_with_config` are never used
[INFO] [stdout]   --> crates/proxywong-server/src/transport/ws.rs:24:18
[INFO] [stdout]    |
[INFO] [stdout] 23 | impl WsTransport {
[INFO] [stdout]    | ---------------- associated functions in this implementation
[INFO] [stdout] 24 |     pub async fn connect_with_config(
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     pub async fn accept_with_config(
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name`, `vkey`, `max_connections`, and `max_traffic` are never read
[INFO] [stdout]   --> crates/proxywong-server/src/web/api.rs:70:9
[INFO] [stdout]    |
[INFO] [stdout] 69 | pub struct UpdateClientRequest {
[INFO] [stdout]    |            ------------------- fields in this struct
[INFO] [stdout] 70 |     pub name: Option<String>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 71 |     pub vkey: Option<String>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 72 |     pub max_connections: Option<i32>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 73 |     pub max_traffic: Option<i64>,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `UpdateClientRequest` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `client_id`, `name`, `mode`, `port`, and `target_addr` are never read
[INFO] [stdout]   --> crates/proxywong-server/src/web/api.rs:89:9
[INFO] [stdout]    |
[INFO] [stdout] 88 | pub struct CreateTunnelRequest {
[INFO] [stdout]    |            ------------------- fields in this struct
[INFO] [stdout] 89 |     pub client_id: i64,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 90 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 91 |     pub mode: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 92 |     pub port: u16,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 93 |     pub target_addr: String,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CreateTunnelRequest` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `period` is never read
[INFO] [stdout]    --> crates/proxywong-server/src/web/api.rs:298:5
[INFO] [stdout]     |
[INFO] [stdout] 297 | struct TrafficQueryParams {
[INFO] [stdout]     |        ------------------ field in this struct
[INFO] [stdout] 298 |     period: Option<String>,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `TrafficQueryParams` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: call to `.clone()` on a reference in this situation does nothing
[INFO] [stdout]    --> crates/proxywong-server/src/proxy/udp.rs:30:46
[INFO] [stdout]     |
[INFO] [stdout]  30 |         let socket = socket.as_ref().unwrap().clone();
[INFO] [stdout]     |                                              ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: the type `tokio::net::UdpSocket` does not implement `Clone`, so calling `clone` on `&tokio::net::UdpSocket` copies the reference, which does not do anything and can be removed
[INFO] [stdout]     = note: `#[warn(noop_method_call)]` on by default
[INFO] [stdout] help: remove this redundant call
[INFO] [stdout]     |
[INFO] [stdout]  30 -         let socket = socket.as_ref().unwrap().clone();
[INFO] [stdout]  30 +         let socket = socket.as_ref().unwrap();
[INFO] [stdout]     |
[INFO] [stdout] help: if you meant to clone `tokio::net::UdpSocket`, implement `Clone` for it
[INFO] [stdout]    --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.53.1/src/net/udp.rs:122:1
[INFO] [stdout]     |
[INFO] [stdout] 122 +     #[derive(Clone)]
[INFO] [stdout] 123 |     pub struct UdpSocket {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Metrics` is never constructed
[INFO] [stdout]  --> crates/proxywong-server/src/metrics.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct Metrics {
[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 items `new`, `record_connection`, `record_disconnection`, `record_traffic`, `record_request`, and `get_snapshot` are never used
[INFO] [stdout]   --> crates/proxywong-server/src/metrics.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | impl Metrics {
[INFO] [stdout]    | ------------ associated items in this implementation
[INFO] [stdout] 13 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 24 |     pub fn record_connection(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn record_disconnection(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub fn record_traffic(&self, bytes_in: u64, bytes_out: u64) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 38 |     pub fn record_request(&self, success: bool) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub fn get_snapshot(&self) -> MetricsSnapshot {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MetricsSnapshot` is never constructed
[INFO] [stdout]   --> crates/proxywong-server/src/metrics.rs:64:12
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub struct MetricsSnapshot {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `register_peer`, `unregister_peer`, `update_peer_addr`, and `update_nat_type` are never used
[INFO] [stdout]   --> crates/proxywong-server/src/p2p/manager.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl P2pManager {
[INFO] [stdout]    | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub fn register_peer(&self, peer: PeerInfo) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn unregister_peer(&self, peer_id: &str) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 38 |     pub fn update_peer_addr(&self, peer_id: &str, public_addr: SocketAddr) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub fn update_nat_type(&self, peer_id: &str, nat_type: NatType) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `NatDetector` is never constructed
[INFO] [stdout]  --> crates/proxywong-server/src/p2p/nat_detect.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct NatDetector;
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `detect`, `get_public_addr`, `detect_cone_type`, `create_stun_request`, and `parse_stun_response` are never used
[INFO] [stdout]   --> crates/proxywong-server/src/p2p/nat_detect.rs:12:18
[INFO] [stdout]    |
[INFO] [stdout] 11 | impl NatDetector {
[INFO] [stdout]    | ---------------- associated functions in this implementation
[INFO] [stdout] 12 |     pub async fn detect(stun_servers: &[SocketAddr], local_socket: &UdpSocket) -> NatType {
[INFO] [stdout]    |                  ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 35 |     pub async fn get_public_addr(
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 46 |     async fn detect_cone_type(socket: &UdpSocket, stun_server: SocketAddr) -> NatType {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     fn create_stun_request() -> Vec<u8> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     fn parse_stun_response(data: &[u8]) -> Result<SocketAddr, Box<dyn std::error::Error>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `STUN_MAGIC_COOKIE` is never used
[INFO] [stdout]  --> crates/proxywong-server/src/p2p/stun.rs:3:11
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub const STUN_MAGIC_COOKIE: u32 = 0x2112A442;
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `StunMessageType` is never used
[INFO] [stdout]  --> crates/proxywong-server/src/p2p/stun.rs:6:10
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub enum StunMessageType {
[INFO] [stdout]   |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StunMessage` is never constructed
[INFO] [stdout]   --> crates/proxywong-server/src/p2p/stun.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct StunMessage {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `StunAttribute` is never used
[INFO] [stdout]   --> crates/proxywong-server/src/p2p/stun.rs:20:10
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub enum StunAttribute {
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> crates/proxywong-server/src/p2p/stun.rs:40:12
[INFO] [stdout]     |
[INFO] [stdout]  39 | impl StunMessage {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  40 |     pub fn new(message_type: StunMessageType) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  52 |     pub fn binding_request() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  56 |     pub fn binding_response(transaction_id: [u8; 12]) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  62 |     pub fn add_xor_mapped_address(&mut self, addr: std::net::SocketAddr) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     pub fn encode(&self) -> Bytes {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     pub fn decode(buf: &mut BytesMut) -> Option<Self> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 207 |     pub fn get_xor_mapped_address(&self) -> Option<std::net::SocketAddr> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 219 |     pub fn get_mapped_address(&self) -> Option<std::net::SocketAddr> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BufferPool` is never constructed
[INFO] [stdout]  --> crates/proxywong-server/src/pool.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct BufferPool {
[INFO] [stdout]   |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `acquire`, `release`, and `available` are never used
[INFO] [stdout]   --> crates/proxywong-server/src/pool.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | impl BufferPool {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 11 |     pub fn new(pool_size: usize, buffer_size: usize) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub async fn acquire(&self) -> BytesMut {
[INFO] [stdout]    |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub async fn release(&self, mut buffer: BytesMut) {
[INFO] [stdout]    |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub async fn available(&self) -> usize {
[INFO] [stdout]    |                  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConnectionPool` is never constructed
[INFO] [stdout]   --> crates/proxywong-server/src/pool.rs:38:12
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub struct ConnectionPool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `acquire`, and `available` are never used
[INFO] [stdout]   --> crates/proxywong-server/src/pool.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | impl ConnectionPool {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout] 43 |     pub fn new(max_connections: usize) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 49 |     pub async fn acquire(&self) -> tokio::sync::SemaphorePermit<'_> {
[INFO] [stdout]    |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn available(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `stop`, `proxy_type`, and `listen_addr` are never used
[INFO] [stdout]   --> crates/proxywong-server/src/proxy/mod.rs:16:14
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait ProxyHandler: Send + Sync {
[INFO] [stdout]    |           ------------ methods in this trait
[INFO] [stdout] 15 |     async fn start(&self) -> Result<()>;
[INFO] [stdout] 16 |     async fn stop(&self) -> Result<()>;
[INFO] [stdout]    |              ^^^^
[INFO] [stdout] 17 |     fn proxy_type(&self) -> ProxyType;
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 18 |     fn listen_addr(&self) -> SocketAddr;
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `stop_proxy`, `remove_proxy`, and `stop_all` are never used
[INFO] [stdout]   --> crates/proxywong-server/src/proxy/mod.rs:51:18
[INFO] [stdout]    |
[INFO] [stdout] 26 | impl ProxyManager {
[INFO] [stdout]    | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 51 |     pub async fn stop_proxy(&self, id: u64) -> Result<()> {
[INFO] [stdout]    |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 60 |     pub async fn remove_proxy(&self, id: u64) -> Result<()> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub async fn stop_all(&self) -> Result<()> {
[INFO] [stdout]    |                  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UdpProxy` is never constructed
[INFO] [stdout]   --> crates/proxywong-server/src/proxy/udp.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct UdpProxy {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `run` are never used
[INFO] [stdout]   --> crates/proxywong-server/src/proxy/udp.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | impl UdpProxy {
[INFO] [stdout]    | ------------- associated items in this implementation
[INFO] [stdout] 16 |     pub fn new(config: ProxyConfig) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     pub async fn run(&self) -> Result<()> {
[INFO] [stdout]    |                  ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConnectionLimit` is never constructed
[INFO] [stdout]  --> crates/proxywong-server/src/security/connection_limit.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct ConnectionLimit {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> crates/proxywong-server/src/security/connection_limit.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl ConnectionLimit {
[INFO] [stdout]    | -------------------- associated items in this implementation
[INFO] [stdout] 14 |     pub fn new(max_per_ip: i32, max_total: i32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     pub fn try_connect(&self, ip: IpAddr) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     pub fn disconnect(&self, ip: IpAddr) {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn get_total_connections(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn get_ip_connections(&self, ip: IpAddr) -> i32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     pub fn set_max_per_ip(&mut self, max: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     pub fn set_max_total(&mut self, max: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 66 |     pub fn get_max_per_ip(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 70 |     pub fn get_max_total(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `IpFilter` is never constructed
[INFO] [stdout]  --> crates/proxywong-server/src/security/ip_filter.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct IpFilter {
[INFO] [stdout]   |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FilterMode` is never used
[INFO] [stdout]   --> crates/proxywong-server/src/security/ip_filter.rs:12:10
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum FilterMode {
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> crates/proxywong-server/src/security/ip_filter.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | impl IpFilter {
[INFO] [stdout]    | ------------- associated items in this implementation
[INFO] [stdout] 19 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub fn set_mode(&mut self, mode: FilterMode) {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn add_to_blacklist(&self, ip: IpAddr) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 35 |     pub fn remove_from_blacklist(&self, ip: IpAddr) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     pub fn add_to_whitelist(&self, ip: IpAddr) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub fn remove_from_whitelist(&self, ip: IpAddr) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn is_allowed(&self, ip: IpAddr) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 55 |     pub fn list_blacklist(&self) -> Vec<IpAddr> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub fn list_whitelist(&self) -> Vec<IpAddr> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub fn clear_blacklist(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 67 |     pub fn clear_whitelist(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 71 |     pub fn get_mode(&self) -> FilterMode {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `stats` is never read
[INFO] [stdout]  --> crates/proxywong-server/src/state.rs:9:9
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct AppState {
[INFO] [stdout]   |            -------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 9 |     pub stats: TrafficStats,
[INFO] [stdout]   |         ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `auth_client` is never used
[INFO] [stdout]   --> crates/proxywong-server/src/state.rs:37:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | impl AppState {
[INFO] [stdout]    | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 37 |     pub fn auth_client(&self, vkey: &str) -> Option<Client> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TransportManager` is never constructed
[INFO] [stdout]  --> crates/proxywong-server/src/transport/mod.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct TransportManager;
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `create_config` and `with_certs` are never used
[INFO] [stdout]   --> crates/proxywong-server/src/transport/mod.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | impl TransportManager {
[INFO] [stdout]    | --------------------- associated functions in this implementation
[INFO] [stdout] 12 |     pub fn create_config(
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |     pub fn with_certs(
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TlsTransport` is never constructed
[INFO] [stdout]   --> crates/proxywong-server/src/transport/tls.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct TlsTransport {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `connect_with_config` and `accept_with_config` are never used
[INFO] [stdout]   --> crates/proxywong-server/src/transport/tls.rs:17:18
[INFO] [stdout]    |
[INFO] [stdout] 16 | impl TlsTransport {
[INFO] [stdout]    | ----------------- associated functions in this implementation
[INFO] [stdout] 17 |     pub async fn connect_with_config(addr: &SocketAddr, _config: &TransportConfig) -> Result<Self> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     pub async fn accept_with_config(
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `load_certs` is never used
[INFO] [stdout]   --> crates/proxywong-server/src/transport/tls.rs:73:4
[INFO] [stdout]    |
[INFO] [stdout] 73 | fn load_certs(path: &str) -> Result<Vec<rustls::pki_types::CertificateDer<'static>>> {
[INFO] [stdout]    |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `load_key` is never used
[INFO] [stdout]   --> crates/proxywong-server/src/transport/tls.rs:82:4
[INFO] [stdout]    |
[INFO] [stdout] 82 | fn load_key(path: &str) -> Result<rustls::pki_types::PrivateKeyDer<'static>> {
[INFO] [stdout]    |    ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `WsStream` is never used
[INFO] [stdout]   --> crates/proxywong-server/src/transport/ws.rs:12:6
[INFO] [stdout]    |
[INFO] [stdout] 12 | enum WsStream {
[INFO] [stdout]    |      ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WsTransport` is never constructed
[INFO] [stdout]   --> crates/proxywong-server/src/transport/ws.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct WsTransport {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `connect_with_config` and `accept_with_config` are never used
[INFO] [stdout]   --> crates/proxywong-server/src/transport/ws.rs:24:18
[INFO] [stdout]    |
[INFO] [stdout] 23 | impl WsTransport {
[INFO] [stdout]    | ---------------- associated functions in this implementation
[INFO] [stdout] 24 |     pub async fn connect_with_config(
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     pub async fn accept_with_config(
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name`, `vkey`, `max_connections`, and `max_traffic` are never read
[INFO] [stdout]   --> crates/proxywong-server/src/web/api.rs:70:9
[INFO] [stdout]    |
[INFO] [stdout] 69 | pub struct UpdateClientRequest {
[INFO] [stdout]    |            ------------------- fields in this struct
[INFO] [stdout] 70 |     pub name: Option<String>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 71 |     pub vkey: Option<String>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 72 |     pub max_connections: Option<i32>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 73 |     pub max_traffic: Option<i64>,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `UpdateClientRequest` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `client_id`, `name`, `mode`, `port`, and `target_addr` are never read
[INFO] [stdout]   --> crates/proxywong-server/src/web/api.rs:89:9
[INFO] [stdout]    |
[INFO] [stdout] 88 | pub struct CreateTunnelRequest {
[INFO] [stdout]    |            ------------------- fields in this struct
[INFO] [stdout] 89 |     pub client_id: i64,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 90 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 91 |     pub mode: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 92 |     pub port: u16,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 93 |     pub target_addr: String,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CreateTunnelRequest` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `period` is never read
[INFO] [stdout]    --> crates/proxywong-server/src/web/api.rs:298:5
[INFO] [stdout]     |
[INFO] [stdout] 297 | struct TrafficQueryParams {
[INFO] [stdout]     |        ------------------ field in this struct
[INFO] [stdout] 298 |     period: Option<String>,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `TrafficQueryParams` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: call to `.clone()` on a reference in this situation does nothing
[INFO] [stdout]    --> crates/proxywong-server/src/proxy/udp.rs:30:46
[INFO] [stdout]     |
[INFO] [stdout]  30 |         let socket = socket.as_ref().unwrap().clone();
[INFO] [stdout]     |                                              ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: the type `tokio::net::UdpSocket` does not implement `Clone`, so calling `clone` on `&tokio::net::UdpSocket` copies the reference, which does not do anything and can be removed
[INFO] [stdout]     = note: `#[warn(noop_method_call)]` on by default
[INFO] [stdout] help: remove this redundant call
[INFO] [stdout]     |
[INFO] [stdout]  30 -         let socket = socket.as_ref().unwrap().clone();
[INFO] [stdout]  30 +         let socket = socket.as_ref().unwrap();
[INFO] [stdout]     |
[INFO] [stdout] help: if you meant to clone `tokio::net::UdpSocket`, implement `Clone` for it
[INFO] [stdout]    --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.53.1/src/net/udp.rs:122:1
[INFO] [stdout]     |
[INFO] [stdout] 122 +     #[derive(Clone)]
[INFO] [stdout] 123 |     pub struct UdpSocket {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] warning: unused dependency `dashmap`
[INFO] [stderr]   --> crates/proxywong-core/Cargo.toml:15:1
[INFO] [stderr]    |
[INFO] [stderr] 15 | dashmap.workspace = true
[INFO] [stderr]    | ^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::unused_dependencies` is set to `warn` by default
[INFO] [stderr] help: consider removing the dependency on `dashmap`
[INFO] [stderr] warning: unused dependency `tokio`
[INFO] [stderr]  --> crates/proxywong-core/Cargo.toml:7:1
[INFO] [stderr]   |
[INFO] [stderr] 7 | tokio.workspace = true
[INFO] [stderr]   | ^^^^^
[INFO] [stderr]   |
[INFO] [stderr] help: consider removing the dependency on `tokio`
[INFO] [stderr] warning: unused dependency `tracing`
[INFO] [stderr]   --> crates/proxywong-core/Cargo.toml:10:1
[INFO] [stderr]    |
[INFO] [stderr] 10 | tracing.workspace = true
[INFO] [stderr]    | ^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr] help: consider removing the dependency on `tracing`
[INFO] [stderr] warning: `proxywong-core` (manifest) generated 3 warnings
[INFO] [stderr] warning: unused dependency `tower`
[INFO] [stderr]   --> crates/proxywong-server/Cargo.toml:29:1
[INFO] [stderr]    |
[INFO] [stderr] 29 | tower.workspace = true
[INFO] [stderr]    | ^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::unused_dependencies` is set to `warn` by default
[INFO] [stderr] help: consider removing the dependency on `tower`
[INFO] [stderr] warning: `proxywong-server` (manifest) generated 1 warning
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 36s
[INFO] running `Command { std: "docker" "inspect" "9dd50fcaa47db7f9260313474768c663482a8ae207f6688ff43691756348d8aa", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "9dd50fcaa47db7f9260313474768c663482a8ae207f6688ff43691756348d8aa", kill_on_drop: false }`
[INFO] [stdout] 9dd50fcaa47db7f9260313474768c663482a8ae207f6688ff43691756348d8aa
