[INFO] cloning repository https://github.com/feijihe/cw4rs
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/feijihe/cw4rs" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ffeijihe%2Fcw4rs", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ffeijihe%2Fcw4rs'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 4a12a8601cfca567e51737e1a0d7cf3ce6c191a9
[INFO] checking feijihe/cw4rs against eca445e5ae4a6679cc27d3a09106ce245e13a5a6 for pr-162478
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ffeijihe%2Fcw4rs" "/workspace/builds/worker-5-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/feijihe/cw4rs
[INFO] finished tweaking git repo https://github.com/feijihe/cw4rs
[INFO] tweaked toml for git repo https://github.com/feijihe/cw4rs written to /workspace/builds/worker-5-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/feijihe/cw4rs 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/feijihe/cw4rs 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] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded libudev v0.3.0
[INFO] [stderr]   Downloaded meval v0.2.0
[INFO] [stderr]   Downloaded nom v1.2.4
[INFO] [stderr]   Downloaded file-rotate v0.2.0
[INFO] [stderr]   Downloaded serialport v4.9.0
[INFO] [stderr]   Downloaded tokio-modbus v0.13.1
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:8683fc1fc2eb5c9ac98e0d076ab094b2ffac7f99da555d2b6a2e27f346de2ec7" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 336da93e2b40ee5e8cfb2b972155a8c4226c2ab882f1f55cbc73056b3d220718
[INFO] running `Command { std: "docker" "start" "336da93e2b40ee5e8cfb2b972155a8c4226c2ab882f1f55cbc73056b3d220718", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "336da93e2b40ee5e8cfb2b972155a8c4226c2ab882f1f55cbc73056b3d220718", 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" "336da93e2b40ee5e8cfb2b972155a8c4226c2ab882f1f55cbc73056b3d220718" "/opt/rustwide/cargo-home/bin/cargo" "+eca445e5ae4a6679cc27d3a09106ce245e13a5a6" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "336da93e2b40ee5e8cfb2b972155a8c4226c2ab882f1f55cbc73056b3d220718", 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" "336da93e2b40ee5e8cfb2b972155a8c4226c2ab882f1f55cbc73056b3d220718" "/opt/rustwide/cargo-home/bin/cargo" "+eca445e5ae4a6679cc27d3a09106ce245e13a5a6" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.186
[INFO] [stderr]     Checking http v1.4.2
[INFO] [stderr]    Compiling openssl-sys v0.9.116
[INFO] [stderr]     Checking indexmap v2.14.0
[INFO] [stderr]    Compiling libudev-sys v0.1.4
[INFO] [stderr]    Compiling openssl v0.10.80
[INFO] [stderr]     Checking tracing v0.1.44
[INFO] [stderr]     Checking serde v1.0.228
[INFO] [stderr]     Checking yoke v0.8.3
[INFO] [stderr]     Checking aho-corasick v1.1.4
[INFO] [stderr]    Compiling nix v0.29.0
[INFO] [stderr]     Checking serde_json v1.0.150
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]     Checking unescaper v0.1.8
[INFO] [stderr]    Compiling time-core v0.1.8
[INFO] [stderr]    Compiling num-conv v0.2.2
[INFO] [stderr]     Checking crossbeam-channel v0.5.15
[INFO] [stderr]    Compiling axum-macros v0.5.1
[INFO] [stderr]     Checking csv-core v0.1.13
[INFO] [stderr]     Checking nom v1.2.4
[INFO] [stderr]     Checking zerovec v0.11.6
[INFO] [stderr]     Checking zerotrie v0.2.4
[INFO] [stderr]    Compiling time-macros v0.2.27
[INFO] [stderr]     Checking symlink v0.1.0
[INFO] [stderr]     Checking file-rotate v0.2.0
[INFO] [stderr]     Checking csv v1.4.0
[INFO] [stderr]     Checking meval v0.2.0
[INFO] [stderr]    Compiling native-tls v0.2.18
[INFO] [stderr]     Checking http-body v1.0.1
[INFO] [stderr]     Checking http-body-util v0.1.3
[INFO] [stderr]     Checking serde_urlencoded v0.7.1
[INFO] [stderr]     Checking tracing-serde v0.2.0
[INFO] [stderr]     Checking time v0.3.47
[INFO] [stderr]     Checking axum-core v0.5.6
[INFO] [stderr]     Checking regex-automata v0.4.14
[INFO] [stderr]     Checking chrono v0.4.45
[INFO] [stderr]     Checking tinystr v0.8.3
[INFO] [stderr]     Checking potential_utf v0.1.5
[INFO] [stderr]     Checking serde_yaml v0.9.34+deprecated
[INFO] [stderr]     Checking icu_collections v2.2.0
[INFO] [stderr]     Checking icu_locale_core v2.2.0
[INFO] [stderr]     Checking parking_lot_core v0.9.12
[INFO] [stderr]     Checking mio v1.2.1
[INFO] [stderr]     Checking errno v0.3.14
[INFO] [stderr]     Checking socket2 v0.6.4
[INFO] [stderr]     Checking nix v0.26.4
[INFO] [stderr]     Checking inotify-sys v0.1.5
[INFO] [stderr]     Checking getrandom v0.4.2
[INFO] [stderr]     Checking inotify v0.9.6
[INFO] [stderr]     Checking libudev v0.3.0
[INFO] [stderr]     Checking signal-hook-registry v1.4.8
[INFO] [stderr]     Checking mio v0.8.11
[INFO] [stderr]     Checking filetime v0.2.29
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking dashmap v5.5.3
[INFO] [stderr]     Checking uuid v1.23.3
[INFO] [stderr]     Checking notify v6.1.1
[INFO] [stderr]     Checking tokio v1.52.3
[INFO] [stderr]     Checking icu_provider v2.2.0
[INFO] [stderr]     Checking icu_properties v2.2.0
[INFO] [stderr]     Checking icu_normalizer v2.2.0
[INFO] [stderr]     Checking serialport v4.9.0
[INFO] [stderr]     Checking mio-serial v5.0.6
[INFO] [stderr]     Checking idna_adapter v1.2.2
[INFO] [stderr]     Checking idna v1.1.0
[INFO] [stderr]     Checking url v2.5.8
[INFO] [stderr]     Checking matchers v0.2.0
[INFO] [stderr]     Checking regex v1.12.4
[INFO] [stderr]     Checking tracing-subscriber v0.3.23
[INFO] [stderr]     Checking tracing-appender v0.2.5
[INFO] [stderr]     Checking tokio-util v0.7.18
[INFO] [stderr]     Checking tower v0.5.3
[INFO] [stderr]     Checking tokio-native-tls v0.3.1
[INFO] [stderr]     Checking tokio-serial v5.4.5
[INFO] [stderr]     Checking h2 v0.4.14
[INFO] [stderr]     Checking tokio-modbus v0.13.1
[INFO] [stderr]     Checking tower-http v0.6.11
[INFO] [stderr]     Checking hyper v1.10.1
[INFO] [stderr]     Checking hyper-util v0.1.20
[INFO] [stderr]     Checking hyper-tls v0.6.0
[INFO] [stderr]     Checking axum v0.8.9
[INFO] [stderr]     Checking reqwest v0.12.28
[INFO] [stderr]     Checking cw4py v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/config/file_store.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: `std::sync::Arc`
[INFO] [stdout]  --> src/config/file_store.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserialize` and `Serialize`
[INFO] [stdout]  --> src/config/file_store.rs:6:13
[INFO] [stdout]   |
[INFO] [stdout] 6 | use serde::{Deserialize, Serialize};
[INFO] [stdout]   |             ^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `file_store::FileStore`
[INFO] [stdout]  --> src/config/mod.rs:3:9
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub use file_store::FileStore;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `post`
[INFO] [stdout]  --> src/controllers/configuration.rs:3:20
[INFO] [stdout]   |
[INFO] [stdout] 3 |     routing::{get, post},
[INFO] [stdout]   |                    ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `post`
[INFO] [stdout]  --> src/controllers/control_mode.rs:3:20
[INFO] [stdout]   |
[INFO] [stdout] 3 |     routing::{get, post},
[INFO] [stdout]   |                    ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `extract::Path`
[INFO] [stdout]  --> src/controllers/redfish.rs:1:34
[INFO] [stdout]   |
[INFO] [stdout] 1 | use axum::{Router, routing::get, extract::Path, response::Json, http::{StatusCode, HeaderMap}};
[INFO] [stdout]   |                                  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `error`
[INFO] [stdout]  --> src/models/modbus_client.rs:4:27
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tracing::{info, warn, error};
[INFO] [stdout]   |                           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `info` and `warn`
[INFO] [stdout]  --> src/models/plugin.rs:3:15
[INFO] [stdout]   |
[INFO] [stdout] 3 | use tracing::{info, warn, debug};
[INFO] [stdout]   |               ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `error`
[INFO] [stdout]  --> src/models/plugin_manager.rs:5:27
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing::{info, warn, error};
[INFO] [stdout]   |                           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> src/models/control_mode.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> src/models/control_mode.rs:5:21
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing::{info, warn};
[INFO] [stdout]   |                     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> src/models/alarm.rs:7:21
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tracing::{info, warn};
[INFO] [stdout]   |                     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> src/models/light.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]  --> src/models/light.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use tracing::info;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/utils/mod.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/config/file_store.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: `std::sync::Arc`
[INFO] [stdout]  --> src/config/file_store.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserialize` and `Serialize`
[INFO] [stdout]  --> src/config/file_store.rs:6:13
[INFO] [stdout]   |
[INFO] [stdout] 6 | use serde::{Deserialize, Serialize};
[INFO] [stdout]   |             ^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `file_store::FileStore`
[INFO] [stdout]  --> src/config/mod.rs:3:9
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub use file_store::FileStore;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `post`
[INFO] [stdout]  --> src/controllers/configuration.rs:3:20
[INFO] [stdout]   |
[INFO] [stdout] 3 |     routing::{get, post},
[INFO] [stdout]   |                    ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `post`
[INFO] [stdout]  --> src/controllers/control_mode.rs:3:20
[INFO] [stdout]   |
[INFO] [stdout] 3 |     routing::{get, post},
[INFO] [stdout]   |                    ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `extract::Path`
[INFO] [stdout]  --> src/controllers/redfish.rs:1:34
[INFO] [stdout]   |
[INFO] [stdout] 1 | use axum::{Router, routing::get, extract::Path, response::Json, http::{StatusCode, HeaderMap}};
[INFO] [stdout]   |                                  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `error`
[INFO] [stdout]  --> src/models/modbus_client.rs:4:27
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tracing::{info, warn, error};
[INFO] [stdout]   |                           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `info` and `warn`
[INFO] [stdout]  --> src/models/plugin.rs:3:15
[INFO] [stdout]   |
[INFO] [stdout] 3 | use tracing::{info, warn, debug};
[INFO] [stdout]   |               ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `error`
[INFO] [stdout]  --> src/models/plugin_manager.rs:5:27
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing::{info, warn, error};
[INFO] [stdout]   |                           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> src/models/control_mode.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> src/models/control_mode.rs:5:21
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing::{info, warn};
[INFO] [stdout]   |                     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> src/models/alarm.rs:7:21
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tracing::{info, warn};
[INFO] [stdout]   |                     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> src/models/light.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]  --> src/models/light.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use tracing::info;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/utils/mod.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/controllers/cdu.rs:23:13
[INFO] [stdout]    |
[INFO] [stdout] 23 |         let mut obj = serde_json::Map::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/controllers/cdu.rs:23:13
[INFO] [stdout]    |
[INFO] [stdout] 23 |         let mut obj = serde_json::Map::new();
[INFO] [stdout]    |             ----^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `obj`
[INFO] [stdout]   --> src/controllers/cdu.rs:23:13
[INFO] [stdout]    |
[INFO] [stdout] 23 |         let mut obj = serde_json::Map::new();
[INFO] [stdout]    |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_obj`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `q`
[INFO] [stdout]   --> src/controllers/cdu.rs:84:33
[INFO] [stdout]    |
[INFO] [stdout] 84 | async fn get_history_data(Query(q): Query<HistoryQuery>) -> Json<Value> {
[INFO] [stdout]    |                                 ^ help: if this is intentional, prefix it with an underscore: `_q`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `obj`
[INFO] [stdout]   --> src/controllers/cdu.rs:23:13
[INFO] [stdout]    |
[INFO] [stdout] 23 |         let mut obj = serde_json::Map::new();
[INFO] [stdout]    |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_obj`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `q`
[INFO] [stdout]   --> src/controllers/cdu.rs:84:33
[INFO] [stdout]    |
[INFO] [stdout] 84 | async fn get_history_data(Query(q): Query<HistoryQuery>) -> Json<Value> {
[INFO] [stdout]    |                                 ^ help: if this is intentional, prefix it with an underscore: `_q`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/models/plugin.rs:166:13
[INFO] [stdout]     |
[INFO] [stdout] 166 |         let mut attrs_meta: IndexMap<String, SensorAttrTemplate> = IndexMap::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/models/plugin.rs:166:13
[INFO] [stdout]     |
[INFO] [stdout] 166 |         let mut attrs_meta: IndexMap<String, SensorAttrTemplate> = IndexMap::new();
[INFO] [stdout]     |             ----^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `on_change`, `get_default_config`, `reset_config`, and `get` are never used
[INFO] [stdout]    --> src/config/file_store.rs:103:12
[INFO] [stdout]     |
[INFO] [stdout]  18 | impl FileStore {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn on_change<F: Fn(&ConfigType, &ConfigType) + Send + Sync + 'static>(&self, callback: F) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub fn get_default_config(&self) -> Result<ConfigType, crate::error::AppError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub fn reset_config(&self, keys: Option<&[&str]>) -> Result<(), crate::error::AppError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     pub fn get(&self, path: &str) -> Option<serde_json::Value> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_json_path` is never used
[INFO] [stdout]    --> src/config/file_store.rs:155:4
[INFO] [stdout]     |
[INFO] [stdout] 155 | fn get_json_path<'a>(value: &'a serde_json::Value, path: &str) -> Option<&'a serde_json::Value> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `start`, `end`, and `keys` are never read
[INFO] [stdout]   --> src/controllers/cdu.rs:82:23
[INFO] [stdout]    |
[INFO] [stdout] 82 | struct HistoryQuery { start: Option<String>, end: Option<String>, keys: Option<String> }
[INFO] [stdout]    |        ------------   ^^^^^                  ^^^                  ^^^^
[INFO] [stdout]    |        |
[INFO] [stdout]    |        fields in this struct
[INFO] [stdout]    |
[INFO] [stdout]    = note: `HistoryQuery` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> src/error.rs:7:5
[INFO] [stdout]    |
[INFO] [stdout]  5 | pub enum AppError {
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout]  6 |     #[error("系统未运行")]
[INFO] [stdout]  7 |     SystemNotRunning,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 10 |     ModbusNotConnected,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 13 |     Unauthorized,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 16 |     ConfigError(String),
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |     ModbusError(String),
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 22 |     PluginNotFound(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 25 |     SensorNotFound(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 28 |     InvalidParameter(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AppError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `name` is never read
[INFO] [stdout]   --> src/event_bus.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct EventMessage {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] 15 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `EventMessage` 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 `emit_sync` and `off` are never used
[INFO] [stdout]   --> src/event_bus.rs:61:12
[INFO] [stdout]    |
[INFO] [stdout] 32 | impl EventBus {
[INFO] [stdout]    | ------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 61 |     pub fn emit_sync<R: Send + 'static>(
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub fn off(&self, event_name: &str) {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `based` and `block_length` are never used
[INFO] [stdout]   --> src/models/modbus_server.rs:85:12
[INFO] [stdout]    |
[INFO] [stdout] 72 | impl ModbusServer {
[INFO] [stdout]    | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub fn based(&self) -> u8 { self.based }
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 86 |     pub fn block_length(&self) -> u16 { self.block_length }
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LANGUAGE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:466:15
[INFO] [stdout]     |
[INFO] [stdout] 466 |     pub const LANGUAGE: u16 = 2;
[INFO] [stdout]     |               ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RESET_ALL_SETTINGS` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:467:15
[INFO] [stdout]     |
[INFO] [stdout] 467 |     pub const RESET_ALL_SETTINGS: u16 = 3;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RESET_THRESHOLD_SETTINGS` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:468:15
[INFO] [stdout]     |
[INFO] [stdout] 468 |     pub const RESET_THRESHOLD_SETTINGS: u16 = 4;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RESET_PARAMS_SETTINGS` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:469:15
[INFO] [stdout]     |
[INFO] [stdout] 469 |     pub const RESET_PARAMS_SETTINGS: u16 = 5;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BACKUP_MODE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:470:15
[INFO] [stdout]     |
[INFO] [stdout] 470 |     pub const BACKUP_MODE: u16 = 9;
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AUTO_SWITCH_TO_AUTO_MODE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:472:15
[INFO] [stdout]     |
[INFO] [stdout] 472 |     pub const AUTO_SWITCH_TO_AUTO_MODE: u16 = 10;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AUTO_SHUTDOWN` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:473:15
[INFO] [stdout]     |
[INFO] [stdout] 473 |     pub const AUTO_SHUTDOWN: u16 = 11;
[INFO] [stdout]     |               ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AUTO_RUN` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:474:15
[INFO] [stdout]     |
[INFO] [stdout] 474 |     pub const AUTO_RUN: u16 = 12;
[INFO] [stdout]     |               ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RESET_PUMPS_RUN_TIME` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:476:15
[INFO] [stdout]     |
[INFO] [stdout] 476 |     pub const RESET_PUMPS_RUN_TIME: u16 = 15;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEBUG_MODE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:477:15
[INFO] [stdout]     |
[INFO] [stdout] 477 |     pub const DEBUG_MODE: u16 = 16;
[INFO] [stdout]     |               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `F1_DISABLE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:478:15
[INFO] [stdout]     |
[INFO] [stdout] 478 |     pub const F1_DISABLE: u16 = 19;
[INFO] [stdout]     |               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AUTO_SWITCH_HOUR` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:479:15
[INFO] [stdout]     |
[INFO] [stdout] 479 |     pub const AUTO_SWITCH_HOUR: u16 = 30;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AUTO_SWITCH_MIN` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:480:15
[INFO] [stdout]     |
[INFO] [stdout] 480 |     pub const AUTO_SWITCH_MIN: u16 = 31;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AUTO_SWITCH_SEC` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:481:15
[INFO] [stdout]     |
[INFO] [stdout] 481 |     pub const AUTO_SWITCH_SEC: u16 = 32;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RUN_PUMP_HOUR` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:482:15
[INFO] [stdout]     |
[INFO] [stdout] 482 |     pub const RUN_PUMP_HOUR: u16 = 33;
[INFO] [stdout]     |               ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RUN_PUMP_MIN` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:483:15
[INFO] [stdout]     |
[INFO] [stdout] 483 |     pub const RUN_PUMP_MIN: u16 = 34;
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RUN_PUMP_SEC` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:484:15
[INFO] [stdout]     |
[INFO] [stdout] 484 |     pub const RUN_PUMP_SEC: u16 = 35;
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SWITCH_TO_AUTO_MODE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:485:15
[INFO] [stdout]     |
[INFO] [stdout] 485 |     pub const SWITCH_TO_AUTO_MODE: u16 = 36;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TIME_YEAR` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:487:15
[INFO] [stdout]     |
[INFO] [stdout] 487 |     pub const TIME_YEAR: u16 = 41;
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TIME_MONTH` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:488:15
[INFO] [stdout]     |
[INFO] [stdout] 488 |     pub const TIME_MONTH: u16 = 42;
[INFO] [stdout]     |               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TIME_DAY` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:489:15
[INFO] [stdout]     |
[INFO] [stdout] 489 |     pub const TIME_DAY: u16 = 43;
[INFO] [stdout]     |               ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TIME_HOUR` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:490:15
[INFO] [stdout]     |
[INFO] [stdout] 490 |     pub const TIME_HOUR: u16 = 44;
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TIME_MINUTE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:491:15
[INFO] [stdout]     |
[INFO] [stdout] 491 |     pub const TIME_MINUTE: u16 = 45;
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TIME_SECOND` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:492:15
[INFO] [stdout]     |
[INFO] [stdout] 492 |     pub const TIME_SECOND: u16 = 46;
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TEMP_PID_KP` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:493:15
[INFO] [stdout]     |
[INFO] [stdout] 493 |     pub const TEMP_PID_KP: u16 = 50;
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TEMP_PID_KI` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:494:15
[INFO] [stdout]     |
[INFO] [stdout] 494 |     pub const TEMP_PID_KI: u16 = 51;
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TEMP_PID_KD` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:495:15
[INFO] [stdout]     |
[INFO] [stdout] 495 |     pub const TEMP_PID_KD: u16 = 52;
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TEMP_PID_DT` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:496:15
[INFO] [stdout]     |
[INFO] [stdout] 496 |     pub const TEMP_PID_DT: u16 = 53;
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TEMP_PID_MIN` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:497:15
[INFO] [stdout]     |
[INFO] [stdout] 497 |     pub const TEMP_PID_MIN: u16 = 54;
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TEMP_PID_MAX` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:498:15
[INFO] [stdout]     |
[INFO] [stdout] 498 |     pub const TEMP_PID_MAX: u16 = 55;
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TEMP_PID_DELTA` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:499:15
[INFO] [stdout]     |
[INFO] [stdout] 499 |     pub const TEMP_PID_DELTA: u16 = 56;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FLOW_PID_KP` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:500:15
[INFO] [stdout]     |
[INFO] [stdout] 500 |     pub const FLOW_PID_KP: u16 = 60;
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FLOW_PID_KI` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:501:15
[INFO] [stdout]     |
[INFO] [stdout] 501 |     pub const FLOW_PID_KI: u16 = 61;
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FLOW_PID_KD` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:502:15
[INFO] [stdout]     |
[INFO] [stdout] 502 |     pub const FLOW_PID_KD: u16 = 62;
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FLOW_PID_DT` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:503:15
[INFO] [stdout]     |
[INFO] [stdout] 503 |     pub const FLOW_PID_DT: u16 = 63;
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FLOW_PID_MIN` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:504:15
[INFO] [stdout]     |
[INFO] [stdout] 504 |     pub const FLOW_PID_MIN: u16 = 64;
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FLOW_PID_MAX` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:505:15
[INFO] [stdout]     |
[INFO] [stdout] 505 |     pub const FLOW_PID_MAX: u16 = 65;
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FLOW_PID_DELTA` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:506:15
[INFO] [stdout]     |
[INFO] [stdout] 506 |     pub const FLOW_PID_DELTA: u16 = 66;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PRESSURE_PID_KP` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:507:15
[INFO] [stdout]     |
[INFO] [stdout] 507 |     pub const PRESSURE_PID_KP: u16 = 70;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PRESSURE_PID_KI` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:508:15
[INFO] [stdout]     |
[INFO] [stdout] 508 |     pub const PRESSURE_PID_KI: u16 = 71;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PRESSURE_PID_KD` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:509:15
[INFO] [stdout]     |
[INFO] [stdout] 509 |     pub const PRESSURE_PID_KD: u16 = 72;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PRESSURE_PID_DT` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:510:15
[INFO] [stdout]     |
[INFO] [stdout] 510 |     pub const PRESSURE_PID_DT: u16 = 73;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PRESSURE_PID_MIN` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:511:15
[INFO] [stdout]     |
[INFO] [stdout] 511 |     pub const PRESSURE_PID_MIN: u16 = 74;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PRESSURE_PID_MAX` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:512:15
[INFO] [stdout]     |
[INFO] [stdout] 512 |     pub const PRESSURE_PID_MAX: u16 = 75;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PRESSURE_PID_DELTA` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:513:15
[INFO] [stdout]     |
[INFO] [stdout] 513 |     pub const PRESSURE_PID_DELTA: u16 = 76;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `IP_START` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:514:15
[INFO] [stdout]     |
[INFO] [stdout] 514 |     pub const IP_START: u16 = 80;
[INFO] [stdout]     |               ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PUMP_BASE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:516:15
[INFO] [stdout]     |
[INFO] [stdout] 516 |     pub const PUMP_BASE: u16 = 299;
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FLOW_BASE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:517:15
[INFO] [stdout]     |
[INFO] [stdout] 517 |     pub const FLOW_BASE: u16 = 399;
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PRESSURE_BASE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:518:15
[INFO] [stdout]     |
[INFO] [stdout] 518 |     pub const PRESSURE_BASE: u16 = 499;
[INFO] [stdout]     |               ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TEMP_BASE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:519:15
[INFO] [stdout]     |
[INFO] [stdout] 519 |     pub const TEMP_BASE: u16 = 599;
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PH_BASE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:520:15
[INFO] [stdout]     |
[INFO] [stdout] 520 |     pub const PH_BASE: u16 = 699;
[INFO] [stdout]     |               ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PHT_BASE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:521:15
[INFO] [stdout]     |
[INFO] [stdout] 521 |     pub const PHT_BASE: u16 = 799;
[INFO] [stdout]     |               ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `COMPUTED_BASE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:526:15
[INFO] [stdout]     |
[INFO] [stdout] 526 |     pub const COMPUTED_BASE: u16 = 1600;
[INFO] [stdout]     |               ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FLOW_TARGET` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:527:15
[INFO] [stdout]     |
[INFO] [stdout] 527 |     pub const FLOW_TARGET: u16 = 1999;
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TEMP_TARGET` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:528:15
[INFO] [stdout]     |
[INFO] [stdout] 528 |     pub const TEMP_TARGET: u16 = 2000;
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PRESSURE_TARGET` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:529:15
[INFO] [stdout]     |
[INFO] [stdout] 529 |     pub const PRESSURE_TARGET: u16 = 2001;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `VALVE_TARGET` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:530:15
[INFO] [stdout]     |
[INFO] [stdout] 530 |     pub const VALVE_TARGET: u16 = 2002;
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `POWER_OFF` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:531:15
[INFO] [stdout]     |
[INFO] [stdout] 531 |     pub const POWER_OFF: u16 = 2097;
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `POWER_OFF_STATUS` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:532:15
[INFO] [stdout]     |
[INFO] [stdout] 532 |     pub const POWER_OFF_STATUS: u16 = 2098;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ERROR_BACKUP_BASE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:533:15
[INFO] [stdout]     |
[INFO] [stdout] 533 |     pub const ERROR_BACKUP_BASE: u16 = 2099;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ALARM_COIL_BASE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:534:15
[INFO] [stdout]     |
[INFO] [stdout] 534 |     pub const ALARM_COIL_BASE: u16 = 2599;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `host` and `port` are never read
[INFO] [stdout]   --> src/models/modbus_client.rs:19:11
[INFO] [stdout]    |
[INFO] [stdout] 19 |     Tcp { host: String, port: u16 },
[INFO] [stdout]    |     ---   ^^^^          ^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ConnectionType` 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: variant `Serial` is never constructed
[INFO] [stdout]   --> src/models/modbus_client.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub enum ConnectionType {
[INFO] [stdout]    |          -------------- variant in this enum
[INFO] [stdout] 19 |     Tcp { host: String, port: u16 },
[INFO] [stdout] 20 |     Serial { port: String, baud_rate: u32 },
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ConnectionType` 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 `write_single_register`, `write_multiple_registers`, and `write_single_coil` are never used
[INFO] [stdout]   --> src/models/modbus_client.rs:69:18
[INFO] [stdout]    |
[INFO] [stdout] 23 | impl ModbusClient {
[INFO] [stdout]    | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub async fn write_single_register(&mut self, addr: u16, value: u16) -> Result<(), String> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 79 |     pub async fn write_multiple_registers(&mut self, addr: u16, values: &[u16]) -> Result<(), String> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 99 |     pub async fn write_single_coil(&mut self, addr: u16, value: bool) -> Result<(), String> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `value_key` is never read
[INFO] [stdout]   --> src/models/modbus_config_store.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct ConfigEntry {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 17 |     pub value_key: String,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ConfigEntry` 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: method `reset_config` is never used
[INFO] [stdout]    --> src/models/modbus_config_store.rs:248:12
[INFO] [stdout]     |
[INFO] [stdout]  28 | impl ModbusConfigStore {
[INFO] [stdout]     | ---------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 248 |     pub fn reset_config(&self, store_key: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `SensorState` is never used
[INFO] [stdout]   --> src/models/sensor.rs:56:10
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub enum SensorState {
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `plugin_type`, `is_sensor`, `group_list`, and `attrs_meta` are never read
[INFO] [stdout]   --> src/models/plugin.rs:12:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct Plugin {
[INFO] [stdout]    |            ------ fields in this struct
[INFO] [stdout] 11 |     pub name: String,
[INFO] [stdout] 12 |     pub plugin_type: String,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 13 |     pub index: u16,
[INFO] [stdout] 14 |     pub is_sensor: bool,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 17 |     pub group_list: Vec<GroupConfig>,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 18 |     pub merged_addresses: Vec<(u16, u16)>,
[INFO] [stdout] 19 |     pub attrs_meta: IndexMap<String, SensorAttrTemplate>,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Plugin` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `write_formula`, `unit`, `write_method`, `batch_address`, `min`, and `max` are never read
[INFO] [stdout]   --> src/models/plugin.rs:43:9
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub struct MergedAttrConfig {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub write_formula: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 44 |     pub unit: Option<String>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub write_method: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 48 |     pub batch_address: Option<u16>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 49 |     pub min: Option<f64>,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 50 |     pub max: Option<f64>,
[INFO] [stdout]    |         ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MergedAttrConfig` 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 `write_modbus_value` and `get_all_sensor_addresses` are never used
[INFO] [stdout]    --> src/models/plugin.rs:323:12
[INFO] [stdout]     |
[INFO] [stdout]  58 | impl Plugin {
[INFO] [stdout]     | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 323 |     pub fn write_modbus_value(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 363 |     pub fn get_all_sensor_addresses(&self) -> Vec<u16> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `reverse_formula` is never used
[INFO] [stdout]    --> src/models/plugin.rs:467:4
[INFO] [stdout]     |
[INFO] [stdout] 467 | fn reverse_formula(value: f64, decimal_places: u8) -> f64 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_plugin`, `control_by_name`, `update_all_plugins`, and `stop_polling` are never used
[INFO] [stdout]    --> src/models/plugin_manager.rs:89:12
[INFO] [stdout]     |
[INFO] [stdout]  19 | impl PluginManager {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn get_plugin(&self, name: &str) -> Option<Arc<Plugin>> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub async fn control_by_name(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 216 |     pub fn update_all_plugins(&self, _read_data: &HashMap<u16, u16>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 333 |     pub fn stop_polling(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `calculate`, `update_params`, `update_limits`, and `set_target` are never used
[INFO] [stdout]    --> src/models/pid.rs:25:12
[INFO] [stdout]     |
[INFO] [stdout]  24 | impl PidController {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout]  25 |     pub fn new(name: &str, kp: f64, ki: f64, kd: f64, dt: f64) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  45 |     pub fn calculate(&mut self, current_value: f64) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  95 |     pub fn update_params(&mut self, kp: f64, ki: f64, kd: f64, dt: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn update_limits(&mut self, min: f64, max: f64, max_delta: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub fn set_target(&mut self, target: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `auto_switch_enabled`, `auto_switch_delay`, and `auto_switch_target` are never read
[INFO] [stdout]   --> src/models/control_mode.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub struct ControlModeManager {
[INFO] [stdout]    |            ------------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 35 |     auto_switch_enabled: RwLock<bool>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 36 |     auto_switch_delay: RwLock<Duration>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 37 |     auto_switch_target: RwLock<ControlModeType>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_auto_switch`, `start_auto_switch_timer`, and `run_control_cycle` are never used
[INFO] [stdout]    --> src/models/control_mode.rs:73:12
[INFO] [stdout]     |
[INFO] [stdout]  40 | impl ControlModeManager {
[INFO] [stdout]     | ----------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  73 |     pub fn set_auto_switch(&self, enabled: bool, delay_secs: u64, target_mode: u16) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  80 |     pub async fn start_auto_switch_timer(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub async fn run_control_cycle(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `log_dir` and `max_history` are never read
[INFO] [stdout]   --> src/models/alarm.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub struct AlarmLog {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 33 |     log_dir: PathBuf,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 34 |     max_history: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `add_alarm`, `clear_alarm`, and `check_sensor_threshold` are never used
[INFO] [stdout]    --> src/models/alarm.rs:52:12
[INFO] [stdout]     |
[INFO] [stdout]  37 | impl AlarmLog {
[INFO] [stdout]     | ------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  52 |     pub fn add_alarm(&self, name: &str, message: &str, level: AlarmLevel) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn clear_alarm(&self, name: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 117 |     pub fn check_sensor_threshold(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `backup_mode`, `polling_interval`, `active_pump`, `pump_run_times`, and `pump_count` are never read
[INFO] [stdout]   --> src/models/pump_manager.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct PumpManager {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 16 |     backup_mode: RwLock<BackupMode>,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 17 |     polling_interval: RwLock<Duration>, // 泵轮换间隔
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 18 |     active_pump: RwLock<usize>,          // 当前活动泵ID
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 19 |     pump_run_times: RwLock<Vec<f64>>,    // 各泵累计运行时间(秒)
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 20 |     pump_count: usize,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/models/pump_manager.rs:35:12
[INFO] [stdout]     |
[INFO] [stdout]  23 | impl PumpManager {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  35 |     pub fn get_active_pump(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  40 |     pub fn set_backup_mode(&self, mode: BackupMode) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  46 |     pub fn set_polling_interval(&self, interval_secs: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  51 |     pub fn switch_to_next_pump(&self, reason: &str) -> Option<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  60 |     pub fn get_target_duties(&self, base_duty: f64) -> Vec<f64> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  79 |     pub async fn start_rotation_timer(self: Arc<Self>) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub fn update_run_time(&self, pump_idx: usize, delta_seconds: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn get_run_times(&self) -> Vec<f64> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub fn reset_run_times(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name` and `address` are never read
[INFO] [stdout]   --> src/models/light.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct Light {
[INFO] [stdout]    |            ----- fields in this struct
[INFO] [stdout] 17 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 18 |     pub address: u16,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `address` is never read
[INFO] [stdout]   --> src/models/light.rs:49:9
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub struct Buzzer {
[INFO] [stdout]    |            ------ field in this struct
[INFO] [stdout] 49 |     pub address: u16,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `set_muted` is never used
[INFO] [stdout]   --> src/models/light.rs:73:12
[INFO] [stdout]    |
[INFO] [stdout] 54 | impl Buzzer {
[INFO] [stdout]    | ----------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub fn set_muted(&self, muted: bool) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `indicate_pid_ok`, `indicate_pid_deviation`, and `clear_all` are never used
[INFO] [stdout]    --> src/models/light.rs:121:12
[INFO] [stdout]     |
[INFO] [stdout]  89 | impl LightManager {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 121 |     pub fn indicate_pid_ok(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn indicate_pid_deviation(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     pub fn clear_all(&self) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `timezone_offset` and `running` are never read
[INFO] [stdout]   --> src/models/clock.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct TimeZoneClock {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] 10 |     timezone_offset: RwLock<i32>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 11 |     running: RwLock<bool>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_timezone`, `get_timezone`, `get_local_time`, `get_time_registers`, `start`, and `stop` are never used
[INFO] [stdout]   --> src/models/clock.rs:22:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl TimeZoneClock {
[INFO] [stdout]    | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub fn set_timezone(&self, offset_hours: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub fn get_timezone(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn get_local_time(&self) -> chrono::NaiveDateTime {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 38 |     pub fn get_time_registers(&self) -> [u16; 6] {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn start(self: Arc<Self>) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn stop(&self) {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `merge_contiguous_addresses` is never used
[INFO] [stdout]  --> src/utils/mod.rs:5:8
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub fn merge_contiguous_addresses(addresses: &[u16]) -> Vec<(u16, u16)> {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `f64_to_u16` is never used
[INFO] [stdout]   --> src/utils/mod.rs:33:8
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub fn f64_to_u16(value: f64, decimal_places: u8) -> u16 {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `u16_to_f64` is never used
[INFO] [stdout]   --> src/utils/mod.rs:39:8
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub fn u16_to_f64(value: u16, decimal_places: u8) -> f64 {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_json_value` is never used
[INFO] [stdout]   --> src/utils/mod.rs:44:8
[INFO] [stdout]    |
[INFO] [stdout] 44 | pub fn get_json_value<'a>(value: &'a Value, path: &str) -> Option<&'a Value> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `set_json_value` is never used
[INFO] [stdout]   --> src/utils/mod.rs:59:8
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub fn set_json_value(value: &mut Value, path: &str, new_value: Value) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_csv_filename` is never used
[INFO] [stdout]   --> src/utils/mod.rs:81:8
[INFO] [stdout]    |
[INFO] [stdout] 81 | pub fn generate_csv_filename(prefix: &str) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `on_change`, `get_default_config`, `reset_config`, and `get` are never used
[INFO] [stdout]    --> src/config/file_store.rs:103:12
[INFO] [stdout]     |
[INFO] [stdout]  18 | impl FileStore {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn on_change<F: Fn(&ConfigType, &ConfigType) + Send + Sync + 'static>(&self, callback: F) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub fn get_default_config(&self) -> Result<ConfigType, crate::error::AppError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub fn reset_config(&self, keys: Option<&[&str]>) -> Result<(), crate::error::AppError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     pub fn get(&self, path: &str) -> Option<serde_json::Value> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_json_path` is never used
[INFO] [stdout]    --> src/config/file_store.rs:155:4
[INFO] [stdout]     |
[INFO] [stdout] 155 | fn get_json_path<'a>(value: &'a serde_json::Value, path: &str) -> Option<&'a serde_json::Value> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `start`, `end`, and `keys` are never read
[INFO] [stdout]   --> src/controllers/cdu.rs:82:23
[INFO] [stdout]    |
[INFO] [stdout] 82 | struct HistoryQuery { start: Option<String>, end: Option<String>, keys: Option<String> }
[INFO] [stdout]    |        ------------   ^^^^^                  ^^^                  ^^^^
[INFO] [stdout]    |        |
[INFO] [stdout]    |        fields in this struct
[INFO] [stdout]    |
[INFO] [stdout]    = note: `HistoryQuery` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> src/error.rs:7:5
[INFO] [stdout]    |
[INFO] [stdout]  5 | pub enum AppError {
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout]  6 |     #[error("系统未运行")]
[INFO] [stdout]  7 |     SystemNotRunning,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 10 |     ModbusNotConnected,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 13 |     Unauthorized,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 16 |     ConfigError(String),
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |     ModbusError(String),
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 22 |     PluginNotFound(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 25 |     SensorNotFound(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 28 |     InvalidParameter(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AppError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `name` is never read
[INFO] [stdout]   --> src/event_bus.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct EventMessage {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] 15 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `EventMessage` 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 `emit_sync` and `off` are never used
[INFO] [stdout]   --> src/event_bus.rs:61:12
[INFO] [stdout]    |
[INFO] [stdout] 32 | impl EventBus {
[INFO] [stdout]    | ------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 61 |     pub fn emit_sync<R: Send + 'static>(
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub fn off(&self, event_name: &str) {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `based` and `block_length` are never used
[INFO] [stdout]   --> src/models/modbus_server.rs:85:12
[INFO] [stdout]    |
[INFO] [stdout] 72 | impl ModbusServer {
[INFO] [stdout]    | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub fn based(&self) -> u8 { self.based }
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 86 |     pub fn block_length(&self) -> u16 { self.block_length }
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LANGUAGE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:466:15
[INFO] [stdout]     |
[INFO] [stdout] 466 |     pub const LANGUAGE: u16 = 2;
[INFO] [stdout]     |               ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RESET_ALL_SETTINGS` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:467:15
[INFO] [stdout]     |
[INFO] [stdout] 467 |     pub const RESET_ALL_SETTINGS: u16 = 3;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RESET_THRESHOLD_SETTINGS` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:468:15
[INFO] [stdout]     |
[INFO] [stdout] 468 |     pub const RESET_THRESHOLD_SETTINGS: u16 = 4;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RESET_PARAMS_SETTINGS` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:469:15
[INFO] [stdout]     |
[INFO] [stdout] 469 |     pub const RESET_PARAMS_SETTINGS: u16 = 5;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BACKUP_MODE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:470:15
[INFO] [stdout]     |
[INFO] [stdout] 470 |     pub const BACKUP_MODE: u16 = 9;
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AUTO_SWITCH_TO_AUTO_MODE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:472:15
[INFO] [stdout]     |
[INFO] [stdout] 472 |     pub const AUTO_SWITCH_TO_AUTO_MODE: u16 = 10;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AUTO_SHUTDOWN` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:473:15
[INFO] [stdout]     |
[INFO] [stdout] 473 |     pub const AUTO_SHUTDOWN: u16 = 11;
[INFO] [stdout]     |               ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AUTO_RUN` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:474:15
[INFO] [stdout]     |
[INFO] [stdout] 474 |     pub const AUTO_RUN: u16 = 12;
[INFO] [stdout]     |               ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RESET_PUMPS_RUN_TIME` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:476:15
[INFO] [stdout]     |
[INFO] [stdout] 476 |     pub const RESET_PUMPS_RUN_TIME: u16 = 15;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEBUG_MODE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:477:15
[INFO] [stdout]     |
[INFO] [stdout] 477 |     pub const DEBUG_MODE: u16 = 16;
[INFO] [stdout]     |               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `F1_DISABLE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:478:15
[INFO] [stdout]     |
[INFO] [stdout] 478 |     pub const F1_DISABLE: u16 = 19;
[INFO] [stdout]     |               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AUTO_SWITCH_HOUR` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:479:15
[INFO] [stdout]     |
[INFO] [stdout] 479 |     pub const AUTO_SWITCH_HOUR: u16 = 30;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AUTO_SWITCH_MIN` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:480:15
[INFO] [stdout]     |
[INFO] [stdout] 480 |     pub const AUTO_SWITCH_MIN: u16 = 31;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AUTO_SWITCH_SEC` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:481:15
[INFO] [stdout]     |
[INFO] [stdout] 481 |     pub const AUTO_SWITCH_SEC: u16 = 32;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RUN_PUMP_HOUR` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:482:15
[INFO] [stdout]     |
[INFO] [stdout] 482 |     pub const RUN_PUMP_HOUR: u16 = 33;
[INFO] [stdout]     |               ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RUN_PUMP_MIN` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:483:15
[INFO] [stdout]     |
[INFO] [stdout] 483 |     pub const RUN_PUMP_MIN: u16 = 34;
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RUN_PUMP_SEC` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:484:15
[INFO] [stdout]     |
[INFO] [stdout] 484 |     pub const RUN_PUMP_SEC: u16 = 35;
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SWITCH_TO_AUTO_MODE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:485:15
[INFO] [stdout]     |
[INFO] [stdout] 485 |     pub const SWITCH_TO_AUTO_MODE: u16 = 36;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TIME_YEAR` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:487:15
[INFO] [stdout]     |
[INFO] [stdout] 487 |     pub const TIME_YEAR: u16 = 41;
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TIME_MONTH` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:488:15
[INFO] [stdout]     |
[INFO] [stdout] 488 |     pub const TIME_MONTH: u16 = 42;
[INFO] [stdout]     |               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TIME_DAY` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:489:15
[INFO] [stdout]     |
[INFO] [stdout] 489 |     pub const TIME_DAY: u16 = 43;
[INFO] [stdout]     |               ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TIME_HOUR` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:490:15
[INFO] [stdout]     |
[INFO] [stdout] 490 |     pub const TIME_HOUR: u16 = 44;
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TIME_MINUTE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:491:15
[INFO] [stdout]     |
[INFO] [stdout] 491 |     pub const TIME_MINUTE: u16 = 45;
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TIME_SECOND` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:492:15
[INFO] [stdout]     |
[INFO] [stdout] 492 |     pub const TIME_SECOND: u16 = 46;
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TEMP_PID_KP` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:493:15
[INFO] [stdout]     |
[INFO] [stdout] 493 |     pub const TEMP_PID_KP: u16 = 50;
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TEMP_PID_KI` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:494:15
[INFO] [stdout]     |
[INFO] [stdout] 494 |     pub const TEMP_PID_KI: u16 = 51;
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TEMP_PID_KD` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:495:15
[INFO] [stdout]     |
[INFO] [stdout] 495 |     pub const TEMP_PID_KD: u16 = 52;
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TEMP_PID_DT` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:496:15
[INFO] [stdout]     |
[INFO] [stdout] 496 |     pub const TEMP_PID_DT: u16 = 53;
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TEMP_PID_MIN` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:497:15
[INFO] [stdout]     |
[INFO] [stdout] 497 |     pub const TEMP_PID_MIN: u16 = 54;
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TEMP_PID_MAX` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:498:15
[INFO] [stdout]     |
[INFO] [stdout] 498 |     pub const TEMP_PID_MAX: u16 = 55;
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TEMP_PID_DELTA` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:499:15
[INFO] [stdout]     |
[INFO] [stdout] 499 |     pub const TEMP_PID_DELTA: u16 = 56;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FLOW_PID_KP` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:500:15
[INFO] [stdout]     |
[INFO] [stdout] 500 |     pub const FLOW_PID_KP: u16 = 60;
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FLOW_PID_KI` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:501:15
[INFO] [stdout]     |
[INFO] [stdout] 501 |     pub const FLOW_PID_KI: u16 = 61;
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FLOW_PID_KD` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:502:15
[INFO] [stdout]     |
[INFO] [stdout] 502 |     pub const FLOW_PID_KD: u16 = 62;
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FLOW_PID_DT` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:503:15
[INFO] [stdout]     |
[INFO] [stdout] 503 |     pub const FLOW_PID_DT: u16 = 63;
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FLOW_PID_MIN` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:504:15
[INFO] [stdout]     |
[INFO] [stdout] 504 |     pub const FLOW_PID_MIN: u16 = 64;
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FLOW_PID_MAX` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:505:15
[INFO] [stdout]     |
[INFO] [stdout] 505 |     pub const FLOW_PID_MAX: u16 = 65;
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FLOW_PID_DELTA` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:506:15
[INFO] [stdout]     |
[INFO] [stdout] 506 |     pub const FLOW_PID_DELTA: u16 = 66;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PRESSURE_PID_KP` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:507:15
[INFO] [stdout]     |
[INFO] [stdout] 507 |     pub const PRESSURE_PID_KP: u16 = 70;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PRESSURE_PID_KI` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:508:15
[INFO] [stdout]     |
[INFO] [stdout] 508 |     pub const PRESSURE_PID_KI: u16 = 71;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PRESSURE_PID_KD` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:509:15
[INFO] [stdout]     |
[INFO] [stdout] 509 |     pub const PRESSURE_PID_KD: u16 = 72;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PRESSURE_PID_DT` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:510:15
[INFO] [stdout]     |
[INFO] [stdout] 510 |     pub const PRESSURE_PID_DT: u16 = 73;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PRESSURE_PID_MIN` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:511:15
[INFO] [stdout]     |
[INFO] [stdout] 511 |     pub const PRESSURE_PID_MIN: u16 = 74;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PRESSURE_PID_MAX` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:512:15
[INFO] [stdout]     |
[INFO] [stdout] 512 |     pub const PRESSURE_PID_MAX: u16 = 75;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PRESSURE_PID_DELTA` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:513:15
[INFO] [stdout]     |
[INFO] [stdout] 513 |     pub const PRESSURE_PID_DELTA: u16 = 76;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `IP_START` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:514:15
[INFO] [stdout]     |
[INFO] [stdout] 514 |     pub const IP_START: u16 = 80;
[INFO] [stdout]     |               ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PUMP_BASE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:516:15
[INFO] [stdout]     |
[INFO] [stdout] 516 |     pub const PUMP_BASE: u16 = 299;
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FLOW_BASE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:517:15
[INFO] [stdout]     |
[INFO] [stdout] 517 |     pub const FLOW_BASE: u16 = 399;
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PRESSURE_BASE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:518:15
[INFO] [stdout]     |
[INFO] [stdout] 518 |     pub const PRESSURE_BASE: u16 = 499;
[INFO] [stdout]     |               ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TEMP_BASE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:519:15
[INFO] [stdout]     |
[INFO] [stdout] 519 |     pub const TEMP_BASE: u16 = 599;
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PH_BASE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:520:15
[INFO] [stdout]     |
[INFO] [stdout] 520 |     pub const PH_BASE: u16 = 699;
[INFO] [stdout]     |               ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PHT_BASE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:521:15
[INFO] [stdout]     |
[INFO] [stdout] 521 |     pub const PHT_BASE: u16 = 799;
[INFO] [stdout]     |               ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `COMPUTED_BASE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:526:15
[INFO] [stdout]     |
[INFO] [stdout] 526 |     pub const COMPUTED_BASE: u16 = 1600;
[INFO] [stdout]     |               ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FLOW_TARGET` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:527:15
[INFO] [stdout]     |
[INFO] [stdout] 527 |     pub const FLOW_TARGET: u16 = 1999;
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TEMP_TARGET` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:528:15
[INFO] [stdout]     |
[INFO] [stdout] 528 |     pub const TEMP_TARGET: u16 = 2000;
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PRESSURE_TARGET` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:529:15
[INFO] [stdout]     |
[INFO] [stdout] 529 |     pub const PRESSURE_TARGET: u16 = 2001;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `VALVE_TARGET` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:530:15
[INFO] [stdout]     |
[INFO] [stdout] 530 |     pub const VALVE_TARGET: u16 = 2002;
[INFO] [stdout]     |               ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `POWER_OFF` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:531:15
[INFO] [stdout]     |
[INFO] [stdout] 531 |     pub const POWER_OFF: u16 = 2097;
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `POWER_OFF_STATUS` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:532:15
[INFO] [stdout]     |
[INFO] [stdout] 532 |     pub const POWER_OFF_STATUS: u16 = 2098;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ERROR_BACKUP_BASE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:533:15
[INFO] [stdout]     |
[INFO] [stdout] 533 |     pub const ERROR_BACKUP_BASE: u16 = 2099;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ALARM_COIL_BASE` is never used
[INFO] [stdout]    --> src/models/modbus_server.rs:534:15
[INFO] [stdout]     |
[INFO] [stdout] 534 |     pub const ALARM_COIL_BASE: u16 = 2599;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `host` and `port` are never read
[INFO] [stdout]   --> src/models/modbus_client.rs:19:11
[INFO] [stdout]    |
[INFO] [stdout] 19 |     Tcp { host: String, port: u16 },
[INFO] [stdout]    |     ---   ^^^^          ^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ConnectionType` 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: variant `Serial` is never constructed
[INFO] [stdout]   --> src/models/modbus_client.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub enum ConnectionType {
[INFO] [stdout]    |          -------------- variant in this enum
[INFO] [stdout] 19 |     Tcp { host: String, port: u16 },
[INFO] [stdout] 20 |     Serial { port: String, baud_rate: u32 },
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ConnectionType` 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 `write_single_register`, `write_multiple_registers`, and `write_single_coil` are never used
[INFO] [stdout]   --> src/models/modbus_client.rs:69:18
[INFO] [stdout]    |
[INFO] [stdout] 23 | impl ModbusClient {
[INFO] [stdout]    | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub async fn write_single_register(&mut self, addr: u16, value: u16) -> Result<(), String> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 79 |     pub async fn write_multiple_registers(&mut self, addr: u16, values: &[u16]) -> Result<(), String> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 99 |     pub async fn write_single_coil(&mut self, addr: u16, value: bool) -> Result<(), String> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `value_key` is never read
[INFO] [stdout]   --> src/models/modbus_config_store.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct ConfigEntry {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 17 |     pub value_key: String,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ConfigEntry` 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: method `reset_config` is never used
[INFO] [stdout]    --> src/models/modbus_config_store.rs:248:12
[INFO] [stdout]     |
[INFO] [stdout]  28 | impl ModbusConfigStore {
[INFO] [stdout]     | ---------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 248 |     pub fn reset_config(&self, store_key: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `SensorState` is never used
[INFO] [stdout]   --> src/models/sensor.rs:56:10
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub enum SensorState {
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `plugin_type`, `is_sensor`, `group_list`, and `attrs_meta` are never read
[INFO] [stdout]   --> src/models/plugin.rs:12:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct Plugin {
[INFO] [stdout]    |            ------ fields in this struct
[INFO] [stdout] 11 |     pub name: String,
[INFO] [stdout] 12 |     pub plugin_type: String,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 13 |     pub index: u16,
[INFO] [stdout] 14 |     pub is_sensor: bool,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 17 |     pub group_list: Vec<GroupConfig>,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 18 |     pub merged_addresses: Vec<(u16, u16)>,
[INFO] [stdout] 19 |     pub attrs_meta: IndexMap<String, SensorAttrTemplate>,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Plugin` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `write_formula`, `unit`, `write_method`, `batch_address`, `min`, and `max` are never read
[INFO] [stdout]   --> src/models/plugin.rs:43:9
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub struct MergedAttrConfig {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub write_formula: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 44 |     pub unit: Option<String>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub write_method: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 48 |     pub batch_address: Option<u16>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 49 |     pub min: Option<f64>,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 50 |     pub max: Option<f64>,
[INFO] [stdout]    |         ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MergedAttrConfig` 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 `write_modbus_value` and `get_all_sensor_addresses` are never used
[INFO] [stdout]    --> src/models/plugin.rs:323:12
[INFO] [stdout]     |
[INFO] [stdout]  58 | impl Plugin {
[INFO] [stdout]     | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 323 |     pub fn write_modbus_value(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 363 |     pub fn get_all_sensor_addresses(&self) -> Vec<u16> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `reverse_formula` is never used
[INFO] [stdout]    --> src/models/plugin.rs:467:4
[INFO] [stdout]     |
[INFO] [stdout] 467 | fn reverse_formula(value: f64, decimal_places: u8) -> f64 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_plugin`, `control_by_name`, `update_all_plugins`, and `stop_polling` are never used
[INFO] [stdout]    --> src/models/plugin_manager.rs:89:12
[INFO] [stdout]     |
[INFO] [stdout]  19 | impl PluginManager {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn get_plugin(&self, name: &str) -> Option<Arc<Plugin>> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub async fn control_by_name(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 216 |     pub fn update_all_plugins(&self, _read_data: &HashMap<u16, u16>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 333 |     pub fn stop_polling(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `calculate`, `update_params`, `update_limits`, and `set_target` are never used
[INFO] [stdout]    --> src/models/pid.rs:25:12
[INFO] [stdout]     |
[INFO] [stdout]  24 | impl PidController {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout]  25 |     pub fn new(name: &str, kp: f64, ki: f64, kd: f64, dt: f64) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  45 |     pub fn calculate(&mut self, current_value: f64) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  95 |     pub fn update_params(&mut self, kp: f64, ki: f64, kd: f64, dt: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn update_limits(&mut self, min: f64, max: f64, max_delta: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub fn set_target(&mut self, target: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `auto_switch_enabled`, `auto_switch_delay`, and `auto_switch_target` are never read
[INFO] [stdout]   --> src/models/control_mode.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub struct ControlModeManager {
[INFO] [stdout]    |            ------------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 35 |     auto_switch_enabled: RwLock<bool>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 36 |     auto_switch_delay: RwLock<Duration>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 37 |     auto_switch_target: RwLock<ControlModeType>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_auto_switch`, `start_auto_switch_timer`, and `run_control_cycle` are never used
[INFO] [stdout]    --> src/models/control_mode.rs:73:12
[INFO] [stdout]     |
[INFO] [stdout]  40 | impl ControlModeManager {
[INFO] [stdout]     | ----------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  73 |     pub fn set_auto_switch(&self, enabled: bool, delay_secs: u64, target_mode: u16) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  80 |     pub async fn start_auto_switch_timer(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub async fn run_control_cycle(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `log_dir` and `max_history` are never read
[INFO] [stdout]   --> src/models/alarm.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub struct AlarmLog {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 33 |     log_dir: PathBuf,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 34 |     max_history: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `add_alarm`, `clear_alarm`, and `check_sensor_threshold` are never used
[INFO] [stdout]    --> src/models/alarm.rs:52:12
[INFO] [stdout]     |
[INFO] [stdout]  37 | impl AlarmLog {
[INFO] [stdout]     | ------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  52 |     pub fn add_alarm(&self, name: &str, message: &str, level: AlarmLevel) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn clear_alarm(&self, name: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 117 |     pub fn check_sensor_threshold(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `backup_mode`, `polling_interval`, `active_pump`, `pump_run_times`, and `pump_count` are never read
[INFO] [stdout]   --> src/models/pump_manager.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct PumpManager {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 16 |     backup_mode: RwLock<BackupMode>,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 17 |     polling_interval: RwLock<Duration>, // 泵轮换间隔
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 18 |     active_pump: RwLock<usize>,          // 当前活动泵ID
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 19 |     pump_run_times: RwLock<Vec<f64>>,    // 各泵累计运行时间(秒)
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 20 |     pump_count: usize,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/models/pump_manager.rs:35:12
[INFO] [stdout]     |
[INFO] [stdout]  23 | impl PumpManager {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  35 |     pub fn get_active_pump(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  40 |     pub fn set_backup_mode(&self, mode: BackupMode) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  46 |     pub fn set_polling_interval(&self, interval_secs: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  51 |     pub fn switch_to_next_pump(&self, reason: &str) -> Option<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  60 |     pub fn get_target_duties(&self, base_duty: f64) -> Vec<f64> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  79 |     pub async fn start_rotation_timer(self: Arc<Self>) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub fn update_run_time(&self, pump_idx: usize, delta_seconds: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn get_run_times(&self) -> Vec<f64> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub fn reset_run_times(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name` and `address` are never read
[INFO] [stdout]   --> src/models/light.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct Light {
[INFO] [stdout]    |            ----- fields in this struct
[INFO] [stdout] 17 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 18 |     pub address: u16,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `address` is never read
[INFO] [stdout]   --> src/models/light.rs:49:9
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub struct Buzzer {
[INFO] [stdout]    |            ------ field in this struct
[INFO] [stdout] 49 |     pub address: u16,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `set_muted` is never used
[INFO] [stdout]   --> src/models/light.rs:73:12
[INFO] [stdout]    |
[INFO] [stdout] 54 | impl Buzzer {
[INFO] [stdout]    | ----------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub fn set_muted(&self, muted: bool) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `indicate_pid_ok`, `indicate_pid_deviation`, and `clear_all` are never used
[INFO] [stdout]    --> src/models/light.rs:121:12
[INFO] [stdout]     |
[INFO] [stdout]  89 | impl LightManager {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 121 |     pub fn indicate_pid_ok(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn indicate_pid_deviation(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     pub fn clear_all(&self) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `timezone_offset` and `running` are never read
[INFO] [stdout]   --> src/models/clock.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct TimeZoneClock {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] 10 |     timezone_offset: RwLock<i32>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 11 |     running: RwLock<bool>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_timezone`, `get_timezone`, `get_local_time`, `get_time_registers`, `start`, and `stop` are never used
[INFO] [stdout]   --> src/models/clock.rs:22:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl TimeZoneClock {
[INFO] [stdout]    | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub fn set_timezone(&self, offset_hours: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub fn get_timezone(&self) -> i32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn get_local_time(&self) -> chrono::NaiveDateTime {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 38 |     pub fn get_time_registers(&self) -> [u16; 6] {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn start(self: Arc<Self>) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn stop(&self) {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ExpressionEngine` is never constructed
[INFO] [stdout]  --> src/models/expression.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct ExpressionEngine;
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `evaluate` and `eval_simple` are never used
[INFO] [stdout]   --> src/models/expression.rs:9:12
[INFO] [stdout]    |
[INFO] [stdout]  6 | impl ExpressionEngine {
[INFO] [stdout]    | --------------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  9 |     pub fn evaluate(expr: &str, variables: &HashMap<String, f64>) -> Result<f64, String> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 25 |     pub fn eval_simple(expr: &str) -> Result<f64, String> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `merge_contiguous_addresses` is never used
[INFO] [stdout]  --> src/utils/mod.rs:5:8
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub fn merge_contiguous_addresses(addresses: &[u16]) -> Vec<(u16, u16)> {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `f64_to_u16` is never used
[INFO] [stdout]   --> src/utils/mod.rs:33:8
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub fn f64_to_u16(value: f64, decimal_places: u8) -> u16 {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `u16_to_f64` is never used
[INFO] [stdout]   --> src/utils/mod.rs:39:8
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub fn u16_to_f64(value: u16, decimal_places: u8) -> f64 {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_json_value` is never used
[INFO] [stdout]   --> src/utils/mod.rs:44:8
[INFO] [stdout]    |
[INFO] [stdout] 44 | pub fn get_json_value<'a>(value: &'a Value, path: &str) -> Option<&'a Value> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `set_json_value` is never used
[INFO] [stdout]   --> src/utils/mod.rs:59:8
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub fn set_json_value(value: &mut Value, path: &str, new_value: Value) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_csv_filename` is never used
[INFO] [stdout]   --> src/utils/mod.rs:81:8
[INFO] [stdout]    |
[INFO] [stdout] 81 | pub fn generate_csv_filename(prefix: &str) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] warning: unused dependency `csv`
[INFO] [stderr]  --> Cargo.toml:5:1
[INFO] [stderr]   |
[INFO] [stderr] 5 | csv = "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 `csv`
[INFO] [stderr] warning: unused dependency `dashmap`
[INFO] [stderr]  --> Cargo.toml:6:1
[INFO] [stderr]   |
[INFO] [stderr] 6 | dashmap = "5"
[INFO] [stderr]   | ^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr] help: consider removing the dependency on `dashmap`
[INFO] [stderr] warning: unused dependency `file-rotate`
[INFO] [stderr]  --> Cargo.toml:7:1
[INFO] [stderr]   |
[INFO] [stderr] 7 | file-rotate = "0.2"
[INFO] [stderr]   | ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr] help: consider removing the dependency on `file-rotate`
[INFO] [stderr] warning: unused dependency `notify`
[INFO] [stderr]  --> Cargo.toml:9:1
[INFO] [stderr]   |
[INFO] [stderr] 9 | notify = "6"
[INFO] [stderr]   | ^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr] help: consider removing the dependency on `notify`
[INFO] [stderr] warning: unused dependency `reqwest`
[INFO] [stderr]   --> Cargo.toml:35:15
[INFO] [stderr]    |
[INFO] [stderr] 35 | [dependencies.reqwest]
[INFO] [stderr]    |               ^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr] help: consider removing the dependency on `reqwest`
[INFO] [stderr] warning: unused dependency `tokio-serial`
[INFO] [stderr]   --> Cargo.toml:18:1
[INFO] [stderr]    |
[INFO] [stderr] 18 | tokio-serial = "5"
[INFO] [stderr]    | ^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr] help: consider removing the dependency on `tokio-serial`
[INFO] [stderr] warning: `cw4py` (manifest) generated 6 warnings
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 44.85s
[INFO] [stderr] warning: the following packages contain code that will be rejected by a future version of Rust: meval v0.2.0, nix v0.29.0, nom v1.2.4
[INFO] [stderr] note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 5`
[INFO] running `Command { std: "docker" "inspect" "336da93e2b40ee5e8cfb2b972155a8c4226c2ab882f1f55cbc73056b3d220718", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "336da93e2b40ee5e8cfb2b972155a8c4226c2ab882f1f55cbc73056b3d220718", kill_on_drop: false }`
[INFO] [stdout] 336da93e2b40ee5e8cfb2b972155a8c4226c2ab882f1f55cbc73056b3d220718
