[INFO] cloning repository https://github.com/Cyarun/cctv-sentinel [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Cyarun/cctv-sentinel" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FCyarun%2Fcctv-sentinel", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FCyarun%2Fcctv-sentinel'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] d5d521459b289eec470b873d9ebf7abb9ccd0e46 [INFO] checking Cyarun/cctv-sentinel against a5689b034ad287112f709693384a37f1377eb9cc for pr-129249-3 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FCyarun%2Fcctv-sentinel" "/workspace/builds/worker-7-tc2/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc2/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/Cyarun/cctv-sentinel [INFO] finished tweaking git repo https://github.com/Cyarun/cctv-sentinel [INFO] tweaked toml for git repo https://github.com/Cyarun/cctv-sentinel written to /workspace/builds/worker-7-tc2/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/Cyarun/cctv-sentinel on toolchain a5689b034ad287112f709693384a37f1377eb9cc [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+a5689b034ad287112f709693384a37f1377eb9cc" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/Cyarun/cctv-sentinel 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" "+a5689b034ad287112f709693384a37f1377eb9cc" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/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] 61668475b6c2b97cb3dc4b9548b2e6a3fce26dacf2b20e654f869e8614d8a522 [INFO] running `Command { std: "docker" "start" "61668475b6c2b97cb3dc4b9548b2e6a3fce26dacf2b20e654f869e8614d8a522", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "61668475b6c2b97cb3dc4b9548b2e6a3fce26dacf2b20e654f869e8614d8a522", 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" "61668475b6c2b97cb3dc4b9548b2e6a3fce26dacf2b20e654f869e8614d8a522" "/opt/rustwide/cargo-home/bin/cargo" "+a5689b034ad287112f709693384a37f1377eb9cc" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "61668475b6c2b97cb3dc4b9548b2e6a3fce26dacf2b20e654f869e8614d8a522", 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" "61668475b6c2b97cb3dc4b9548b2e6a3fce26dacf2b20e654f869e8614d8a522" "/opt/rustwide/cargo-home/bin/cargo" "+a5689b034ad287112f709693384a37f1377eb9cc" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.183 [INFO] [stderr] Compiling serde_core v1.0.228 [INFO] [stderr] Compiling cc v1.2.57 [INFO] [stderr] Compiling zerofrom-derive v0.1.6 [INFO] [stderr] Checking http v1.4.0 [INFO] [stderr] Compiling yoke-derive v0.8.1 [INFO] [stderr] Compiling tokio-macros v2.6.1 [INFO] [stderr] Checking slab v0.4.12 [INFO] [stderr] Checking tracing v0.1.44 [INFO] [stderr] Compiling zerovec-derive v0.11.2 [INFO] [stderr] Compiling zerocopy v0.8.42 [INFO] [stderr] Checking generic-array v0.14.7 [INFO] [stderr] Checking hashbrown v0.16.1 [INFO] [stderr] Checking bitflags v2.11.0 [INFO] [stderr] Compiling openssl v0.10.76 [INFO] [stderr] Checking httpdate v1.0.3 [INFO] [stderr] Checking mime v0.3.17 [INFO] [stderr] Checking futures-util v0.3.32 [INFO] [stderr] Compiling ahash v0.8.12 [INFO] [stderr] Compiling unicase v2.9.0 [INFO] [stderr] Checking crypto-common v0.1.7 [INFO] [stderr] Checking block-buffer v0.10.4 [INFO] [stderr] Checking memchr v2.8.0 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Checking digest v0.10.7 [INFO] [stderr] Compiling thiserror-impl v1.0.69 [INFO] [stderr] Compiling mime_guess v2.0.5 [INFO] [stderr] Compiling thiserror v2.0.18 [INFO] [stderr] Compiling time-core v0.1.8 [INFO] [stderr] Compiling num-conv v0.2.0 [INFO] [stderr] Checking sha1 v0.10.6 [INFO] [stderr] Compiling time-macros v0.2.27 [INFO] [stderr] Checking deranged v0.5.8 [INFO] [stderr] Checking inout v0.1.4 [INFO] [stderr] Checking num-integer v0.1.46 [INFO] [stderr] Compiling multer v3.1.0 [INFO] [stderr] Checking encoding_rs v0.8.35 [INFO] [stderr] Checking http-body v1.0.1 [INFO] [stderr] Checking http-body-util v0.1.3 [INFO] [stderr] Checking indexmap v2.13.0 [INFO] [stderr] Checking regex-syntax v0.8.10 [INFO] [stderr] Checking data-encoding v2.10.0 [INFO] [stderr] Checking num-bigint v0.4.6 [INFO] [stderr] Checking cipher v0.4.4 [INFO] [stderr] Checking errno v0.3.14 [INFO] [stderr] Checking parking_lot_core v0.9.12 [INFO] [stderr] Checking signal-hook-registry v1.4.8 [INFO] [stderr] Checking zerofrom v0.1.6 [INFO] [stderr] Checking mio v1.1.1 [INFO] [stderr] Checking socket2 v0.6.3 [INFO] [stderr] Checking yoke v0.8.1 [INFO] [stderr] Checking getrandom v0.2.17 [INFO] [stderr] Checking thiserror v1.0.69 [INFO] [stderr] Checking parking_lot v0.12.5 [INFO] [stderr] Checking rand_core v0.6.4 [INFO] [stderr] Compiling async-trait v0.1.89 [INFO] [stderr] Checking spin v0.9.8 [INFO] [stderr] Compiling anyhow v1.0.102 [INFO] [stderr] Compiling openssl-sys v0.9.112 [INFO] [stderr] Checking zerovec v0.11.5 [INFO] [stderr] Checking zerotrie v0.2.3 [INFO] [stderr] Compiling ring v0.17.14 [INFO] [stderr] Compiling libsqlite3-sys v0.28.0 [INFO] [stderr] Checking untrusted v0.9.0 [INFO] [stderr] Checking regex-automata v0.4.14 [INFO] [stderr] Checking blowfish v0.9.1 [INFO] [stderr] Checking tokio v1.50.0 [INFO] [stderr] Checking getrandom v0.4.2 [INFO] [stderr] Checking pem v3.0.6 [INFO] [stderr] Compiling async-stream-impl v0.3.6 [INFO] [stderr] Checking iana-time-zone v0.1.65 [INFO] [stderr] Checking fallible-iterator v0.3.0 [INFO] [stderr] Compiling native-tls v0.2.18 [INFO] [stderr] Checking subtle v2.6.1 [INFO] [stderr] Checking fallible-streaming-iterator v0.1.9 [INFO] [stderr] Checking time v0.3.47 [INFO] [stderr] Checking matchit v0.7.3 [INFO] [stderr] Checking http-range-header v0.4.2 [INFO] [stderr] Checking bcrypt v0.15.1 [INFO] [stderr] Checking tinystr v0.8.2 [INFO] [stderr] Checking potential_utf v0.1.4 [INFO] [stderr] Checking async-stream v0.3.6 [INFO] [stderr] Checking icu_collections v2.1.1 [INFO] [stderr] Checking uuid v1.22.0 [INFO] [stderr] Checking icu_locale_core v2.1.1 [INFO] [stderr] Checking serde v1.0.228 [INFO] [stderr] Checking serde_path_to_error v0.1.20 [INFO] [stderr] Checking axum-core v0.4.5 [INFO] [stderr] Checking tower v0.4.13 [INFO] [stderr] Checking icu_provider v2.1.1 [INFO] [stderr] Checking serde_spanned v0.6.9 [INFO] [stderr] Checking serde_urlencoded v0.7.1 [INFO] [stderr] Checking toml_datetime v0.6.11 [INFO] [stderr] Checking chrono v0.4.44 [INFO] [stderr] Checking icu_normalizer v2.1.1 [INFO] [stderr] Checking icu_properties v2.1.2 [INFO] [stderr] Checking simple_asn1 v0.6.4 [INFO] [stderr] Checking toml_edit v0.22.27 [INFO] [stderr] Checking matchers v0.2.0 [INFO] [stderr] Checking tracing-subscriber v0.3.23 [INFO] [stderr] Checking toml v0.8.23 [INFO] [stderr] Checking idna_adapter v1.2.1 [INFO] [stderr] Checking idna v1.1.0 [INFO] [stderr] Checking url v2.5.8 [INFO] [stderr] Checking tokio-util v0.7.18 [INFO] [stderr] Checking tower v0.5.3 [INFO] [stderr] Checking tower-http v0.6.8 [INFO] [stderr] Checking jsonwebtoken v9.3.1 [INFO] [stderr] Checking ppv-lite86 v0.2.21 [INFO] [stderr] Checking h2 v0.4.13 [INFO] [stderr] Checking tower-http v0.5.2 [INFO] [stderr] Checking hashbrown v0.14.5 [INFO] [stderr] Checking rand_chacha v0.3.1 [INFO] [stderr] Checking rand v0.8.5 [INFO] [stderr] Checking hashlink v0.9.1 [INFO] [stderr] Checking tokio-native-tls v0.3.1 [INFO] [stderr] Checking tungstenite v0.24.0 [INFO] [stderr] Checking tokio-tungstenite v0.24.0 [INFO] [stderr] Checking hyper v1.8.1 [INFO] [stderr] Checking hyper-util v0.1.20 [INFO] [stderr] Checking rusqlite v0.31.0 [INFO] [stderr] Checking hyper-tls v0.6.0 [INFO] [stderr] Checking axum v0.7.9 [INFO] [stderr] Checking reqwest v0.12.28 [INFO] [stderr] Checking cctv-sentinel v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `warn` [INFO] [stdout] --> src/alerts/telegram.rs:4:28 [INFO] [stdout] | [INFO] [stdout] 4 | 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] --> src/alerts/telegram.rs:4:28 [INFO] [stdout] | [INFO] [stdout] 4 | 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: method `main_stream_url` is never used [INFO] [stdout] --> src/camera/mod.rs:146:6 [INFO] [stdout] | [INFO] [stdout] 102 | impl CameraManager { [INFO] [stdout] | ------------------ method in this implementation [INFO] [stdout] ... [INFO] [stdout] 146 | fn main_stream_url(&self, main_channel: u16) -> 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: unused import: `warn` [INFO] [stdout] --> src/alerts/telegram.rs:4:28 [INFO] [stdout] | [INFO] [stdout] 4 | 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] --> src/alerts/telegram.rs:4:28 [INFO] [stdout] | [INFO] [stdout] 4 | 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: constant `TELEGRAM_BOT_TOKEN` is never used [INFO] [stdout] --> src/alerts/mod.rs:17:7 [INFO] [stdout] | [INFO] [stdout] 17 | const TELEGRAM_BOT_TOKEN: &str = "8287023378:AAGNZ4gX8cKdkO4wxeWBCT1hhg25zAR6PA4"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `CHAT_IDS` is never used [INFO] [stdout] --> src/alerts/mod.rs:18:7 [INFO] [stdout] | [INFO] [stdout] 18 | const CHAT_IDS: &[&str] = &["6052029324", "6258808484"]; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `FRONT_CAM_COOLDOWN_SECS` is never used [INFO] [stdout] --> src/alerts/mod.rs:21:7 [INFO] [stdout] | [INFO] [stdout] 21 | const FRONT_CAM_COOLDOWN_SECS: i64 = 30; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `INTERIOR_CAM_COOLDOWN_SECS` is never used [INFO] [stdout] --> src/alerts/mod.rs:22:7 [INFO] [stdout] | [INFO] [stdout] 22 | const INTERIOR_CAM_COOLDOWN_SECS: i64 = 15; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `CLIP_PRE_SECS` is never used [INFO] [stdout] --> src/alerts/mod.rs:25:7 [INFO] [stdout] | [INFO] [stdout] 25 | const CLIP_PRE_SECS: u32 = 5; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `CLIP_POST_SECS` is never used [INFO] [stdout] --> src/alerts/mod.rs:26:7 [INFO] [stdout] | [INFO] [stdout] 26 | const CLIP_POST_SECS: u32 = 7; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `CLIP_TOTAL_SECS` is never used [INFO] [stdout] --> src/alerts/mod.rs:27:7 [INFO] [stdout] | [INFO] [stdout] 27 | const CLIP_TOTAL_SECS: u32 = CLIP_PRE_SECS + CLIP_POST_SECS; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `OPENROUTER_API_URL` is never used [INFO] [stdout] --> src/alerts/mod.rs:29:7 [INFO] [stdout] | [INFO] [stdout] 29 | const OPENROUTER_API_URL: &str = "https://openrouter.ai/api/v1/chat/completions"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `OPENROUTER_MODEL` is never used [INFO] [stdout] --> src/alerts/mod.rs:30:7 [INFO] [stdout] | [INFO] [stdout] 30 | const OPENROUTER_MODEL: &str = "google/gemini-2.0-flash-001"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AlertEvent` is never constructed [INFO] [stdout] --> src/alerts/mod.rs:35:12 [INFO] [stdout] | [INFO] [stdout] 35 | pub struct AlertEvent { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AlertManager` is never constructed [INFO] [stdout] --> src/alerts/mod.rs:50:12 [INFO] [stdout] | [INFO] [stdout] 50 | pub struct AlertManager { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> src/alerts/mod.rs:73:10 [INFO] [stdout] | [INFO] [stdout] 71 | impl AlertManager { [INFO] [stdout] | ----------------- associated items in this implementation [INFO] [stdout] 72 | /// Create a new AlertManager. Initializes SQLite schema. [INFO] [stdout] 73 | pub fn new( [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 121 | pub fn is_cooldown_active(&self, camera_id: u32) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 138 | pub async fn trigger_alert( [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 249 | async fn capture_clip( [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 284 | async fn ai_analyze_clip( [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 366 | async fn store_event( [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 390 | pub async fn recent_events( [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 425 | pub fn bot(&self) -> &TelegramBot { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 430 | pub fn chat_ids(&self) -> &[String] { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `base64_encode` is never used [INFO] [stdout] --> src/alerts/mod.rs:436:4 [INFO] [stdout] | [INFO] [stdout] 436 | fn base64_encode(data: &[u8]) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `TELEGRAM_API_BASE` is never used [INFO] [stdout] --> src/alerts/telegram.rs:6:7 [INFO] [stdout] | [INFO] [stdout] 6 | const TELEGRAM_API_BASE: &str = "https://api.telegram.org/bot"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TelegramBot` is never constructed [INFO] [stdout] --> src/alerts/telegram.rs:10:12 [INFO] [stdout] | [INFO] [stdout] 10 | pub struct TelegramBot { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TgResponse` is never constructed [INFO] [stdout] --> src/alerts/telegram.rs:16:8 [INFO] [stdout] | [INFO] [stdout] 16 | struct TgResponse { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `BotCommand` is never used [INFO] [stdout] --> src/alerts/telegram.rs:23:10 [INFO] [stdout] | [INFO] [stdout] 23 | pub enum BotCommand { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> src/alerts/telegram.rs:31:10 [INFO] [stdout] | [INFO] [stdout] 30 | impl TelegramBot { [INFO] [stdout] | ---------------- associated items in this implementation [INFO] [stdout] 31 | pub fn new(bot_token: &str) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 44 | pub fn default_bot() -> Self { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 48 | fn api_url(&self, method: &str) -> String { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 53 | pub async fn send_message(&self, chat_id: &str, text: &str) -> Result<(), Box> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 79 | pub async fn send_video( [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 122 | pub async fn broadcast_video( [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 136 | pub async fn broadcast_message( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 149 | pub fn parse_command(text: &str) -> BotCommand { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 167 | pub fn help_text() -> &'static str { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 177 | pub async fn poll_updates( [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `DVR_IP` is never used [INFO] [stdout] --> src/camera/mod.rs:19:7 [INFO] [stdout] | [INFO] [stdout] 19 | const DVR_IP: &str = "192.168.1.15"; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `DVR_USER` is never used [INFO] [stdout] --> src/camera/mod.rs:20:7 [INFO] [stdout] | [INFO] [stdout] 20 | const DVR_USER: &str = "admin"; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `DVR_PASS` is never used [INFO] [stdout] --> src/camera/mod.rs:21:7 [INFO] [stdout] | [INFO] [stdout] 21 | const DVR_PASS: &str = "Sv@123456"; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `DVR_PORT` is never used [INFO] [stdout] --> src/camera/mod.rs:22:7 [INFO] [stdout] | [INFO] [stdout] 22 | const DVR_PORT: u16 = 554; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `FRAME_WIDTH` is never used [INFO] [stdout] --> src/camera/mod.rs:25:11 [INFO] [stdout] | [INFO] [stdout] 25 | pub const FRAME_WIDTH: u32 = 352; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `FRAME_HEIGHT` is never used [INFO] [stdout] --> src/camera/mod.rs:26:11 [INFO] [stdout] | [INFO] [stdout] 26 | pub const FRAME_HEIGHT: u32 = 288; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `FRAME_BYTES` is never used [INFO] [stdout] --> src/camera/mod.rs:28:11 [INFO] [stdout] | [INFO] [stdout] 28 | pub const FRAME_BYTES: usize = (FRAME_WIDTH as usize) * (FRAME_HEIGHT as usize) * 3; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `RTSP_TIMEOUT_US` is never used [INFO] [stdout] --> src/camera/mod.rs:31:7 [INFO] [stdout] | [INFO] [stdout] 31 | const RTSP_TIMEOUT_US: &str = "5000000"; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `ALL_CHANNELS` is never used [INFO] [stdout] --> src/camera/mod.rs:36:7 [INFO] [stdout] | [INFO] [stdout] 36 | const ALL_CHANNELS: [u16; 11] = [101, 201, 301, 401, 501, 601, 701, 801, 901, 1001, 1101]; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `FRONT_CAMERAS` is never used [INFO] [stdout] --> src/camera/mod.rs:39:7 [INFO] [stdout] | [INFO] [stdout] 39 | const FRONT_CAMERAS: [u16; 3] = [101, 201, 301]; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `CameraInfo` is never constructed [INFO] [stdout] --> src/camera/mod.rs:43:12 [INFO] [stdout] | [INFO] [stdout] 43 | pub struct CameraInfo { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `camera_registry` is never used [INFO] [stdout] --> src/camera/mod.rs:49:4 [INFO] [stdout] | [INFO] [stdout] 49 | fn camera_registry() -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Frame` is never constructed [INFO] [stdout] --> src/camera/mod.rs:69:12 [INFO] [stdout] | [INFO] [stdout] 69 | pub struct Frame { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `now_ms` is never used [INFO] [stdout] --> src/camera/mod.rs:79:6 [INFO] [stdout] | [INFO] [stdout] 77 | impl Frame { [INFO] [stdout] | ---------- associated function in this implementation [INFO] [stdout] 78 | /// Current unix timestamp in milliseconds. [INFO] [stdout] 79 | fn now_ms() -> u64 { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `CameraManager` is never constructed [INFO] [stdout] --> src/camera/mod.rs:94:12 [INFO] [stdout] | [INFO] [stdout] 94 | pub struct CameraManager { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> src/camera/mod.rs:104:10 [INFO] [stdout] | [INFO] [stdout] 102 | impl CameraManager { [INFO] [stdout] | ------------------ associated items in this implementation [INFO] [stdout] 103 | /// Create a new CameraManager with default DVR credentials. [INFO] [stdout] 104 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 115 | pub fn with_config(ip: &str, user: &str, pass: &str, port: u16) -> Self { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 126 | pub fn channel_ids(&self) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 131 | pub fn camera_info(&self, channel: u16) -> Option<&CameraInfo> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 137 | fn sub_stream_url(&self, main_channel: u16) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 146 | fn main_stream_url(&self, main_channel: u16) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 157 | pub async fn grab_frame(&self, channel: u16) -> Result { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 211 | pub async fn grab_frames_parallel(&self, channels: &[u16]) -> HashMap { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 245 | pub async fn grab_frames_cascade(&self) -> HashMap { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `grab_frame_subprocess` is never used [INFO] [stdout] --> src/camera/mod.rs:282:10 [INFO] [stdout] | [INFO] [stdout] 282 | async fn grab_frame_subprocess(rtsp_url: &str, channel: u16) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `GRID_COLS` is never used [INFO] [stdout] --> src/camera/gridmap.rs:9:7 [INFO] [stdout] | [INFO] [stdout] 9 | const GRID_COLS: usize = 22; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `GRID_ROWS` is never used [INFO] [stdout] --> src/camera/gridmap.rs:10:7 [INFO] [stdout] | [INFO] [stdout] 10 | const GRID_ROWS: usize = 18; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HEX_PER_ROW` is never used [INFO] [stdout] --> src/camera/gridmap.rs:12:7 [INFO] [stdout] | [INFO] [stdout] 12 | const HEX_PER_ROW: usize = 6; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `BITS_PER_ROW` is never used [INFO] [stdout] --> src/camera/gridmap.rs:14:7 [INFO] [stdout] | [INFO] [stdout] 14 | const BITS_PER_ROW: u32 = 24; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `GridMap` is never constructed [INFO] [stdout] --> src/camera/gridmap.rs:18:12 [INFO] [stdout] | [INFO] [stdout] 18 | pub struct GridMap { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `from_hex`, `is_monitored`, `grid_row`, `grid_col`, and `full_frame` are never used [INFO] [stdout] --> src/camera/gridmap.rs:27:10 [INFO] [stdout] | [INFO] [stdout] 22 | impl GridMap { [INFO] [stdout] | ------------ associated items in this implementation [INFO] [stdout] ... [INFO] [stdout] 27 | pub fn from_hex(hex: &str) -> Self { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 47 | pub fn is_monitored(&self, x_norm: f32, y_norm: f32) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 54 | pub fn grid_row(&self, y_norm: f32) -> usize { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 59 | pub fn grid_col(&self, x_norm: f32) -> usize { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 64 | pub fn full_frame() -> Self { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_gridmaps` is never used [INFO] [stdout] --> src/camera/gridmap.rs:75:8 [INFO] [stdout] | [INFO] [stdout] 75 | pub fn get_gridmaps() -> HashMap { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `DEFAULT_MODEL_PATH` is never used [INFO] [stdout] --> src/detector/mod.rs:22:7 [INFO] [stdout] | [INFO] [stdout] 22 | const DEFAULT_MODEL_PATH: &str = "/opt/cctvanalytics/models/yolo26n_cctv/bestv4.onnx"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `CONFIDENCE_THRESHOLD` is never used [INFO] [stdout] --> src/detector/mod.rs:23:7 [INFO] [stdout] | [INFO] [stdout] 23 | const CONFIDENCE_THRESHOLD: f32 = 0.30; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MODEL_INPUT_SIZE` is never used [INFO] [stdout] --> src/detector/mod.rs:24:7 [INFO] [stdout] | [INFO] [stdout] 24 | const MODEL_INPUT_SIZE: u32 = 352; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `CLASSES` is never used [INFO] [stdout] --> src/detector/mod.rs:27:11 [INFO] [stdout] | [INFO] [stdout] 27 | pub const CLASSES: [&str; 10] = [ [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Detection` is never constructed [INFO] [stdout] --> src/detector/mod.rs:36:12 [INFO] [stdout] | [INFO] [stdout] 36 | pub struct Detection { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `RawDetection` is never constructed [INFO] [stdout] --> src/detector/mod.rs:57:8 [INFO] [stdout] | [INFO] [stdout] 57 | struct RawDetection { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `YoloDetector` is never constructed [INFO] [stdout] --> src/detector/mod.rs:70:12 [INFO] [stdout] | [INFO] [stdout] 70 | pub struct YoloDetector { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> src/detector/mod.rs:82:10 [INFO] [stdout] | [INFO] [stdout] 78 | impl YoloDetector { [INFO] [stdout] | ----------------- associated items in this implementation [INFO] [stdout] ... [INFO] [stdout] 82 | pub fn new(script_dir: &Path) -> Result { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 87 | pub fn with_model(script_dir: &Path, model_path: &Path) -> Result { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 110 | pub fn set_confidence_threshold(&mut self, threshold: f32) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 122 | pub async fn detect(&self, frame: &Frame) -> Result> { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 210 | pub async fn detect_batch( [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 233 | pub fn filter_roi(detections: &[Detection]) -> Vec<&Detection> { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 238 | pub fn has_class_in_roi(detections: &[Detection], class: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_MATCH_DISTANCE` is never used [INFO] [stdout] --> src/tracker/mod.rs:12:7 [INFO] [stdout] | [INFO] [stdout] 12 | const MAX_MATCH_DISTANCE: f64 = 0.12; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `PATCH_WEIGHT` is never used [INFO] [stdout] --> src/tracker/mod.rs:16:7 [INFO] [stdout] | [INFO] [stdout] 16 | const PATCH_WEIGHT: f64 = 0.35; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_FRAMES_MISSING` is never used [INFO] [stdout] --> src/tracker/mod.rs:19:7 [INFO] [stdout] | [INFO] [stdout] 19 | const MAX_FRAMES_MISSING: u32 = 30; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `CROSS_CAM_LINK_WINDOW_SECS` is never used [INFO] [stdout] --> src/tracker/mod.rs:22:7 [INFO] [stdout] | [INFO] [stdout] 22 | const CROSS_CAM_LINK_WINDOW_SECS: i64 = 30; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `PATCH_SIZE` is never used [INFO] [stdout] --> src/tracker/mod.rs:25:7 [INFO] [stdout] | [INFO] [stdout] 25 | const PATCH_SIZE: usize = 32; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `Intent` is never used [INFO] [stdout] --> src/tracker/mod.rs:31:10 [INFO] [stdout] | [INFO] [stdout] 31 | pub enum Intent { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TrackedObject` is never constructed [INFO] [stdout] --> src/tracker/mod.rs:43:12 [INFO] [stdout] | [INFO] [stdout] 43 | pub struct TrackedObject { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `update`, `predict_position`, `last_position`, `mark_alerted`, and `is_stationary` are never used [INFO] [stdout] --> src/tracker/mod.rs:63:10 [INFO] [stdout] | [INFO] [stdout] 62 | impl TrackedObject { [INFO] [stdout] | ------------------ associated items in this implementation [INFO] [stdout] 63 | pub fn new(class: &str, x: f64, y: f64, patch: Vec, camera_id: u32) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 82 | pub fn update(&mut self, x: f64, y: f64, patch: Vec) { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 93 | pub fn predict_position(&self, steps: u32) -> Option<(f64, f64)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 98 | pub fn last_position(&self) -> (f64, f64) { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 103 | pub fn mark_alerted(&mut self) { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 108 | pub fn is_stationary(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Detection` is never constructed [INFO] [stdout] --> src/tracker/mod.rs:117:12 [INFO] [stdout] | [INFO] [stdout] 117 | pub struct Detection { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ObjectTracker` is never constructed [INFO] [stdout] --> src/tracker/mod.rs:131:12 [INFO] [stdout] | [INFO] [stdout] 131 | pub struct ObjectTracker { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> src/tracker/mod.rs:143:10 [INFO] [stdout] | [INFO] [stdout] 142 | impl ObjectTracker { [INFO] [stdout] | ------------------ associated items in this implementation [INFO] [stdout] 143 | pub fn new(front_camera_ids: Vec) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 154 | pub fn update(&mut self, camera_id: u32, detections: &[Detection]) -> Vec { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 241 | pub fn get_track(&self, id: &str) -> Option<&TrackedObject> { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 246 | pub fn get_track_mut(&mut self, id: &str) -> Option<&mut TrackedObject> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 251 | pub fn tracks_for_camera(&self, camera_id: u32) -> Vec<&TrackedObject> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 256 | pub fn all_tracks(&self) -> Vec<&TrackedObject> { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 261 | pub fn track_count(&self) -> usize { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 266 | fn prune_stale(&mut self, camera_id: u32) { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 289 | fn try_cross_camera_link(&mut self, target_camera_id: u32, det: &Detection) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 323 | fn classify_intents(&mut self, camera_id: u32) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `match_score` is never used [INFO] [stdout] --> src/tracker/mod.rs:342:4 [INFO] [stdout] | [INFO] [stdout] 342 | fn match_score(track: &TrackedObject, det: &Detection) -> f64 { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `patch_similarity` is never used [INFO] [stdout] --> src/tracker/mod.rs:358:4 [INFO] [stdout] | [INFO] [stdout] 358 | fn patch_similarity(a: &[u8], b: &[u8]) -> f64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `classify_intent` is never used [INFO] [stdout] --> src/tracker/mod.rs:388:4 [INFO] [stdout] | [INFO] [stdout] 388 | fn classify_intent(track: &TrackedObject) -> Intent { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `VELOCITY_WINDOW` is never used [INFO] [stdout] --> src/tracker/trajectory.rs:4:7 [INFO] [stdout] | [INFO] [stdout] 4 | const VELOCITY_WINDOW: usize = 10; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `STATIONARY_THRESHOLD` is never used [INFO] [stdout] --> src/tracker/trajectory.rs:7:7 [INFO] [stdout] | [INFO] [stdout] 7 | const STATIONARY_THRESHOLD: f64 = 0.005; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TrajectoryForecaster` is never constructed [INFO] [stdout] --> src/tracker/trajectory.rs:11:12 [INFO] [stdout] | [INFO] [stdout] 11 | pub struct TrajectoryForecaster { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> src/tracker/trajectory.rs:23:10 [INFO] [stdout] | [INFO] [stdout] 22 | impl TrajectoryForecaster { [INFO] [stdout] | ------------------------- associated items in this implementation [INFO] [stdout] 23 | pub fn new(alpha: f64, max_history: usize) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 33 | pub fn default_forecaster() -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 38 | pub fn push(&mut self, x: f64, y: f64) { [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 60 | pub fn current_smoothed(&self) -> Option<(f64, f64)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 66 | pub fn median_velocity(&self) -> (f64, f64) { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 91 | pub fn is_stationary(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 99 | pub fn predict_position(&self, steps_ahead: u32) -> Option<(f64, f64)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 107 | pub fn predict_trajectory(&self, steps: u32) -> Vec<(f64, f64)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 112 | pub fn len(&self) -> usize { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 116 | pub fn is_empty(&self) -> bool { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 122 | pub fn linear_regression_slope(&self) -> Option<(f64, f64)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `median` is never used [INFO] [stdout] --> src/tracker/trajectory.rs:139:4 [INFO] [stdout] | [INFO] [stdout] 139 | fn median(v: &mut Vec) -> f64 { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lin_reg_slope` is never used [INFO] [stdout] --> src/tracker/trajectory.rs:153:4 [INFO] [stdout] | [INFO] [stdout] 153 | fn lin_reg_slope(vals: &[f64]) -> f64 { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple fields are never read [INFO] [stdout] --> src/web/mod.rs:56:7 [INFO] [stdout] | [INFO] [stdout] 55 | pub struct SettingsUpdate { [INFO] [stdout] | -------------- fields in this struct [INFO] [stdout] 56 | pub dvr_ip: Option, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 57 | pub dvr_username: Option, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 58 | pub dvr_password: Option, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 59 | pub telegram_enabled: Option, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 60 | pub telegram_bot_token: Option, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 61 | pub confidence_threshold: Option, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 62 | pub capture_interval_secs: Option, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SettingsUpdate` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/web/mod.rs:255:32 [INFO] [stdout] | [INFO] [stdout] 255 | if socket.send(Message::Text(ack.to_string().into())).await.is_err() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this method call relies on the `impl Into for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors [INFO] [stdout] = note: `#[deny(self_type_conversion)]` on by default [INFO] [stdout] help: consider removing the conversion call [INFO] [stdout] | [INFO] [stdout] 255 - if socket.send(Message::Text(ack.to_string().into())).await.is_err() { [INFO] [stdout] 255 + if socket.send(Message::Text(ack.to_string())).await.is_err() { [INFO] [stdout] | [INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint [INFO] [stdout] | [INFO] [stdout] 255 - if socket.send(Message::Text(ack.to_string().into())).await.is_err() { [INFO] [stdout] 255 + if socket.send(Message::Text(>::into(ack.to_string()))).await.is_err() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/web/mod.rs:265:42 [INFO] [stdout] | [INFO] [stdout] 265 | if socket.send(Message::Text(event_json.into())).await.is_err() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this method call relies on the `impl Into for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors [INFO] [stdout] help: consider removing the conversion call [INFO] [stdout] | [INFO] [stdout] 265 - if socket.send(Message::Text(event_json.into())).await.is_err() { [INFO] [stdout] 265 + if socket.send(Message::Text(event_json)).await.is_err() { [INFO] [stdout] | [INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint [INFO] [stdout] | [INFO] [stdout] 265 - if socket.send(Message::Text(event_json.into())).await.is_err() { [INFO] [stdout] 265 + if socket.send(Message::Text(>::into(event_json))).await.is_err() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] error: could not compile `cctv-sentinel` (bin "cctv-sentinel") due to 2 previous errors; 72 warnings emitted [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stdout] warning: constant `CLIP_PRE_SECS` is never used [INFO] [stdout] --> src/alerts/mod.rs:25:7 [INFO] [stdout] | [INFO] [stdout] 25 | const CLIP_PRE_SECS: u32 = 5; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `CLIP_POST_SECS` is never used [INFO] [stdout] --> src/alerts/mod.rs:26:7 [INFO] [stdout] | [INFO] [stdout] 26 | const CLIP_POST_SECS: u32 = 7; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `CLIP_TOTAL_SECS` is never used [INFO] [stdout] --> src/alerts/mod.rs:27:7 [INFO] [stdout] | [INFO] [stdout] 27 | const CLIP_TOTAL_SECS: u32 = CLIP_PRE_SECS + CLIP_POST_SECS; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `OPENROUTER_API_URL` is never used [INFO] [stdout] --> src/alerts/mod.rs:29:7 [INFO] [stdout] | [INFO] [stdout] 29 | const OPENROUTER_API_URL: &str = "https://openrouter.ai/api/v1/chat/completions"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `OPENROUTER_MODEL` is never used [INFO] [stdout] --> src/alerts/mod.rs:30:7 [INFO] [stdout] | [INFO] [stdout] 30 | const OPENROUTER_MODEL: &str = "google/gemini-2.0-flash-001"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AlertEvent` is never constructed [INFO] [stdout] --> src/alerts/mod.rs:35:12 [INFO] [stdout] | [INFO] [stdout] 35 | pub struct AlertEvent { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple fields are never read [INFO] [stdout] --> src/alerts/mod.rs:51:3 [INFO] [stdout] | [INFO] [stdout] 50 | pub struct AlertManager { [INFO] [stdout] | ------------ fields in this struct [INFO] [stdout] 51 | bot: TelegramBot, [INFO] [stdout] | ^^^ [INFO] [stdout] 52 | chat_ids: Vec, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 53 | /// DVR connection info for RTSP clip grabbing. [INFO] [stdout] 54 | dvr_ip: String, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 55 | dvr_user: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 56 | dvr_pass: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 57 | /// Directory to store captured clips. [INFO] [stdout] 58 | clips_dir: PathBuf, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 64 | db: Arc>, [INFO] [stdout] | ^^ [INFO] [stdout] 65 | /// OpenRouter API key (read from OPENROUTER_API_KEY env var). [INFO] [stdout] 66 | openrouter_key: Option, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 67 | /// HTTP client reused across requests. [INFO] [stdout] 68 | client: reqwest::Client, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple methods are never used [INFO] [stdout] --> src/alerts/mod.rs:138:16 [INFO] [stdout] | [INFO] [stdout] 71 | impl AlertManager { [INFO] [stdout] | ----------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 138 | pub async fn trigger_alert( [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 249 | async fn capture_clip( [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 284 | async fn ai_analyze_clip( [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 366 | async fn store_event( [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 390 | pub async fn recent_events( [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 425 | pub fn bot(&self) -> &TelegramBot { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 430 | pub fn chat_ids(&self) -> &[String] { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `TELEGRAM_API_BASE` is never used [INFO] [stdout] --> src/alerts/telegram.rs:6:7 [INFO] [stdout] | [INFO] [stdout] 6 | const TELEGRAM_API_BASE: &str = "https://api.telegram.org/bot"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `bot_token` and `client` are never read [INFO] [stdout] --> src/alerts/telegram.rs:11:3 [INFO] [stdout] | [INFO] [stdout] 10 | pub struct TelegramBot { [INFO] [stdout] | ----------- fields in this struct [INFO] [stdout] 11 | bot_token: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 12 | client: reqwest::Client, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `TelegramBot` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TgResponse` is never constructed [INFO] [stdout] --> src/alerts/telegram.rs:16:8 [INFO] [stdout] | [INFO] [stdout] 16 | struct TgResponse { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> src/alerts/telegram.rs:44:10 [INFO] [stdout] | [INFO] [stdout] 30 | impl TelegramBot { [INFO] [stdout] | ---------------- associated items in this implementation [INFO] [stdout] ... [INFO] [stdout] 44 | pub fn default_bot() -> Self { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 48 | fn api_url(&self, method: &str) -> String { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 53 | pub async fn send_message(&self, chat_id: &str, text: &str) -> Result<(), Box> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 79 | pub async fn send_video( [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 122 | pub async fn broadcast_video( [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 136 | pub async fn broadcast_message( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 167 | pub fn help_text() -> &'static str { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 177 | pub async fn poll_updates( [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `FRAME_WIDTH` is never used [INFO] [stdout] --> src/camera/mod.rs:25:11 [INFO] [stdout] | [INFO] [stdout] 25 | pub const FRAME_WIDTH: u32 = 352; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `FRAME_HEIGHT` is never used [INFO] [stdout] --> src/camera/mod.rs:26:11 [INFO] [stdout] | [INFO] [stdout] 26 | pub const FRAME_HEIGHT: u32 = 288; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `FRAME_BYTES` is never used [INFO] [stdout] --> src/camera/mod.rs:28:11 [INFO] [stdout] | [INFO] [stdout] 28 | pub const FRAME_BYTES: usize = (FRAME_WIDTH as usize) * (FRAME_HEIGHT as usize) * 3; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `RTSP_TIMEOUT_US` is never used [INFO] [stdout] --> src/camera/mod.rs:31:7 [INFO] [stdout] | [INFO] [stdout] 31 | const RTSP_TIMEOUT_US: &str = "5000000"; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `id`, `name`, and `zone` are never read [INFO] [stdout] --> src/camera/mod.rs:44:7 [INFO] [stdout] | [INFO] [stdout] 43 | pub struct CameraInfo { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 44 | pub id: u16, [INFO] [stdout] | ^^ [INFO] [stdout] 45 | pub name: &'static str, [INFO] [stdout] | ^^^^ [INFO] [stdout] 46 | pub zone: &'static str, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `CameraInfo` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Frame` is never constructed [INFO] [stdout] --> src/camera/mod.rs:69:12 [INFO] [stdout] | [INFO] [stdout] 69 | pub struct Frame { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `now_ms` is never used [INFO] [stdout] --> src/camera/mod.rs:79:6 [INFO] [stdout] | [INFO] [stdout] 77 | impl Frame { [INFO] [stdout] | ---------- associated function in this implementation [INFO] [stdout] 78 | /// Current unix timestamp in milliseconds. [INFO] [stdout] 79 | fn now_ms() -> u64 { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `cameras` is never read [INFO] [stdout] --> src/camera/mod.rs:95:3 [INFO] [stdout] | [INFO] [stdout] 94 | pub struct CameraManager { [INFO] [stdout] | ------------- field in this struct [INFO] [stdout] 95 | cameras: Vec, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `with_config`, `channel_ids`, `camera_info`, `grab_frame`, `grab_frames_parallel`, and `grab_frames_cascade` are never used [INFO] [stdout] --> src/camera/mod.rs:115:10 [INFO] [stdout] | [INFO] [stdout] 102 | impl CameraManager { [INFO] [stdout] | ------------------ associated items in this implementation [INFO] [stdout] ... [INFO] [stdout] 115 | pub fn with_config(ip: &str, user: &str, pass: &str, port: u16) -> Self { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 126 | pub fn channel_ids(&self) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 131 | pub fn camera_info(&self, channel: u16) -> Option<&CameraInfo> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 157 | pub async fn grab_frame(&self, channel: u16) -> Result { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 211 | pub async fn grab_frames_parallel(&self, channels: &[u16]) -> HashMap { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 245 | pub async fn grab_frames_cascade(&self) -> HashMap { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `grab_frame_subprocess` is never used [INFO] [stdout] --> src/camera/mod.rs:282:10 [INFO] [stdout] | [INFO] [stdout] 282 | async fn grab_frame_subprocess(rtsp_url: &str, channel: u16) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `grid_row` and `grid_col` are never used [INFO] [stdout] --> src/camera/gridmap.rs:54:10 [INFO] [stdout] | [INFO] [stdout] 22 | impl GridMap { [INFO] [stdout] | ------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 54 | pub fn grid_row(&self, y_norm: f32) -> usize { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 59 | pub fn grid_col(&self, x_norm: f32) -> usize { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `DEFAULT_MODEL_PATH` is never used [INFO] [stdout] --> src/detector/mod.rs:22:7 [INFO] [stdout] | [INFO] [stdout] 22 | const DEFAULT_MODEL_PATH: &str = "/opt/cctvanalytics/models/yolo26n_cctv/bestv4.onnx"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `CONFIDENCE_THRESHOLD` is never used [INFO] [stdout] --> src/detector/mod.rs:23:7 [INFO] [stdout] | [INFO] [stdout] 23 | const CONFIDENCE_THRESHOLD: f32 = 0.30; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MODEL_INPUT_SIZE` is never used [INFO] [stdout] --> src/detector/mod.rs:24:7 [INFO] [stdout] | [INFO] [stdout] 24 | const MODEL_INPUT_SIZE: u32 = 352; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `RawDetection` is never constructed [INFO] [stdout] --> src/detector/mod.rs:57:8 [INFO] [stdout] | [INFO] [stdout] 57 | struct RawDetection { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `model_path`, `script_path`, `confidence_threshold`, `gridmaps`, and `tmp_dir` are never read [INFO] [stdout] --> src/detector/mod.rs:71:3 [INFO] [stdout] | [INFO] [stdout] 70 | pub struct YoloDetector { [INFO] [stdout] | ------------ fields in this struct [INFO] [stdout] 71 | model_path: PathBuf, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 72 | script_path: PathBuf, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 73 | confidence_threshold: f32, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 74 | gridmaps: HashMap, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 75 | tmp_dir: PathBuf, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `with_model`, `set_confidence_threshold`, `detect`, and `detect_batch` are never used [INFO] [stdout] --> src/detector/mod.rs:82:10 [INFO] [stdout] | [INFO] [stdout] 78 | impl YoloDetector { [INFO] [stdout] | ----------------- associated items in this implementation [INFO] [stdout] ... [INFO] [stdout] 82 | pub fn new(script_dir: &Path) -> Result { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 87 | pub fn with_model(script_dir: &Path, model_path: &Path) -> Result { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 110 | pub fn set_confidence_threshold(&mut self, threshold: f32) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 122 | pub async fn detect(&self, frame: &Frame) -> Result> { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 210 | pub async fn detect_batch( [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `width`, `height`, and `confidence` are never read [INFO] [stdout] --> src/tracker/mod.rs:121:7 [INFO] [stdout] | [INFO] [stdout] 117 | pub struct Detection { [INFO] [stdout] | --------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 121 | pub width: f64, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 122 | pub height: f64, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 123 | pub confidence: f32, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Detection` 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 `get_track`, `get_track_mut`, `tracks_for_camera`, and `all_tracks` are never used [INFO] [stdout] --> src/tracker/mod.rs:241:10 [INFO] [stdout] | [INFO] [stdout] 142 | impl ObjectTracker { [INFO] [stdout] | ------------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 241 | pub fn get_track(&self, id: &str) -> Option<&TrackedObject> { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 246 | pub fn get_track_mut(&mut self, id: &str) -> Option<&mut TrackedObject> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 251 | pub fn tracks_for_camera(&self, camera_id: u32) -> Vec<&TrackedObject> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 256 | pub fn all_tracks(&self) -> Vec<&TrackedObject> { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `predict_trajectory`, `len`, `is_empty`, and `linear_regression_slope` are never used [INFO] [stdout] --> src/tracker/trajectory.rs:107:10 [INFO] [stdout] | [INFO] [stdout] 22 | impl TrajectoryForecaster { [INFO] [stdout] | ------------------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 107 | pub fn predict_trajectory(&self, steps: u32) -> Vec<(f64, f64)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 112 | pub fn len(&self) -> usize { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 116 | pub fn is_empty(&self) -> bool { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 122 | pub fn linear_regression_slope(&self) -> Option<(f64, f64)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lin_reg_slope` is never used [INFO] [stdout] --> src/tracker/trajectory.rs:153:4 [INFO] [stdout] | [INFO] [stdout] 153 | fn lin_reg_slope(vals: &[f64]) -> f64 { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple fields are never read [INFO] [stdout] --> src/web/mod.rs:56:7 [INFO] [stdout] | [INFO] [stdout] 55 | pub struct SettingsUpdate { [INFO] [stdout] | -------------- fields in this struct [INFO] [stdout] 56 | pub dvr_ip: Option, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 57 | pub dvr_username: Option, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 58 | pub dvr_password: Option, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 59 | pub telegram_enabled: Option, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 60 | pub telegram_bot_token: Option, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 61 | pub confidence_threshold: Option, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 62 | pub capture_interval_secs: Option, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SettingsUpdate` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/web/mod.rs:255:32 [INFO] [stdout] | [INFO] [stdout] 255 | if socket.send(Message::Text(ack.to_string().into())).await.is_err() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this method call relies on the `impl Into for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors [INFO] [stdout] = note: `#[deny(self_type_conversion)]` on by default [INFO] [stdout] help: consider removing the conversion call [INFO] [stdout] | [INFO] [stdout] 255 - if socket.send(Message::Text(ack.to_string().into())).await.is_err() { [INFO] [stdout] 255 + if socket.send(Message::Text(ack.to_string())).await.is_err() { [INFO] [stdout] | [INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint [INFO] [stdout] | [INFO] [stdout] 255 - if socket.send(Message::Text(ack.to_string().into())).await.is_err() { [INFO] [stdout] 255 + if socket.send(Message::Text(>::into(ack.to_string()))).await.is_err() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/web/mod.rs:265:42 [INFO] [stdout] | [INFO] [stdout] 265 | if socket.send(Message::Text(event_json.into())).await.is_err() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this method call relies on the `impl Into for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors [INFO] [stdout] help: consider removing the conversion call [INFO] [stdout] | [INFO] [stdout] 265 - if socket.send(Message::Text(event_json.into())).await.is_err() { [INFO] [stdout] 265 + if socket.send(Message::Text(event_json)).await.is_err() { [INFO] [stdout] | [INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint [INFO] [stdout] | [INFO] [stdout] 265 - if socket.send(Message::Text(event_json.into())).await.is_err() { [INFO] [stdout] 265 + if socket.send(Message::Text(>::into(event_json))).await.is_err() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] error: could not compile `cctv-sentinel` (bin "cctv-sentinel" test) due to 2 previous errors; 35 warnings emitted [INFO] [stderr] warning: unused dependency `tower` [INFO] [stderr] --> Cargo.toml:10:1 [INFO] [stderr] | [INFO] [stderr] 10 | tower = "0.4" [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: `cctv-sentinel` (manifest) generated 1 warning [INFO] running `Command { std: "docker" "inspect" "61668475b6c2b97cb3dc4b9548b2e6a3fce26dacf2b20e654f869e8614d8a522", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "61668475b6c2b97cb3dc4b9548b2e6a3fce26dacf2b20e654f869e8614d8a522", kill_on_drop: false }` [INFO] [stdout] 61668475b6c2b97cb3dc4b9548b2e6a3fce26dacf2b20e654f869e8614d8a522