[INFO] cloning repository https://github.com/diciky/netguard-guard
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/diciky/netguard-guard" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdiciky%2Fnetguard-guard", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdiciky%2Fnetguard-guard'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] d5c923f2fa68bcfd16bc939becfbc1063c3a3941
[INFO] checking diciky/netguard-guard against eca445e5ae4a6679cc27d3a09106ce245e13a5a6 for pr-162478
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdiciky%2Fnetguard-guard" "/workspace/builds/worker-6-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc1/source'...
[INFO] [stderr] done.
[INFO] [stderr] Updating files:  80% (1271/1578)
Updating files:  81% (1279/1578)
Updating files:  82% (1294/1578)
Updating files:  83% (1310/1578)
Updating files:  84% (1326/1578)
Updating files:  85% (1342/1578)
Updating files:  86% (1358/1578)
Updating files:  87% (1373/1578)
Updating files:  88% (1389/1578)
Updating files:  89% (1405/1578)
Updating files:  90% (1421/1578)
Updating files:  91% (1436/1578)
Updating files:  92% (1452/1578)
Updating files:  93% (1468/1578)
Updating files:  94% (1484/1578)
Updating files:  95% (1500/1578)
Updating files:  96% (1515/1578)
Updating files:  97% (1531/1578)
Updating files:  98% (1547/1578)
Updating files:  98% (1554/1578)
Updating files:  99% (1563/1578)
Updating files: 100% (1578/1578)
Updating files: 100% (1578/1578), done.
[INFO] started tweaking git repo https://github.com/diciky/netguard-guard
[INFO] finished tweaking git repo https://github.com/diciky/netguard-guard
[INFO] tweaked toml for git repo https://github.com/diciky/netguard-guard written to /workspace/builds/worker-6-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/diciky/netguard-guard on toolchain eca445e5ae4a6679cc27d3a09106ce245e13a5a6
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+eca445e5ae4a6679cc27d3a09106ce245e13a5a6" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/diciky/netguard-guard 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" "+eca445e5ae4a6679cc27d3a09106ce245e13a5a6" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-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:8683fc1fc2eb5c9ac98e0d076ab094b2ffac7f99da555d2b6a2e27f346de2ec7" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 7930a95202487bd0866fc3365523587e95676c6d5348780cf796b5cad80e49e3
[INFO] running `Command { std: "docker" "start" "7930a95202487bd0866fc3365523587e95676c6d5348780cf796b5cad80e49e3", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "7930a95202487bd0866fc3365523587e95676c6d5348780cf796b5cad80e49e3", 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" "7930a95202487bd0866fc3365523587e95676c6d5348780cf796b5cad80e49e3" "/opt/rustwide/cargo-home/bin/cargo" "+eca445e5ae4a6679cc27d3a09106ce245e13a5a6" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "7930a95202487bd0866fc3365523587e95676c6d5348780cf796b5cad80e49e3", 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" "7930a95202487bd0866fc3365523587e95676c6d5348780cf796b5cad80e49e3" "/opt/rustwide/cargo-home/bin/cargo" "+eca445e5ae4a6679cc27d3a09106ce245e13a5a6" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling cc v1.2.61
[INFO] [stderr]    Compiling nix v0.31.2
[INFO] [stderr]     Checking ahash v0.8.12
[INFO] [stderr]     Checking parking_lot_core v0.9.12
[INFO] [stderr]     Checking errno v0.3.14
[INFO] [stderr]     Checking anstream v1.0.0
[INFO] [stderr]     Checking env_filter v1.0.1
[INFO] [stderr]    Compiling tokio-macros v2.7.0
[INFO] [stderr]     Checking signal-hook-registry v1.4.8
[INFO] [stderr]     Checking mio v1.2.0
[INFO] [stderr]     Checking hashbrown v0.14.5
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking socket2 v0.6.3
[INFO] [stderr]     Checking jiff v0.2.24
[INFO] [stderr]     Checking chrono v0.4.44
[INFO] [stderr]     Checking bincode v1.3.3
[INFO] [stderr]     Checking tokio v1.52.1
[INFO] [stderr]     Checking hashlink v0.9.1
[INFO] [stderr]     Checking ctrlc v3.5.2
[INFO] [stderr]    Compiling libsqlite3-sys v0.28.0
[INFO] [stderr]     Checking env_logger v0.11.10
[INFO] [stderr]     Checking rusqlite v0.31.0
[INFO] [stderr]     Checking netguard v1.0.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/types.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::collections::HashMap;
[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: `parking_lot::RwLock`
[INFO] [stdout]  --> src/types.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use parking_lot::RwLock;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserialize` and `Serialize`
[INFO] [stdout]  --> src/types.rs:4:13
[INFO] [stdout]   |
[INFO] [stdout] 4 | use serde::{Serialize, Deserialize};
[INFO] [stdout]   |             ^^^^^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/types.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::collections::HashMap;
[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: `parking_lot::RwLock`
[INFO] [stdout]  --> src/types.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use parking_lot::RwLock;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `FlowValue`
[INFO] [stdout]  --> src/app_identifier.rs:9:29
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::types::{FlowKey, FlowValue};
[INFO] [stdout]   |                             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> src/persistence.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserialize` and `Serialize`
[INFO] [stdout]  --> src/types.rs:4:13
[INFO] [stdout]   |
[INFO] [stdout] 4 | use serde::{Serialize, Deserialize};
[INFO] [stdout]   |             ^^^^^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `parking_lot::RwLock`
[INFO] [stdout]  --> src/persistence.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use parking_lot::RwLock;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `parking_lot::RwLock`
[INFO] [stdout]  --> src/api_server.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use parking_lot::RwLock;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Deserialize`
[INFO] [stdout]  --> src/api_server.rs:5:24
[INFO] [stdout]   |
[INFO] [stdout] 5 | use serde::{Serialize, Deserialize};
[INFO] [stdout]   |                        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `FlowValue`
[INFO] [stdout]  --> src/app_identifier.rs:9:29
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::types::{FlowKey, FlowValue};
[INFO] [stdout]   |                             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> src/persistence.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `parking_lot::RwLock`
[INFO] [stdout]  --> src/persistence.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use parking_lot::RwLock;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `FlowKey`, `FlowValue`, `HistoryKey`, and `HistoryValue`
[INFO] [stdout]  --> src/api_server.rs:6:20
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::types::{FlowKey, FlowValue, HistoryKey, HistoryValue};
[INFO] [stdout]   |                    ^^^^^^^  ^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `parking_lot::RwLock`
[INFO] [stdout]  --> src/api_server.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use parking_lot::RwLock;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Deserialize`
[INFO] [stdout]  --> src/api_server.rs:5:24
[INFO] [stdout]   |
[INFO] [stdout] 5 | use serde::{Serialize, Deserialize};
[INFO] [stdout]   |                        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `FlowKey`, `FlowValue`, `HistoryKey`, and `HistoryValue`
[INFO] [stdout]  --> src/api_server.rs:6:20
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::types::{FlowKey, FlowValue, HistoryKey, HistoryValue};
[INFO] [stdout]   |                    ^^^^^^^  ^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `record_len`
[INFO] [stdout]   --> src/sni_parser.rs:83:13
[INFO] [stdout]    |
[INFO] [stdout] 83 |         let record_len = u16::from_be_bytes([payload[3], payload[4]]) as usize;
[INFO] [stdout]    |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_record_len`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `handshake_len`
[INFO] [stdout]   --> src/sni_parser.rs:96:13
[INFO] [stdout]    |
[INFO] [stdout] 96 |         let handshake_len = ((payload[6] as usize) << 16) | ((payload[7] as usize) << 8) | (payload[8] as usize);
[INFO] [stdout]    |             ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_handshake_len`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `record_len`
[INFO] [stdout]   --> src/sni_parser.rs:83:13
[INFO] [stdout]    |
[INFO] [stdout] 83 |         let record_len = u16::from_be_bytes([payload[3], payload[4]]) as usize;
[INFO] [stdout]    |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_record_len`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `handshake_len`
[INFO] [stdout]   --> src/sni_parser.rs:96:13
[INFO] [stdout]    |
[INFO] [stdout] 96 |         let handshake_len = ((payload[6] as usize) << 16) | ((payload[7] as usize) << 8) | (payload[8] as usize);
[INFO] [stdout]    |             ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_handshake_len`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `flow`
[INFO] [stdout]   --> src/app_identifier.rs:99:21
[INFO] [stdout]    |
[INFO] [stdout] 99 | pub fn identify_app(flow: &FlowKey, sni: Option<&str>) -> (String, String) {
[INFO] [stdout]    |                     ^^^^ help: if this is intentional, prefix it with an underscore: `_flow`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `flow`
[INFO] [stdout]   --> src/app_identifier.rs:99:21
[INFO] [stdout]    |
[INFO] [stdout] 99 | pub fn identify_app(flow: &FlowKey, sni: Option<&str>) -> (String, String) {
[INFO] [stdout]    |                     ^^^^ help: if this is intentional, prefix it with an underscore: `_flow`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/nftables_counter.rs:26:13
[INFO] [stdout]    |
[INFO] [stdout] 26 |         let mut counters = HashMap::new();
[INFO] [stdout]    |             ----^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/nftables_counter.rs:26:13
[INFO] [stdout]    |
[INFO] [stdout] 26 |         let mut counters = HashMap::new();
[INFO] [stdout]    |             ----^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/config.rs:42:13
[INFO] [stdout]    |
[INFO] [stdout] 42 |         let mut config = HashMap::new();
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEFAULT_NFLOG_GROUP` is never used
[INFO] [stdout]   --> src/nflog_listener.rs:12:7
[INFO] [stdout]    |
[INFO] [stdout] 12 | const DEFAULT_NFLOG_GROUP: u16 = 100;
[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 `group` is never read
[INFO] [stdout]   --> src/nflog_listener.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct NflogListener {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 19 |     group: u16,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/config.rs:42:13
[INFO] [stdout]    |
[INFO] [stdout] 42 |         let mut config = HashMap::new();
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEFAULT_NFLOG_GROUP` is never used
[INFO] [stdout]   --> src/nflog_listener.rs:12:7
[INFO] [stdout]    |
[INFO] [stdout] 12 | const DEFAULT_NFLOG_GROUP: u16 = 100;
[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 `group` is never read
[INFO] [stdout]   --> src/nflog_listener.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct NflogListener {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 19 |     group: u16,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/types.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::collections::HashMap;
[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: `parking_lot::RwLock`
[INFO] [stdout]  --> src/types.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use parking_lot::RwLock;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserialize` and `Serialize`
[INFO] [stdout]  --> src/types.rs:4:13
[INFO] [stdout]   |
[INFO] [stdout] 4 | use serde::{Serialize, Deserialize};
[INFO] [stdout]   |             ^^^^^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `FlowValue`
[INFO] [stdout]  --> src/app_identifier.rs:9:29
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::types::{FlowKey, FlowValue};
[INFO] [stdout]   |                             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> src/persistence.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `parking_lot::RwLock`
[INFO] [stdout]  --> src/persistence.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use parking_lot::RwLock;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `parking_lot::RwLock`
[INFO] [stdout]  --> src/api_server.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use parking_lot::RwLock;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Deserialize`
[INFO] [stdout]  --> src/api_server.rs:5:24
[INFO] [stdout]   |
[INFO] [stdout] 5 | use serde::{Serialize, Deserialize};
[INFO] [stdout]   |                        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `FlowKey`, `FlowValue`, `HistoryKey`, and `HistoryValue`
[INFO] [stdout]  --> src/api_server.rs:6:20
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::types::{FlowKey, FlowValue, HistoryKey, HistoryValue};
[INFO] [stdout]   |                    ^^^^^^^  ^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/types.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::collections::HashMap;
[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: `parking_lot::RwLock`
[INFO] [stdout]  --> src/types.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use parking_lot::RwLock;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserialize` and `Serialize`
[INFO] [stdout]  --> src/types.rs:4:13
[INFO] [stdout]   |
[INFO] [stdout] 4 | use serde::{Serialize, Deserialize};
[INFO] [stdout]   |             ^^^^^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `FlowValue`
[INFO] [stdout]  --> src/app_identifier.rs:9:29
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::types::{FlowKey, FlowValue};
[INFO] [stdout]   |                             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> src/persistence.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `parking_lot::RwLock`
[INFO] [stdout]  --> src/persistence.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use parking_lot::RwLock;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `parking_lot::RwLock`
[INFO] [stdout]  --> src/api_server.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use parking_lot::RwLock;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Deserialize`
[INFO] [stdout]  --> src/api_server.rs:5:24
[INFO] [stdout]   |
[INFO] [stdout] 5 | use serde::{Serialize, Deserialize};
[INFO] [stdout]   |                        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `FlowKey`, `FlowValue`, `HistoryKey`, and `HistoryValue`
[INFO] [stdout]  --> src/api_server.rs:6:20
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::types::{FlowKey, FlowValue, HistoryKey, HistoryValue};
[INFO] [stdout]   |                    ^^^^^^^  ^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `record_len`
[INFO] [stdout]   --> src/sni_parser.rs:83:13
[INFO] [stdout]    |
[INFO] [stdout] 83 |         let record_len = u16::from_be_bytes([payload[3], payload[4]]) as usize;
[INFO] [stdout]    |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_record_len`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `handshake_len`
[INFO] [stdout]   --> src/sni_parser.rs:96:13
[INFO] [stdout]    |
[INFO] [stdout] 96 |         let handshake_len = ((payload[6] as usize) << 16) | ((payload[7] as usize) << 8) | (payload[8] as usize);
[INFO] [stdout]    |             ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_handshake_len`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `record_len`
[INFO] [stdout]   --> src/sni_parser.rs:83:13
[INFO] [stdout]    |
[INFO] [stdout] 83 |         let record_len = u16::from_be_bytes([payload[3], payload[4]]) as usize;
[INFO] [stdout]    |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_record_len`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `handshake_len`
[INFO] [stdout]   --> src/sni_parser.rs:96:13
[INFO] [stdout]    |
[INFO] [stdout] 96 |         let handshake_len = ((payload[6] as usize) << 16) | ((payload[7] as usize) << 8) | (payload[8] as usize);
[INFO] [stdout]    |             ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_handshake_len`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `flow`
[INFO] [stdout]   --> src/app_identifier.rs:99:21
[INFO] [stdout]    |
[INFO] [stdout] 99 | pub fn identify_app(flow: &FlowKey, sni: Option<&str>) -> (String, String) {
[INFO] [stdout]    |                     ^^^^ help: if this is intentional, prefix it with an underscore: `_flow`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `flow`
[INFO] [stdout]   --> src/app_identifier.rs:99:21
[INFO] [stdout]    |
[INFO] [stdout] 99 | pub fn identify_app(flow: &FlowKey, sni: Option<&str>) -> (String, String) {
[INFO] [stdout]    |                     ^^^^ help: if this is intentional, prefix it with an underscore: `_flow`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/nftables_counter.rs:26:13
[INFO] [stdout]    |
[INFO] [stdout] 26 |         let mut counters = HashMap::new();
[INFO] [stdout]    |             ----^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/config.rs:42:13
[INFO] [stdout]    |
[INFO] [stdout] 42 |         let mut config = HashMap::new();
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/nftables_counter.rs:26:13
[INFO] [stdout]    |
[INFO] [stdout] 26 |         let mut counters = HashMap::new();
[INFO] [stdout]    |             ----^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/main.rs:81:13
[INFO] [stdout]    |
[INFO] [stdout] 81 |         let mut sni_parser = SniParser::new();
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `flow_id` is never used
[INFO] [stdout]   --> src/types.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | impl FlowKey {
[INFO] [stdout]    | ------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub fn flow_id(&self) -> 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: fields `app_name`, `sni`, and `domain` are never read
[INFO] [stdout]   --> src/types.rs:72:9
[INFO] [stdout]    |
[INFO] [stdout] 70 | pub struct FlowValue {
[INFO] [stdout]    |            --------- fields in this struct
[INFO] [stdout] 71 |     pub app_id: String,
[INFO] [stdout] 72 |     pub app_name: String,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 73 |     pub sni: Option<String>,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 74 |     pub domain: Option<String>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FlowValue` 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: constant `DEFAULT_NFLOG_GROUP` is never used
[INFO] [stdout]   --> src/nflog_listener.rs:12:7
[INFO] [stdout]    |
[INFO] [stdout] 12 | const DEFAULT_NFLOG_GROUP: u16 = 100;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `group` is never read
[INFO] [stdout]   --> src/nflog_listener.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct NflogListener {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 19 |     group: u16,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `packet_counts` is never read
[INFO] [stdout]   --> src/sni_parser.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct SniParser {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] 15 |     /// Track packet count per flow to limit parsing to first 10 packets
[INFO] [stdout] 16 |     packet_counts: HashMap<String, u8>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `should_parse`, `reset`, and `is_tls_client_hello` are never used
[INFO] [stdout]    --> src/sni_parser.rs:28:12
[INFO] [stdout]     |
[INFO] [stdout]  19 | impl SniParser {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  28 |     pub fn should_parse(&mut self, flow_id: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  39 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 172 |     pub fn is_tls_client_hello(&self, packet: &[u8]) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `dns_patterns` and `app_signature` are never read
[INFO] [stdout]   --> src/app_identifier.rs:27:9
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct AppSignature {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub dns_patterns: Vec<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 28 |     #[serde(default)]
[INFO] [stdout] 29 |     pub app_signature: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AppSignature` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `identify_by_domain` and `get_all_apps` are never used
[INFO] [stdout]   --> src/app_identifier.rs:70:12
[INFO] [stdout]    |
[INFO] [stdout] 37 | impl AppIdentifier {
[INFO] [stdout]    | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 70 |     pub fn identify_by_domain(&self, domain: &str) -> Option<(String, String)> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub fn get_all_apps(&self) -> Vec<(String, String)> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `identify_app` is never used
[INFO] [stdout]   --> src/app_identifier.rs:99:8
[INFO] [stdout]    |
[INFO] [stdout] 99 | pub fn identify_app(flow: &FlowKey, sni: Option<&str>) -> (String, String) {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_app_id_from_sni` is never used
[INFO] [stdout]    --> src/app_identifier.rs:110:8
[INFO] [stdout]     |
[INFO] [stdout] 110 | pub fn get_app_id_from_sni(sni: &str) -> Option<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_flows`, `get_flow`, and `get_all_flows` are never used
[INFO] [stdout]   --> src/flow_tracker.rs:28:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl FlowTracker {
[INFO] [stdout]    | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 28 |     pub fn get_flows(&self) -> Arc<RwLock<HashMap<FlowKey, FlowValue>>> {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 75 |     pub fn get_flow(&self, key: &FlowKey) -> Option<FlowValue> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 80 |     pub fn get_all_flows(&self) -> HashMap<FlowKey, FlowValue> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `update_flow` is never used
[INFO] [stdout]    --> src/flow_tracker.rs:111:8
[INFO] [stdout]     |
[INFO] [stdout] 111 | pub fn update_flow(
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cleanup_timeout_flows` is never used
[INFO] [stdout]    --> src/flow_tracker.rs:153:8
[INFO] [stdout]     |
[INFO] [stdout] 153 | pub fn cleanup_timeout_flows(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_daily_summary` is never used
[INFO] [stdout]   --> src/history_aggregator.rs:39:8
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub fn get_daily_summary(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_history` and `get_by_date` are never used
[INFO] [stdout]   --> src/history_aggregator.rs:66:12
[INFO] [stdout]    |
[INFO] [stdout] 57 | impl HistoryAggregator {
[INFO] [stdout]    | ---------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 66 |     pub fn get_history(&self) -> Arc<RwLock<HashMap<HistoryKey, HistoryValue>>> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub fn get_by_date(&self, date: &str) -> HashMap<(u32, String), HistoryValue> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CounterEntry` is never constructed
[INFO] [stdout]  --> src/nftables_counter.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct CounterEntry {
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `query_by_date` is never used
[INFO] [stdout]   --> src/persistence.rs:68:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | impl Persistence {
[INFO] [stdout]    | ---------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn query_by_date(&self, date: &str) -> Vec<(String, String, i64, i64)> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SOCKET_PATH` is never used
[INFO] [stdout]   --> src/api_server.rs:10:7
[INFO] [stdout]    |
[INFO] [stdout] 10 | const SOCKET_PATH: &str = "/var/run/netguard.sock";
[INFO] [stdout]    |       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DashboardStats` is never constructed
[INFO] [stdout]   --> src/api_server.rs:13:8
[INFO] [stdout]    |
[INFO] [stdout] 13 | struct DashboardStats {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConnectionInfo` is never constructed
[INFO] [stdout]   --> src/api_server.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 23 | struct ConnectionInfo {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ApiServer` is never constructed
[INFO] [stdout]   --> src/api_server.rs:32:12
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub struct ApiServer {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/api_server.rs:38:12
[INFO] [stdout]     |
[INFO] [stdout]  37 | impl ApiServer {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout]  38 |     pub fn new(flow_tracker: Arc<FlowTracker>, history_aggregator: Arc<HistoryAggregator>) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  42 |     pub fn start(&self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  60 |     fn handle_connection(&self, stream: &mut UnixStream) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  69 |     fn process_request(&self, request: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     fn get_dashboard_stats(&self) -> DashboardStats {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     fn get_connections(&self) -> Vec<ConnectionInfo> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 115 |     fn get_history(&self) -> Vec<(String, String, u64, u64)> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 122 |     fn get_general_stats(&self) -> serde_json::Value {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     fn get_memory_usage(&self) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `refresh_interval`, `max_connections`, and `dns_cache_ttl` are never read
[INFO] [stdout]  --> src/config.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct Config {
[INFO] [stdout]   |            ------ fields in this struct
[INFO] [stdout] 5 |     pub enabled: bool,
[INFO] [stdout] 6 |     pub refresh_interval: u64,
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 7 |     pub max_connections: usize,
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 8 |     pub dns_cache_ttl: u64,
[INFO] [stdout]   |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `get_all` is never used
[INFO] [stdout]   --> src/config.rs:41:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl Config {
[INFO] [stdout]    | ----------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub fn get_all() -> HashMap<String, String> {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cleanup` is never used
[INFO] [stdout]   --> src/nft_setup.rs:41:8
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub fn cleanup() -> Result<(), std::io::Error> {
[INFO] [stdout]    |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/config.rs:42:13
[INFO] [stdout]    |
[INFO] [stdout] 42 |         let mut config = HashMap::new();
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/main.rs:81:13
[INFO] [stdout]    |
[INFO] [stdout] 81 |         let mut sni_parser = SniParser::new();
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `flow_id` is never used
[INFO] [stdout]   --> src/types.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | impl FlowKey {
[INFO] [stdout]    | ------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub fn flow_id(&self) -> 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: fields `app_name`, `sni`, and `domain` are never read
[INFO] [stdout]   --> src/types.rs:72:9
[INFO] [stdout]    |
[INFO] [stdout] 70 | pub struct FlowValue {
[INFO] [stdout]    |            --------- fields in this struct
[INFO] [stdout] 71 |     pub app_id: String,
[INFO] [stdout] 72 |     pub app_name: String,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 73 |     pub sni: Option<String>,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 74 |     pub domain: Option<String>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FlowValue` 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: constant `DEFAULT_NFLOG_GROUP` is never used
[INFO] [stdout]   --> src/nflog_listener.rs:12:7
[INFO] [stdout]    |
[INFO] [stdout] 12 | const DEFAULT_NFLOG_GROUP: u16 = 100;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `group` is never read
[INFO] [stdout]   --> src/nflog_listener.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct NflogListener {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 19 |     group: u16,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `packet_counts` is never read
[INFO] [stdout]   --> src/sni_parser.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct SniParser {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] 15 |     /// Track packet count per flow to limit parsing to first 10 packets
[INFO] [stdout] 16 |     packet_counts: HashMap<String, u8>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `should_parse`, `reset`, and `is_tls_client_hello` are never used
[INFO] [stdout]    --> src/sni_parser.rs:28:12
[INFO] [stdout]     |
[INFO] [stdout]  19 | impl SniParser {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  28 |     pub fn should_parse(&mut self, flow_id: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  39 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 172 |     pub fn is_tls_client_hello(&self, packet: &[u8]) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `dns_patterns` and `app_signature` are never read
[INFO] [stdout]   --> src/app_identifier.rs:27:9
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct AppSignature {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub dns_patterns: Vec<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 28 |     #[serde(default)]
[INFO] [stdout] 29 |     pub app_signature: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AppSignature` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `identify_by_domain` and `get_all_apps` are never used
[INFO] [stdout]   --> src/app_identifier.rs:70:12
[INFO] [stdout]    |
[INFO] [stdout] 37 | impl AppIdentifier {
[INFO] [stdout]    | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 70 |     pub fn identify_by_domain(&self, domain: &str) -> Option<(String, String)> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub fn get_all_apps(&self) -> Vec<(String, String)> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `identify_app` is never used
[INFO] [stdout]   --> src/app_identifier.rs:99:8
[INFO] [stdout]    |
[INFO] [stdout] 99 | pub fn identify_app(flow: &FlowKey, sni: Option<&str>) -> (String, String) {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_app_id_from_sni` is never used
[INFO] [stdout]    --> src/app_identifier.rs:110:8
[INFO] [stdout]     |
[INFO] [stdout] 110 | pub fn get_app_id_from_sni(sni: &str) -> Option<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_flows`, `get_flow`, and `get_all_flows` are never used
[INFO] [stdout]   --> src/flow_tracker.rs:28:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl FlowTracker {
[INFO] [stdout]    | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 28 |     pub fn get_flows(&self) -> Arc<RwLock<HashMap<FlowKey, FlowValue>>> {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 75 |     pub fn get_flow(&self, key: &FlowKey) -> Option<FlowValue> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 80 |     pub fn get_all_flows(&self) -> HashMap<FlowKey, FlowValue> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `update_flow` is never used
[INFO] [stdout]    --> src/flow_tracker.rs:111:8
[INFO] [stdout]     |
[INFO] [stdout] 111 | pub fn update_flow(
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cleanup_timeout_flows` is never used
[INFO] [stdout]    --> src/flow_tracker.rs:153:8
[INFO] [stdout]     |
[INFO] [stdout] 153 | pub fn cleanup_timeout_flows(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_daily_summary` is never used
[INFO] [stdout]   --> src/history_aggregator.rs:39:8
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub fn get_daily_summary(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_history` and `get_by_date` are never used
[INFO] [stdout]   --> src/history_aggregator.rs:66:12
[INFO] [stdout]    |
[INFO] [stdout] 57 | impl HistoryAggregator {
[INFO] [stdout]    | ---------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 66 |     pub fn get_history(&self) -> Arc<RwLock<HashMap<HistoryKey, HistoryValue>>> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub fn get_by_date(&self, date: &str) -> HashMap<(u32, String), HistoryValue> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CounterEntry` is never constructed
[INFO] [stdout]  --> src/nftables_counter.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct CounterEntry {
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `query_by_date` is never used
[INFO] [stdout]   --> src/persistence.rs:68:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | impl Persistence {
[INFO] [stdout]    | ---------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn query_by_date(&self, date: &str) -> Vec<(String, String, i64, i64)> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SOCKET_PATH` is never used
[INFO] [stdout]   --> src/api_server.rs:10:7
[INFO] [stdout]    |
[INFO] [stdout] 10 | const SOCKET_PATH: &str = "/var/run/netguard.sock";
[INFO] [stdout]    |       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DashboardStats` is never constructed
[INFO] [stdout]   --> src/api_server.rs:13:8
[INFO] [stdout]    |
[INFO] [stdout] 13 | struct DashboardStats {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConnectionInfo` is never constructed
[INFO] [stdout]   --> src/api_server.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 23 | struct ConnectionInfo {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ApiServer` is never constructed
[INFO] [stdout]   --> src/api_server.rs:32:12
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub struct ApiServer {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/api_server.rs:38:12
[INFO] [stdout]     |
[INFO] [stdout]  37 | impl ApiServer {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout]  38 |     pub fn new(flow_tracker: Arc<FlowTracker>, history_aggregator: Arc<HistoryAggregator>) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  42 |     pub fn start(&self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  60 |     fn handle_connection(&self, stream: &mut UnixStream) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  69 |     fn process_request(&self, request: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     fn get_dashboard_stats(&self) -> DashboardStats {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     fn get_connections(&self) -> Vec<ConnectionInfo> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 115 |     fn get_history(&self) -> Vec<(String, String, u64, u64)> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 122 |     fn get_general_stats(&self) -> serde_json::Value {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     fn get_memory_usage(&self) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `refresh_interval`, `max_connections`, and `dns_cache_ttl` are never read
[INFO] [stdout]  --> src/config.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct Config {
[INFO] [stdout]   |            ------ fields in this struct
[INFO] [stdout] 5 |     pub enabled: bool,
[INFO] [stdout] 6 |     pub refresh_interval: u64,
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 7 |     pub max_connections: usize,
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 8 |     pub dns_cache_ttl: u64,
[INFO] [stdout]   |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `get_all` is never used
[INFO] [stdout]   --> src/config.rs:41:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl Config {
[INFO] [stdout]    | ----------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub fn get_all() -> HashMap<String, String> {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cleanup` is never used
[INFO] [stdout]   --> src/nft_setup.rs:41:8
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub fn cleanup() -> Result<(), std::io::Error> {
[INFO] [stdout]    |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] warning: unused dependency `anyhow`
[INFO] [stderr]  --> Cargo.toml:2:1
[INFO] [stderr]   |
[INFO] [stderr] 2 | anyhow = "1"
[INFO] [stderr]   | ^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `cargo::unused_dependencies` is set to `warn` by default
[INFO] [stderr] help: consider removing the dependency on `anyhow`
[INFO] [stderr] warning: unused dependency `bincode`
[INFO] [stderr]  --> Cargo.toml:3:1
[INFO] [stderr]   |
[INFO] [stderr] 3 | bincode = "1"
[INFO] [stderr]   | ^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr] help: consider removing the dependency on `bincode`
[INFO] [stderr] warning: unused dependency `tokio`
[INFO] [stderr]   --> Cargo.toml:25:15
[INFO] [stderr]    |
[INFO] [stderr] 25 | [dependencies.tokio]
[INFO] [stderr]    |               ^^^^^^
[INFO] [stderr]    |
[INFO] [stderr] help: consider removing the dependency on `tokio`
[INFO] [stderr] warning: `netguard` (manifest) generated 3 warnings
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 28.59s
[INFO] [stderr] warning: the following packages contain code that will be rejected by a future version of Rust: nix v0.31.2
[INFO] [stderr] note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 9`
[INFO] running `Command { std: "docker" "inspect" "7930a95202487bd0866fc3365523587e95676c6d5348780cf796b5cad80e49e3", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "7930a95202487bd0866fc3365523587e95676c6d5348780cf796b5cad80e49e3", kill_on_drop: false }`
[INFO] [stdout] 7930a95202487bd0866fc3365523587e95676c6d5348780cf796b5cad80e49e3
