[INFO] fetching crate cloud-disk-sync 0.1.0...
[INFO] checking cloud-disk-sync-0.1.0 against try#54bb9bb1bbe87f59b5a2e9afea4c8cedcf5e0b47 for pr-153041
[INFO] extracting crate cloud-disk-sync 0.1.0 into /workspace/builds/worker-7-tc2/source
[INFO] started tweaking crates.io crate cloud-disk-sync 0.1.0
[INFO] removed 0 missing examples
[INFO] removed 0 missing tests
[INFO] finished tweaking crates.io crate cloud-disk-sync 0.1.0
[INFO] tweaked toml for crates.io crate cloud-disk-sync 0.1.0 written to /workspace/builds/worker-7-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate cloud-disk-sync 0.1.0 on toolchain 54bb9bb1bbe87f59b5a2e9afea4c8cedcf5e0b47
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+54bb9bb1bbe87f59b5a2e9afea4c8cedcf5e0b47" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate cloud-disk-sync 0.1.0 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" "+54bb9bb1bbe87f59b5a2e9afea4c8cedcf5e0b47" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr] warning: only one of `license` or `license-file` is necessary
[INFO] [stderr] `license` should be used if the package license can be expressed with a standard SPDX expression.
[INFO] [stderr] `license-file` should be used if the package uses a non-standard license.
[INFO] [stderr] See https://doc.rust-lang.org/cargo/reference/manifest.html#the-license-and-license-file-fields for more information.
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:61361fe0aef631f17e9d025a70c5a647956f8c671dd02950a60ad3f5cc5526d7" "/opt/rustwide/cargo-home/bin/cargo" "+54bb9bb1bbe87f59b5a2e9afea4c8cedcf5e0b47" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] d70483da1321318b236eb7c09f5f246817e4de396a550c24f24729af3b52c76e
[INFO] running `Command { std: "docker" "start" "-a" "d70483da1321318b236eb7c09f5f246817e4de396a550c24f24729af3b52c76e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "d70483da1321318b236eb7c09f5f246817e4de396a550c24f24729af3b52c76e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "d70483da1321318b236eb7c09f5f246817e4de396a550c24f24729af3b52c76e", kill_on_drop: false }`
[INFO] [stdout] d70483da1321318b236eb7c09f5f246817e4de396a550c24f24729af3b52c76e
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:61361fe0aef631f17e9d025a70c5a647956f8c671dd02950a60ad3f5cc5526d7" "/opt/rustwide/cargo-home/bin/cargo" "+54bb9bb1bbe87f59b5a2e9afea4c8cedcf5e0b47" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 8f895edbc40eed2d97ae872b0564ddbd4985d78b13c64f029286f406b9436c36
[INFO] running `Command { std: "docker" "start" "-a" "8f895edbc40eed2d97ae872b0564ddbd4985d78b13c64f029286f406b9436c36", kill_on_drop: false }`
[INFO] [stderr] warning: only one of `license` or `license-file` is necessary
[INFO] [stderr] `license` should be used if the package license can be expressed with a standard SPDX expression.
[INFO] [stderr] `license-file` should be used if the package uses a non-standard license.
[INFO] [stderr] See https://doc.rust-lang.org/cargo/reference/manifest.html#the-license-and-license-file-fields for more information.
[INFO] [stderr]    Compiling syn v2.0.114
[INFO] [stderr]    Compiling typenum v1.19.0
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]     Checking mio v1.1.1
[INFO] [stderr]    Compiling rustix v1.1.3
[INFO] [stderr]     Checking itertools v0.14.0
[INFO] [stderr]     Checking getrandom v0.3.4
[INFO] [stderr]     Checking castaway v0.2.4
[INFO] [stderr]    Compiling instability v0.3.11
[INFO] [stderr]    Compiling convert_case v0.10.0
[INFO] [stderr]     Checking http v0.2.12
[INFO] [stderr]    Compiling native-tls v0.2.14
[INFO] [stderr]     Checking signal-hook v0.3.18
[INFO] [stderr]     Checking time-core v0.1.7
[INFO] [stderr]     Checking phf_shared v0.12.1
[INFO] [stderr]     Checking dirs-sys-next v0.1.2
[INFO] [stderr]     Checking compact_str v0.9.0
[INFO] [stderr]     Checking time v0.3.45
[INFO] [stderr]    Compiling libsqlite3-sys v0.36.0
[INFO] [stderr]     Checking line-clipping v0.3.5
[INFO] [stderr]    Compiling portable-atomic v1.13.0
[INFO] [stderr]    Compiling chrono-tz v0.10.4
[INFO] [stderr]     Checking signal-hook-mio v0.2.5
[INFO] [stderr]     Checking clap_builder v4.5.54
[INFO] [stderr]     Checking dirs-next v2.0.0
[INFO] [stderr]     Checking phf v0.12.1
[INFO] [stderr]     Checking console v0.16.2
[INFO] [stderr]    Compiling sys-info v0.9.1
[INFO] [stderr]     Checking csv-core v0.1.13
[INFO] [stderr]    Compiling tokio-cron-scheduler v0.15.1
[INFO] [stderr]     Checking rand_core v0.9.5
[INFO] [stderr]    Compiling rlimit v0.10.2
[INFO] [stderr]     Checking dirs-sys v0.5.0
[INFO] [stderr]     Checking rand_chacha v0.9.0
[INFO] [stderr]     Checking uuid v1.19.0
[INFO] [stderr]     Checking term v0.7.0
[INFO] [stderr]     Checking hashlink v0.11.0
[INFO] [stderr]     Checking rtoolbox v0.0.3
[INFO] [stderr]     Checking is-terminal v0.4.17
[INFO] [stderr]    Compiling multer v2.1.0
[INFO] [stderr]     Checking winnow v0.6.26
[INFO] [stderr]     Checking encode_unicode v1.0.0
[INFO] [stderr]     Checking fallible-iterator v0.3.0
[INFO] [stderr]     Checking dashmap v6.1.0
[INFO] [stderr]     Checking rand v0.9.2
[INFO] [stderr]     Checking headers-core v0.2.0
[INFO] [stderr]     Checking http-body v0.4.6
[INFO] [stderr]     Checking generic-array v0.14.7
[INFO] [stderr]     Checking hybrid-array v0.4.5
[INFO] [stderr]     Checking indicatif v0.18.3
[INFO] [stderr]     Checking rpassword v7.4.0
[INFO] [stderr]     Checking dirs v6.0.0
[INFO] [stderr]     Checking fs2 v0.4.3
[INFO] [stderr]     Checking sysinfo v0.37.2
[INFO] [stderr]     Checking quick-xml v0.39.0
[INFO] [stderr]     Checking spin v0.9.8
[INFO] [stderr]     Checking scoped-tls v1.0.1
[INFO] [stderr]     Checking crypto-common v0.1.7
[INFO] [stderr]     Checking block-buffer v0.10.4
[INFO] [stderr]     Checking inout v0.1.4
[INFO] [stderr]     Checking crypto-common v0.2.0-rc.4
[INFO] [stderr]     Checking block-buffer v0.11.0-rc.5
[INFO] [stderr]     Checking universal-hash v0.5.1
[INFO] [stderr]     Checking aead v0.5.2
[INFO] [stderr]     Checking digest v0.10.7
[INFO] [stderr]     Checking cipher v0.4.4
[INFO] [stderr]     Checking polyval v0.6.2
[INFO] [stderr]     Checking sha1 v0.10.6
[INFO] [stderr]     Checking sha2 v0.10.9
[INFO] [stderr]     Checking unicode-truncate v2.0.1
[INFO] [stderr]     Checking aes v0.8.4
[INFO] [stderr]     Checking ctr v0.9.2
[INFO] [stderr]     Checking ghash v0.5.1
[INFO] [stderr]     Checking headers v0.3.9
[INFO] [stderr]     Checking digest v0.11.0-rc.3
[INFO] [stderr]     Checking tempfile v3.24.0
[INFO] [stderr]     Checking hmac v0.13.0-rc.2
[INFO] [stderr]     Checking aes-gcm v0.10.3
[INFO] [stderr]     Checking pbkdf2 v0.13.0-rc.1
[INFO] [stderr]     Checking dialoguer v0.12.0
[INFO] [stderr]     Checking serde_json v1.0.149
[INFO] [stderr]     Checking csv v1.4.0
[INFO] [stderr]     Checking prettytable v0.10.0
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling darling_core v0.20.11
[INFO] [stderr]    Compiling darling_core v0.23.0
[INFO] [stderr]    Compiling zerofrom-derive v0.1.6
[INFO] [stderr]    Compiling yoke-derive v0.8.1
[INFO] [stderr]    Compiling zerovec-derive v0.11.2
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling tokio-macros v2.6.0
[INFO] [stderr]    Compiling futures-macro v0.3.31
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling strum_macros v0.27.2
[INFO] [stderr]    Compiling thiserror-impl v2.0.17
[INFO] [stderr]    Compiling openssl-macros v0.1.1
[INFO] [stderr]    Compiling derive_more-impl v2.1.1
[INFO] [stderr]    Compiling clap_derive v4.5.49
[INFO] [stderr]     Checking openssl v0.10.75
[INFO] [stderr]     Checking tokio v1.49.0
[INFO] [stderr]     Checking derive_more v2.1.1
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]     Checking crossterm v0.29.0
[INFO] [stderr]     Checking futures-util v0.3.31
[INFO] [stderr]    Compiling num-derive v0.4.2
[INFO] [stderr]    Compiling pin-project-internal v1.1.10
[INFO] [stderr]     Checking zerofrom v0.1.6
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]     Checking yoke v0.8.1
[INFO] [stderr]     Checking clap v4.5.54
[INFO] [stderr]     Checking clap_complete v4.5.65
[INFO] [stderr]     Checking thiserror v2.0.17
[INFO] [stderr]     Checking tracing v0.1.44
[INFO] [stderr]     Checking kasuari v0.4.11
[INFO] [stderr]     Checking zerovec v0.11.5
[INFO] [stderr]     Checking zerotrie v0.2.3
[INFO] [stderr]     Checking tracing-subscriber v0.3.22
[INFO] [stderr]    Compiling darling_macro v0.20.11
[INFO] [stderr]     Checking thiserror v1.0.69
[INFO] [stderr]    Compiling darling v0.20.11
[INFO] [stderr]    Compiling derive_builder_core v0.20.2
[INFO] [stderr]     Checking strum v0.27.2
[INFO] [stderr]     Checking tinystr v0.8.2
[INFO] [stderr]     Checking potential_utf v0.1.4
[INFO] [stderr]    Compiling darling_macro v0.23.0
[INFO] [stderr]     Checking icu_collections v2.1.1
[INFO] [stderr]     Checking pin-project v1.1.10
[INFO] [stderr]     Checking ratatui-core v0.1.0
[INFO] [stderr]     Checking icu_locale_core v2.1.1
[INFO] [stderr]    Compiling darling v0.23.0
[INFO] [stderr]     Checking serde v1.0.228
[INFO] [stderr]     Checking chrono v0.4.42
[INFO] [stderr]     Checking serde_yaml v0.9.34+deprecated
[INFO] [stderr]     Checking serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling derive_builder_macro v0.20.2
[INFO] [stderr]     Checking icu_provider v2.1.1
[INFO] [stderr]     Checking derive_builder v0.20.2
[INFO] [stderr]     Checking icu_normalizer v2.1.1
[INFO] [stderr]     Checking icu_properties v2.1.2
[INFO] [stderr]     Checking ratatui-widgets v0.3.0
[INFO] [stderr]     Checking ratatui-crossterm v0.1.0
[INFO] [stderr]     Checking croner v3.0.1
[INFO] [stderr]     Checking cron v0.15.0
[INFO] [stderr]     Checking futures-executor v0.3.31
[INFO] [stderr]     Checking futures v0.3.31
[INFO] [stderr]     Checking idna_adapter v1.2.1
[INFO] [stderr]     Checking idna v1.1.0
[INFO] [stderr]     Checking ratatui-macros v0.7.0
[INFO] [stderr]     Checking ratatui v0.30.0
[INFO] [stderr]     Checking url v2.5.8
[INFO] [stderr]     Checking tungstenite v0.21.0
[INFO] [stderr]     Checking hyper v1.8.1
[INFO] [stderr]     Checking tower v0.5.3
[INFO] [stderr]     Checking tokio-native-tls v0.3.1
[INFO] [stderr]     Checking tokio-util v0.7.18
[INFO] [stderr]     Checking rusqlite v0.38.0
[INFO] [stderr]     Checking tokio-tungstenite v0.21.0
[INFO] [stderr]     Checking tower-http v0.6.8
[INFO] [stderr]     Checking h2 v0.3.27
[INFO] [stderr]     Checking hyper-util v0.1.19
[INFO] [stderr]     Checking hyper-tls v0.6.0
[INFO] [stderr]     Checking reqwest v0.13.1
[INFO] [stderr]     Checking hyper v0.14.32
[INFO] [stderr]     Checking cloud-disk-sync v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `uuid::Uuid`
[INFO] [stdout]  --> src/config/migrator.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use uuid::Uuid;
[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: `sleep`
[INFO] [stdout]   --> src/core/scheduler.rs:13:29
[INFO] [stdout]    |
[INFO] [stdout] 13 | use tokio::time::{Duration, sleep};
[INFO] [stdout]    |                             ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rand::RngCore`
[INFO] [stdout]  --> src/encryption/types.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use rand::RngCore;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rand::rngs::OsRng`
[INFO] [stdout]  --> src/encryption/types.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use rand::rngs::OsRng;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Nonce`
[INFO] [stdout]  --> src/encryption/mod.rs:6:27
[INFO] [stdout]   |
[INFO] [stdout] 6 | use aes_gcm::aead::{Aead, Nonce};
[INFO] [stdout]   |                           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::config::SyncTask`
[INFO] [stdout]  --> src/report/mod.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::config::SyncTask;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::SyncError`
[INFO] [stdout]  --> src/report/mod.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::error::SyncError;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ChecksumType`
[INFO] [stdout]  --> src/sync/engine.rs:7:25
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::sync::diff::{ChecksumType, DiffAction, DiffResult, FileDiff};
[INFO] [stdout]   |                         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `instrument`
[INFO] [stdout]   --> src/sync/engine.rs:14:35
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tracing::{debug, error, info, instrument, warn};
[INFO] [stdout]    |                                   ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated function `rand::thread_rng`: Renamed to `rng`
[INFO] [stdout]    --> src/core/retry.rs:134:29
[INFO] [stdout]     |
[INFO] [stdout] 134 |         let mut rng = rand::thread_rng();
[INFO] [stdout]     |                             ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Checking warp v0.3.7
[INFO] [stdout] warning: use of deprecated method `rand::Rng::gen_range`: Renamed to `random_range`
[INFO] [stdout]    --> src/core/retry.rs:135:26
[INFO] [stdout]     |
[INFO] [stdout] 135 |         let jitter = rng.gen_range(-self.jitter_ratio..self.jitter_ratio);
[INFO] [stdout]     |                          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TimeZone`
[INFO] [stdout]  --> src/core/scheduler.rs:6:24
[INFO] [stdout]   |
[INFO] [stdout] 6 | use chrono::{DateTime, TimeZone, Utc};
[INFO] [stdout]   |                        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/core/health.rs:87:13
[INFO] [stdout]    |
[INFO] [stdout] 87 |         let mut status = ConnectivityStatus {
[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: `internet_test`
[INFO] [stdout]   --> src/core/health.rs:95:13
[INFO] [stdout]    |
[INFO] [stdout] 95 |         let internet_test = ConnectivityTest {
[INFO] [stdout]    |             ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_internet_test`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `requests_per_second`
[INFO] [stdout]    --> src/core/rate_limit.rs:174:28
[INFO] [stdout]     |
[INFO] [stdout] 174 |     fn set_rate(&mut self, requests_per_second: f64) {
[INFO] [stdout]     |                            ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_requests_per_second`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `limit`
[INFO] [stdout]    --> src/core/resources.rs:202:21
[INFO] [stdout]     |
[INFO] [stdout] 202 |         if let Some(limit) = self.memory_limit {
[INFO] [stdout]     |                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_limit`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `limit`
[INFO] [stdout]    --> src/core/resources.rs:208:21
[INFO] [stdout]     |
[INFO] [stdout] 208 |         if let Some(limit) = self.disk_limit {
[INFO] [stdout]     |                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_limit`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `limit`
[INFO] [stdout]    --> src/core/resources.rs:214:21
[INFO] [stdout]     |
[INFO] [stdout] 214 |         if let Some(limit) = self.file_descriptors_limit {
[INFO] [stdout]     |                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_limit`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `now`
[INFO] [stdout]    --> src/core/resources.rs:490:13
[INFO] [stdout]     |
[INFO] [stdout] 490 |         let now = Instant::now();
[INFO] [stdout]     |             ^^^ help: if this is intentional, prefix it with an underscore: `_now`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/core/scheduler.rs:362:23
[INFO] [stdout]     |
[INFO] [stdout] 362 |             .map_err(|e| SyncError::Unknown("".into()))?;
[INFO] [stdout]     |                       ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sync_engine`
[INFO] [stdout]    --> src/core/scheduler.rs:368:9
[INFO] [stdout]     |
[INFO] [stdout] 368 |         sync_engine: &Arc<SyncEngine>,
[INFO] [stdout]     |         ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sync_engine`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `duration`
[INFO] [stdout]    --> src/core/scheduler.rs:403:13
[INFO] [stdout]     |
[INFO] [stdout] 403 |         let duration = Utc::now() - start_time;
[INFO] [stdout]     |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_duration`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `success`
[INFO] [stdout]    --> src/core/scheduler.rs:404:13
[INFO] [stdout]     |
[INFO] [stdout] 404 |         let success = match result {
[INFO] [stdout]     |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_success`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `config`
[INFO] [stdout]    --> src/core/scheduler.rs:852:32
[INFO] [stdout]     |
[INFO] [stdout] 852 |     async fn send_email(&self, config: &EmailConfig, message: &str) -> Result<()> {
[INFO] [stdout]     |                                ^^^^^^ help: if this is intentional, prefix it with an underscore: `_config`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `message`
[INFO] [stdout]    --> src/core/scheduler.rs:852:54
[INFO] [stdout]     |
[INFO] [stdout] 852 |     async fn send_email(&self, config: &EmailConfig, message: &str) -> Result<()> {
[INFO] [stdout]     |                                                      ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_message`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/encryption/mod.rs:61:23
[INFO] [stdout]    |
[INFO] [stdout] 61 |             .map_err(|e| EncryptionError::InvalidData)?;
[INFO] [stdout]    |                       ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `local_path`
[INFO] [stdout]   --> src/providers/aliyun.rs:62:9
[INFO] [stdout]    |
[INFO] [stdout] 62 |         local_path: &Path,
[INFO] [stdout]    |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_local_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `remote_path`
[INFO] [stdout]   --> src/providers/aliyun.rs:63:9
[INFO] [stdout]    |
[INFO] [stdout] 63 |         remote_path: &str,
[INFO] [stdout]    |         ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_remote_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `remote_path`
[INFO] [stdout]   --> src/providers/aliyun.rs:72:9
[INFO] [stdout]    |
[INFO] [stdout] 72 |         remote_path: &str,
[INFO] [stdout]    |         ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_remote_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `local_path`
[INFO] [stdout]   --> src/providers/aliyun.rs:73:9
[INFO] [stdout]    |
[INFO] [stdout] 73 |         local_path: &Path,
[INFO] [stdout]    |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_local_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `path`
[INFO] [stdout]   --> src/providers/aliyun.rs:79:28
[INFO] [stdout]    |
[INFO] [stdout] 79 |     async fn delete(&self, path: &str) -> Result<(), SyncError> {
[INFO] [stdout]    |                            ^^^^ help: if this is intentional, prefix it with an underscore: `_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `path`
[INFO] [stdout]   --> src/providers/aliyun.rs:82:27
[INFO] [stdout]    |
[INFO] [stdout] 82 |     async fn mkdir(&self, path: &str) -> Result<(), SyncError> {
[INFO] [stdout]    |                           ^^^^ help: if this is intentional, prefix it with an underscore: `_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `path`
[INFO] [stdout]   --> src/providers/aliyun.rs:94:28
[INFO] [stdout]    |
[INFO] [stdout] 94 |     async fn exists(&self, path: &str) -> Result<bool, SyncError> {
[INFO] [stdout]    |                            ^^^^ help: if this is intentional, prefix it with an underscore: `_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/providers/webdav.rs:123:13
[INFO] [stdout]     |
[INFO] [stdout] 123 |         let mut in_collection = false;
[INFO] [stdout]     |             ----^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `in_collection`
[INFO] [stdout]    --> src/providers/webdav.rs:123:13
[INFO] [stdout]     |
[INFO] [stdout] 123 |         let mut in_collection = false;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_in_collection`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `verification_rate`
[INFO] [stdout]     --> src/report/mod.rs:1115:13
[INFO] [stdout]      |
[INFO] [stdout] 1115 |         let verification_rate = self.verification_success_rate();
[INFO] [stdout]      |             ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_verification_rate`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `algorithm`
[INFO] [stdout]    --> src/sync/diff.rs:484:38
[INFO] [stdout]     |
[INFO] [stdout] 484 |     pub fn calculate_hash(&mut self, algorithm: ChecksumType) -> Result<()> {
[INFO] [stdout]     |                                      ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_algorithm`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/sync/diff.rs:771:23
[INFO] [stdout]     |
[INFO] [stdout] 771 |             .map_err(|e| SyncError::Unsupported("转换异常".into()))?;
[INFO] [stdout]     |                       ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/sync/diff.rs:776:27
[INFO] [stdout]     |
[INFO] [stdout] 776 |                 .map_err(|e| SyncError::Unsupported("转换异常".into()))?,
[INFO] [stdout]     |                           ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `similarity`
[INFO] [stdout]     --> src/sync/diff.rs:1032:38
[INFO] [stdout]      |
[INFO] [stdout] 1032 |         for (delete_idx, upload_idx, similarity) in potential_moves {
[INFO] [stdout]      |                                      ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_similarity`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `d` is never read
[INFO] [stdout]    --> src/sync/engine.rs:809:37
[INFO] [stdout]     |
[INFO] [stdout] 809 |                           let mut d = FileDiff::unchanged(
[INFO] [stdout]     |  _____________________________________^
[INFO] [stdout] 810 | |                             path.clone(),
[INFO] [stdout] 811 | |                             crate::sync::diff::FileMetadata::new(std::path::PathBuf::from(&path)),
[INFO] [stdout] 812 | |                             t.clone(),
[INFO] [stdout] 813 | |                         );
[INFO] [stdout]     | |_________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `download_result`
[INFO] [stdout]    --> src/sync/engine.rs:879:13
[INFO] [stdout]     |
[INFO] [stdout] 879 |         let download_result = source.download(&source_full_path, &temp_path).await?;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_download_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `metadata`
[INFO] [stdout]    --> src/sync/engine.rs:882:30
[INFO] [stdout]     |
[INFO] [stdout] 882 |         let (encrypted_data, metadata) = if let Some(enc_config) = &task.encryption {
[INFO] [stdout]     |                              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_metadata`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `upload_result`
[INFO] [stdout]    --> src/sync/engine.rs:891:13
[INFO] [stdout]     |
[INFO] [stdout] 891 |         let upload_result = if let Some(encrypted) = encrypted_data {
[INFO] [stdout]     |             ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_upload_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `source_storage_provider`
[INFO] [stdout]    --> src/sync/engine.rs:910:9
[INFO] [stdout]     |
[INFO] [stdout] 910 |         source_storage_provider: &dyn StorageProvider,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_source_storage_provider`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `target_storage_provider`
[INFO] [stdout]    --> src/sync/engine.rs:911:9
[INFO] [stdout]     |
[INFO] [stdout] 911 |         target_storage_provider: &dyn StorageProvider,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_target_storage_provider`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `file_diff`
[INFO] [stdout]    --> src/sync/engine.rs:912:9
[INFO] [stdout]     |
[INFO] [stdout] 912 |         file_diff: &FileDiff,
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_file_diff`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `task`
[INFO] [stdout]    --> src/sync/engine.rs:913:9
[INFO] [stdout]     |
[INFO] [stdout] 913 |         task: &SyncTask,
[INFO] [stdout]     |         ^^^^ help: if this is intentional, prefix it with an underscore: `_task`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `data`
[INFO] [stdout]    --> src/sync/engine.rs:914:9
[INFO] [stdout]     |
[INFO] [stdout] 914 |         data: &String,
[INFO] [stdout]     |         ^^^^ help: if this is intentional, prefix it with an underscore: `_data`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `reporter`
[INFO] [stdout]    --> src/sync/engine.rs:915:9
[INFO] [stdout]     |
[INFO] [stdout] 915 |         reporter: &mut SyncReport,
[INFO] [stdout]     |         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_reporter`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `TempStorageHealth` is more private than the item `StorageHealth::temp_storage`
[INFO] [stdout]    --> src/core/health.rs:133:5
[INFO] [stdout]     |
[INFO] [stdout] 133 |     pub temp_storage: TempStorageHealth,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ field `StorageHealth::temp_storage` is reachable at visibility `pub`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `TempStorageHealth` is only usable at visibility `pub(self)`
[INFO] [stdout]    --> src/core/health.rs:18:1
[INFO] [stdout]     |
[INFO] [stdout]  18 | struct TempStorageHealth {}
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `ErrorResult` is more private than the item `sync::VerificationResult::errors`
[INFO] [stdout]   --> src/sync/mod.rs:9:5
[INFO] [stdout]    |
[INFO] [stdout]  9 |     pub errors: Vec<ErrorResult>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ field `sync::VerificationResult::errors` is reachable at visibility `pub`
[INFO] [stdout]    |
[INFO] [stdout] note: but type `ErrorResult` is only usable at visibility `pub(self)`
[INFO] [stdout]   --> src/sync/mod.rs:12:1
[INFO] [stdout]    |
[INFO] [stdout] 12 | struct ErrorResult {}
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `backup_config`, `restore_config`, and `list_backups` are never used
[INFO] [stdout]   --> src/config/migrator.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout]  8 | impl ConfigMigrator {
[INFO] [stdout]    | ------------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub fn backup_config(config_path: &std::path::Path) -> Result<()> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub fn restore_config(config_path: &std::path::Path, backup_name: &str) -> Result<()> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub fn list_backups(config_path: &std::path::Path) -> Result<Vec<String>> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `key_path` is never read
[INFO] [stdout]   --> src/config/security.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct SecurityManager {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] 14 |     key_path: PathBuf,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConfigUtils` is never constructed
[INFO] [stdout]  --> src/config/utils.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct ConfigUtils;
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]    --> src/config/utils.rs:8:12
[INFO] [stdout]     |
[INFO] [stdout]   6 | impl ConfigUtils {
[INFO] [stdout]     | ---------------- associated functions in this implementation
[INFO] [stdout]   7 |     /// 生成默认配置文件
[INFO] [stdout]   8 |     pub fn generate_default_config() -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  14 |     pub fn validate_config_syntax(content: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  21 |     pub fn find_config_files() -> Vec<std::path::PathBuf> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  51 |     pub fn merge_configs(configs: &[super::ConfigFile]) -> super::ConfigFile {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  82 |     pub fn load_from_env() -> super::ConfigFile {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub fn generate_template(template_type: ConfigTemplate) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     pub fn diff_configs(config1: &super::ConfigFile, config2: &super::ConfigFile) -> ConfigDiff {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ConfigTemplate` is never used
[INFO] [stdout]    --> src/config/utils.rs:236:10
[INFO] [stdout]     |
[INFO] [stdout] 236 | pub enum ConfigTemplate {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConfigDiff` is never constructed
[INFO] [stdout]    --> src/config/utils.rs:244:12
[INFO] [stdout]     |
[INFO] [stdout] 244 | pub struct ConfigDiff {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `has_changes` are never used
[INFO] [stdout]    --> src/config/utils.rs:253:12
[INFO] [stdout]     |
[INFO] [stdout] 252 | impl ConfigDiff {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 253 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 263 |     pub fn has_changes(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConfigValidatorImpl` is never constructed
[INFO] [stdout]  --> src/config/validator.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct ConfigValidatorImpl;
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_valid_cron` is never used
[INFO] [stdout]    --> src/config/validator.rs:124:4
[INFO] [stdout]     |
[INFO] [stdout] 124 | fn is_valid_cron(expr: &str) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DatabaseAuditLogger` is never constructed
[INFO] [stdout]   --> src/core/audit.rs:52:12
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct DatabaseAuditLogger {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/core/audit.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 56 | impl DatabaseAuditLogger {
[INFO] [stdout]    | ------------------------ associated function in this implementation
[INFO] [stdout] 57 |     pub fn new(db_path: &std::path::Path) -> Result<Self> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HealthCheckerImpl` is never constructed
[INFO] [stdout]  --> src/core/health.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct HealthCheckerImpl {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/core/health.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | impl HealthCheckerImpl {
[INFO] [stdout]    | ---------------------- associated function in this implementation
[INFO] [stdout] 12 |     pub fn new(providers: HashMap<String, Box<dyn crate::providers::StorageProvider>>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `semaphore` is never read
[INFO] [stdout]   --> src/core/rate_limit.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct TokenBucketRateLimiter {
[INFO] [stdout]    |            ---------------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 15 |     semaphore: Arc<Semaphore>,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ResourceManagerImpl` is never constructed
[INFO] [stdout]    --> src/core/resources.rs:298:12
[INFO] [stdout]     |
[INFO] [stdout] 298 | pub struct ResourceManagerImpl {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/core/resources.rs:309:12
[INFO] [stdout]     |
[INFO] [stdout] 308 | impl ResourceManagerImpl {
[INFO] [stdout]     | ------------------------ associated items in this implementation
[INFO] [stdout] 309 |     pub fn new(limits: ResourceLimits) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 323 |     pub fn allocate_memory(&self, size: usize) -> Result<MemoryHandle> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 354 |     pub fn allocate_disk(&self, size: u64) -> Result<DiskHandle> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 400 |     pub fn deallocate_memory(&self, handle_id: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 416 |     pub fn deallocate_disk(&self, handle_id: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 436 |     pub fn current_usage(&self) -> ResourceUsage {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 464 |     pub fn set_limits(&self, limits: ResourceLimits) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 469 |     pub fn start_task(&self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 485 |     pub fn end_task(&self) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 489 |     pub fn cleanup_old_resources(&self, max_age: Duration) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ExponentialBackoffRetry` is never constructed
[INFO] [stdout]  --> src/core/retry.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct ExponentialBackoffRetry {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `new` and `builder` are never used
[INFO] [stdout]   --> src/core/retry.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl ExponentialBackoffRetry {
[INFO] [stdout]    | ---------------------------- associated functions in this implementation
[INFO] [stdout] 15 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn builder() -> ExponentialBackoffRetryBuilder {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ExponentialBackoffRetryBuilder` is never constructed
[INFO] [stdout]   --> src/core/retry.rs:63:12
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct ExponentialBackoffRetryBuilder {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/core/retry.rs:72:12
[INFO] [stdout]     |
[INFO] [stdout]  71 | impl ExponentialBackoffRetryBuilder {
[INFO] [stdout]     | ----------------------------------- associated items in this implementation
[INFO] [stdout]  72 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  82 |     pub fn max_attempts(mut self, attempts: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     pub fn initial_delay(mut self, delay: Duration) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  92 |     pub fn max_delay(mut self, delay: Duration) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn backoff_factor(mut self, factor: f64) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub fn retryable_error(mut self, error_code: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub fn build(self) -> ExponentialBackoffRetry {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `JitterRetry` is never constructed
[INFO] [stdout]    --> src/core/retry.rs:119:12
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub struct JitterRetry {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `add_jitter` are never used
[INFO] [stdout]    --> src/core/retry.rs:125:12
[INFO] [stdout]     |
[INFO] [stdout] 124 | impl JitterRetry {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] 125 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     fn add_jitter(&self, delay: Duration) -> Duration {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SchedulerManager` is never constructed
[INFO] [stdout]    --> src/core/scheduler.rs:262:12
[INFO] [stdout]     |
[INFO] [stdout] 262 | pub struct SchedulerManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/core/scheduler.rs:270:18
[INFO] [stdout]     |
[INFO] [stdout] 269 | impl SchedulerManager {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] 270 |     pub async fn new(sync_engine: SyncEngine) -> Result<Self> {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 285 |     pub async fn add_task(&self, mut scheduled_task: ScheduledTask) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 309 |     async fn schedule_job(&self, scheduled_task: &ScheduledTask) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 367 |     async fn execute_task(
[INFO] [stdout]     |              ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 433 |     pub async fn start(&self) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 440 |     pub async fn stop(&mut self) -> Result<()> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 447 |     pub async fn get_tasks(&self) -> Vec<ScheduledTask> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 452 |     pub async fn get_task(&self, task_id: &str) -> Option<ScheduledTask> {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 458 |     pub async fn delete_task(&self, task_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 469 |     pub async fn trigger_task(&self, task_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 506 |     pub async fn pause_task(&self, task_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 517 |     pub async fn resume_task(&self, task_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 528 |     pub async fn reschedule_all(&mut self) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 554 |     pub async fn get_stats(&self) -> SchedulerStats {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 584 |     pub async fn cleanup_completed_tasks(&self, max_age_days: u32) -> Result<usize> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 604 |     pub async fn export_tasks(&self, format: ExportFormat) -> Result<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 618 |     pub async fn import_tasks(&self, data: &str, format: ExportFormat) -> Result<usize> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 640 |     fn tasks_to_csv(tasks: &[ScheduledTask]) -> Result<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SchedulerStats` is never constructed
[INFO] [stdout]    --> src/core/scheduler.rs:671:12
[INFO] [stdout]     |
[INFO] [stdout] 671 | pub struct SchedulerStats {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `success_rate`, and `health_score` are never used
[INFO] [stdout]    --> src/core/scheduler.rs:705:12
[INFO] [stdout]     |
[INFO] [stdout] 704 | impl SchedulerStats {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 705 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 725 |     pub fn success_rate(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 733 |     pub fn health_score(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ExportFormat` is never used
[INFO] [stdout]    --> src/core/scheduler.rs:751:10
[INFO] [stdout]     |
[INFO] [stdout] 751 | pub enum ExportFormat {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CsvTask` is never constructed
[INFO] [stdout]    --> src/core/scheduler.rs:759:8
[INFO] [stdout]     |
[INFO] [stdout] 759 | struct CsvTask<'a> {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TaskNotifier` is never constructed
[INFO] [stdout]    --> src/core/scheduler.rs:773:12
[INFO] [stdout]     |
[INFO] [stdout] 773 | pub struct TaskNotifier {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/core/scheduler.rs:779:12
[INFO] [stdout]     |
[INFO] [stdout] 778 | impl TaskNotifier {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout] 779 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 787 |     pub async fn notify_task_start(&self, task: &ScheduledTask) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 799 |     pub async fn notify_task_complete(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 819 |     pub async fn notify_task_failed(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 838 |     async fn send_notification(&self, message: &str) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 852 |     async fn send_email(&self, config: &EmailConfig, message: &str) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 858 |     async fn send_webhook(&self, url: &str, message: &str) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EmailConfig` is never constructed
[INFO] [stdout]    --> src/core/scheduler.rs:873:12
[INFO] [stdout]     |
[INFO] [stdout] 873 | pub struct EmailConfig {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cmd_schedule_task` is never used
[INFO] [stdout]    --> src/core/scheduler.rs:883:14
[INFO] [stdout]     |
[INFO] [stdout] 883 | pub async fn cmd_schedule_task(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cmd_list_scheduled_tasks` is never used
[INFO] [stdout]    --> src/core/scheduler.rs:922:14
[INFO] [stdout]     |
[INFO] [stdout] 922 | pub async fn cmd_list_scheduled_tasks(scheduler: &SchedulerManager) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `hooks_by_priority` is never read
[INFO] [stdout]  --> src/plugins/manager.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct HookManager {
[INFO] [stdout]   |            ----------- field in this struct
[INFO] [stdout] 8 |     handlers: HashMap<String, Vec<Box<dyn HookHandler>>>,
[INFO] [stdout] 9 |     hooks_by_priority: HashMap<PluginHook, Vec<Box<dyn HookHandler>>>,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `all_hook_types` is never used
[INFO] [stdout]   --> src/plugins/manager.rs:48:8
[INFO] [stdout]    |
[INFO] [stdout] 12 | impl HookManager {
[INFO] [stdout]    | ---------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 48 |     fn all_hook_types() -> Vec<&'static str> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `client`, `token`, `refresh_token`, and `rate_limiter` are never read
[INFO] [stdout]   --> src/providers/aliyun.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct AliYunDriveProvider {
[INFO] [stdout]    |            ------------------- fields in this struct
[INFO] [stdout] 14 |     client: reqwest::Client,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 15 |     token: String,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 16 |     refresh_token: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 17 |     rate_limiter: Arc<dyn RateLimiter>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `refresh_token_if_needed` is never used
[INFO] [stdout]   --> src/providers/aliyun.rs:43:14
[INFO] [stdout]    |
[INFO] [stdout] 20 | impl AliYunDriveProvider {
[INFO] [stdout]    | ------------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 43 |     async fn refresh_token_if_needed(&mut self) -> Result<(), ProviderError> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `diff_cache` is never read
[INFO] [stdout]   --> src/sync/engine.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct SyncEngine {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 19 |     diff_cache: DashMap<String, FileDiff>,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> tests/report_tests.rs:14:13
[INFO] [stdout]    |
[INFO] [stdout] 14 |         let mut report = SyncReport {
[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 import: `std::path::PathBuf`
[INFO] [stdout]  --> tests/e2e_config_test.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::path::PathBuf;
[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::time::Duration`
[INFO] [stdout]  --> tests/consistency_tests.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::time::Duration;
[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: `generate_deep_structure`
[INFO] [stdout]   --> tests/consistency_tests.rs:10:14
[INFO] [stdout]    |
[INFO] [stdout] 10 | use common::{generate_deep_structure, start_mock_server_with_seed};
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `uuid::Uuid`
[INFO] [stdout]  --> src/config/migrator.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use uuid::Uuid;
[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: `sleep`
[INFO] [stdout]   --> src/core/scheduler.rs:13:29
[INFO] [stdout]    |
[INFO] [stdout] 13 | use tokio::time::{Duration, sleep};
[INFO] [stdout]    |                             ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rand::RngCore`
[INFO] [stdout]  --> src/encryption/types.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use rand::RngCore;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rand::rngs::OsRng`
[INFO] [stdout]  --> src/encryption/types.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use rand::rngs::OsRng;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Nonce`
[INFO] [stdout]  --> src/encryption/mod.rs:6:27
[INFO] [stdout]   |
[INFO] [stdout] 6 | use aes_gcm::aead::{Aead, Nonce};
[INFO] [stdout]   |                           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::config::SyncTask`
[INFO] [stdout]  --> src/report/mod.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::config::SyncTask;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::SyncError`
[INFO] [stdout]  --> src/report/mod.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::error::SyncError;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ChecksumType`
[INFO] [stdout]  --> src/sync/engine.rs:7:25
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::sync::diff::{ChecksumType, DiffAction, DiffResult, FileDiff};
[INFO] [stdout]   |                         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `instrument`
[INFO] [stdout]   --> src/sync/engine.rs:14:35
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tracing::{debug, error, info, instrument, warn};
[INFO] [stdout]    |                                   ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::net::SocketAddr`
[INFO] [stdout]  --> tests/webdav_sync_basic.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::net::SocketAddr;
[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]  --> tests/webdav_sync_basic.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bytes::Bytes`
[INFO] [stdout]  --> tests/webdav_sync_basic.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use bytes::Bytes;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::RwLock`
[INFO] [stdout]  --> tests/webdav_sync_basic.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::sync::RwLock;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]  --> tests/webdav_sync_basic.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tracing::info;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warp::Filter`
[INFO] [stdout]  --> tests/webdav_sync_basic.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use warp::Filter;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warp::http::Method`
[INFO] [stdout]   --> tests/webdav_sync_basic.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use warp::http::Method;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `FileStore`
[INFO] [stdout]   --> tests/webdav_sync_basic.rs:20:14
[INFO] [stdout]    |
[INFO] [stdout] 20 | use common::{FileStore, InMemoryFile, start_mock_server_with_seed};
[INFO] [stdout]    |              ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated function `rand::thread_rng`: Renamed to `rng`
[INFO] [stdout]    --> src/core/retry.rs:134:29
[INFO] [stdout]     |
[INFO] [stdout] 134 |         let mut rng = rand::thread_rng();
[INFO] [stdout]     |                             ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_test_files` is never used
[INFO] [stdout]    --> tests/common/mod.rs:137:14
[INFO] [stdout]     |
[INFO] [stdout] 137 | pub async fn generate_test_files(dir: &Path, count: usize, size_bytes: usize) -> Vec<String> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_deep_structure` is never used
[INFO] [stdout]    --> tests/common/mod.rs:154:14
[INFO] [stdout]     |
[INFO] [stdout] 154 | pub async fn generate_deep_structure(root: &Path, depth: usize, files_per_level: usize) {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FaultConfig` is never constructed
[INFO] [stdout]   --> tests/common/mod.rs:30:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub struct FaultConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FaultInjectionProvider` is never constructed
[INFO] [stdout]   --> tests/common/mod.rs:48:12
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub struct FaultInjectionProvider {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `maybe_inject_fault` are never used
[INFO] [stdout]   --> tests/common/mod.rs:54:12
[INFO] [stdout]    |
[INFO] [stdout] 53 | impl FaultInjectionProvider {
[INFO] [stdout]    | --------------------------- associated items in this implementation
[INFO] [stdout] 54 |     pub fn new(inner: Box<dyn StorageProvider>, config: FaultConfig) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     async fn maybe_inject_fault(&self) -> Result<(), SyncError> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FaultConfig` is never constructed
[INFO] [stdout]   --> tests/common/mod.rs:30:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub struct FaultConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FaultInjectionProvider` is never constructed
[INFO] [stdout]   --> tests/common/mod.rs:48:12
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub struct FaultInjectionProvider {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `maybe_inject_fault` are never used
[INFO] [stdout]   --> tests/common/mod.rs:54:12
[INFO] [stdout]    |
[INFO] [stdout] 53 | impl FaultInjectionProvider {
[INFO] [stdout]    | --------------------------- associated items in this implementation
[INFO] [stdout] 54 |     pub fn new(inner: Box<dyn StorageProvider>, config: FaultConfig) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     async fn maybe_inject_fault(&self) -> Result<(), SyncError> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_deep_structure` is never used
[INFO] [stdout]    --> tests/common/mod.rs:154:14
[INFO] [stdout]     |
[INFO] [stdout] 154 | pub async fn generate_deep_structure(root: &Path, depth: usize, files_per_level: usize) {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FaultConfig` is never constructed
[INFO] [stdout]   --> tests/common/mod.rs:30:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub struct FaultConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FaultInjectionProvider` is never constructed
[INFO] [stdout]   --> tests/common/mod.rs:48:12
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub struct FaultInjectionProvider {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `maybe_inject_fault` are never used
[INFO] [stdout]   --> tests/common/mod.rs:54:12
[INFO] [stdout]    |
[INFO] [stdout] 53 | impl FaultInjectionProvider {
[INFO] [stdout]    | --------------------------- associated items in this implementation
[INFO] [stdout] 54 |     pub fn new(inner: Box<dyn StorageProvider>, config: FaultConfig) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     async fn maybe_inject_fault(&self) -> Result<(), SyncError> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_test_files` is never used
[INFO] [stdout]    --> tests/common/mod.rs:137:14
[INFO] [stdout]     |
[INFO] [stdout] 137 | pub async fn generate_test_files(dir: &Path, count: usize, size_bytes: usize) -> Vec<String> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_deep_structure` is never used
[INFO] [stdout]    --> tests/common/mod.rs:154:14
[INFO] [stdout]     |
[INFO] [stdout] 154 | pub async fn generate_deep_structure(root: &Path, depth: usize, files_per_level: usize) {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `format`
[INFO] [stdout]  --> src/commands/report.rs:4:26
[INFO] [stdout]   |
[INFO] [stdout] 4 | use prettytable::{Table, format, row};
[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: `uuid::Uuid`
[INFO] [stdout]  --> src/config/migrator.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use uuid::Uuid;
[INFO] [stdout]   |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sleep`
[INFO] [stdout]   --> src/core/scheduler.rs:13:29
[INFO] [stdout]    |
[INFO] [stdout] 13 | use tokio::time::{Duration, sleep};
[INFO] [stdout]    |                             ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rand::RngCore`
[INFO] [stdout]  --> src/encryption/types.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use rand::RngCore;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rand::rngs::OsRng`
[INFO] [stdout]  --> src/encryption/types.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use rand::rngs::OsRng;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Nonce`
[INFO] [stdout]  --> src/encryption/mod.rs:6:27
[INFO] [stdout]   |
[INFO] [stdout] 6 | use aes_gcm::aead::{Aead, Nonce};
[INFO] [stdout]   |                           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::config::SyncTask`
[INFO] [stdout]  --> src/report/mod.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::config::SyncTask;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::SyncError`
[INFO] [stdout]  --> src/report/mod.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::error::SyncError;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ChecksumType`
[INFO] [stdout]  --> src/sync/engine.rs:7:25
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::sync::diff::{ChecksumType, DiffAction, DiffResult, FileDiff};
[INFO] [stdout]   |                         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `instrument`
[INFO] [stdout]   --> src/sync/engine.rs:14:35
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tracing::{debug, error, info, instrument, warn};
[INFO] [stdout]    |                                   ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `format`
[INFO] [stdout]  --> src/commands/report.rs:4:26
[INFO] [stdout]   |
[INFO] [stdout] 4 | use prettytable::{Table, format, row};
[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: `uuid::Uuid`
[INFO] [stdout]  --> src/config/migrator.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use uuid::Uuid;
[INFO] [stdout]   |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sleep`
[INFO] [stdout]   --> src/core/scheduler.rs:13:29
[INFO] [stdout]    |
[INFO] [stdout] 13 | use tokio::time::{Duration, sleep};
[INFO] [stdout]    |                             ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rand::RngCore`
[INFO] [stdout]  --> src/encryption/types.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use rand::RngCore;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rand::rngs::OsRng`
[INFO] [stdout]  --> src/encryption/types.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use rand::rngs::OsRng;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Nonce`
[INFO] [stdout]  --> src/encryption/mod.rs:6:27
[INFO] [stdout]   |
[INFO] [stdout] 6 | use aes_gcm::aead::{Aead, Nonce};
[INFO] [stdout]   |                           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::config::SyncTask`
[INFO] [stdout]  --> src/report/mod.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::config::SyncTask;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::SyncError`
[INFO] [stdout]  --> src/report/mod.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::error::SyncError;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ChecksumType`
[INFO] [stdout]  --> src/sync/engine.rs:7:25
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::sync::diff::{ChecksumType, DiffAction, DiffResult, FileDiff};
[INFO] [stdout]   |                         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `instrument`
[INFO] [stdout]   --> src/sync/engine.rs:14:35
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tracing::{debug, error, info, instrument, warn};
[INFO] [stdout]    |                                   ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated function `rand::thread_rng`: Renamed to `rng`
[INFO] [stdout]    --> src/core/retry.rs:134:29
[INFO] [stdout]     |
[INFO] [stdout] 134 |         let mut rng = rand::thread_rng();
[INFO] [stdout]     |                             ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated function `rand::thread_rng`: Renamed to `rng`
[INFO] [stdout]    --> src/core/retry.rs:134:29
[INFO] [stdout]     |
[INFO] [stdout] 134 |         let mut rng = rand::thread_rng();
[INFO] [stdout]     |                             ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `rand::Rng::gen_range`: Renamed to `random_range`
[INFO] [stdout]    --> src/core/retry.rs:135:26
[INFO] [stdout]     |
[INFO] [stdout] 135 |         let jitter = rng.gen_range(-self.jitter_ratio..self.jitter_ratio);
[INFO] [stdout]     |                          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TimeZone`
[INFO] [stdout]  --> src/core/scheduler.rs:6:24
[INFO] [stdout]   |
[INFO] [stdout] 6 | use chrono::{DateTime, TimeZone, Utc};
[INFO] [stdout]   |                        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `rand::Rng::gen_range`: Renamed to `random_range`
[INFO] [stdout]    --> src/core/retry.rs:135:26
[INFO] [stdout]     |
[INFO] [stdout] 135 |         let jitter = rng.gen_range(-self.jitter_ratio..self.jitter_ratio);
[INFO] [stdout]     |                          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `rand::Rng::gen_range`: Renamed to `random_range`
[INFO] [stdout]    --> src/core/retry.rs:135:26
[INFO] [stdout]     |
[INFO] [stdout] 135 |         let jitter = rng.gen_range(-self.jitter_ratio..self.jitter_ratio);
[INFO] [stdout]     |                          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/core/health.rs:87:13
[INFO] [stdout]    |
[INFO] [stdout] 87 |         let mut status = ConnectivityStatus {
[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: `internet_test`
[INFO] [stdout]   --> src/core/health.rs:95:13
[INFO] [stdout]    |
[INFO] [stdout] 95 |         let internet_test = ConnectivityTest {
[INFO] [stdout]    |             ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_internet_test`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `requests_per_second`
[INFO] [stdout]    --> src/core/rate_limit.rs:174:28
[INFO] [stdout]     |
[INFO] [stdout] 174 |     fn set_rate(&mut self, requests_per_second: f64) {
[INFO] [stdout]     |                            ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_requests_per_second`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `limit`
[INFO] [stdout]    --> src/core/resources.rs:202:21
[INFO] [stdout]     |
[INFO] [stdout] 202 |         if let Some(limit) = self.memory_limit {
[INFO] [stdout]     |                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_limit`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `limit`
[INFO] [stdout]    --> src/core/resources.rs:208:21
[INFO] [stdout]     |
[INFO] [stdout] 208 |         if let Some(limit) = self.disk_limit {
[INFO] [stdout]     |                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_limit`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `limit`
[INFO] [stdout]    --> src/core/resources.rs:214:21
[INFO] [stdout]     |
[INFO] [stdout] 214 |         if let Some(limit) = self.file_descriptors_limit {
[INFO] [stdout]     |                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_limit`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `now`
[INFO] [stdout]    --> src/core/resources.rs:490:13
[INFO] [stdout]     |
[INFO] [stdout] 490 |         let now = Instant::now();
[INFO] [stdout]     |             ^^^ help: if this is intentional, prefix it with an underscore: `_now`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/core/scheduler.rs:362:23
[INFO] [stdout]     |
[INFO] [stdout] 362 |             .map_err(|e| SyncError::Unknown("".into()))?;
[INFO] [stdout]     |                       ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sync_engine`
[INFO] [stdout]    --> src/core/scheduler.rs:368:9
[INFO] [stdout]     |
[INFO] [stdout] 368 |         sync_engine: &Arc<SyncEngine>,
[INFO] [stdout]     |         ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sync_engine`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `duration`
[INFO] [stdout]    --> src/core/scheduler.rs:403:13
[INFO] [stdout]     |
[INFO] [stdout] 403 |         let duration = Utc::now() - start_time;
[INFO] [stdout]     |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_duration`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `success`
[INFO] [stdout]    --> src/core/scheduler.rs:404:13
[INFO] [stdout]     |
[INFO] [stdout] 404 |         let success = match result {
[INFO] [stdout]     |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_success`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `config`
[INFO] [stdout]    --> src/core/scheduler.rs:852:32
[INFO] [stdout]     |
[INFO] [stdout] 852 |     async fn send_email(&self, config: &EmailConfig, message: &str) -> Result<()> {
[INFO] [stdout]     |                                ^^^^^^ help: if this is intentional, prefix it with an underscore: `_config`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `message`
[INFO] [stdout]    --> src/core/scheduler.rs:852:54
[INFO] [stdout]     |
[INFO] [stdout] 852 |     async fn send_email(&self, config: &EmailConfig, message: &str) -> Result<()> {
[INFO] [stdout]     |                                                      ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_message`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/encryption/mod.rs:61:23
[INFO] [stdout]    |
[INFO] [stdout] 61 |             .map_err(|e| EncryptionError::InvalidData)?;
[INFO] [stdout]    |                       ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `local_path`
[INFO] [stdout]   --> src/providers/aliyun.rs:62:9
[INFO] [stdout]    |
[INFO] [stdout] 62 |         local_path: &Path,
[INFO] [stdout]    |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_local_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `remote_path`
[INFO] [stdout]   --> src/providers/aliyun.rs:63:9
[INFO] [stdout]    |
[INFO] [stdout] 63 |         remote_path: &str,
[INFO] [stdout]    |         ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_remote_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `remote_path`
[INFO] [stdout]   --> src/providers/aliyun.rs:72:9
[INFO] [stdout]    |
[INFO] [stdout] 72 |         remote_path: &str,
[INFO] [stdout]    |         ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_remote_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `local_path`
[INFO] [stdout]   --> src/providers/aliyun.rs:73:9
[INFO] [stdout]    |
[INFO] [stdout] 73 |         local_path: &Path,
[INFO] [stdout]    |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_local_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `path`
[INFO] [stdout]   --> src/providers/aliyun.rs:79:28
[INFO] [stdout]    |
[INFO] [stdout] 79 |     async fn delete(&self, path: &str) -> Result<(), SyncError> {
[INFO] [stdout]    |                            ^^^^ help: if this is intentional, prefix it with an underscore: `_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `path`
[INFO] [stdout]   --> src/providers/aliyun.rs:82:27
[INFO] [stdout]    |
[INFO] [stdout] 82 |     async fn mkdir(&self, path: &str) -> Result<(), SyncError> {
[INFO] [stdout]    |                           ^^^^ help: if this is intentional, prefix it with an underscore: `_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `path`
[INFO] [stdout]   --> src/providers/aliyun.rs:94:28
[INFO] [stdout]    |
[INFO] [stdout] 94 |     async fn exists(&self, path: &str) -> Result<bool, SyncError> {
[INFO] [stdout]    |                            ^^^^ help: if this is intentional, prefix it with an underscore: `_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/providers/webdav.rs:123:13
[INFO] [stdout]     |
[INFO] [stdout] 123 |         let mut in_collection = false;
[INFO] [stdout]     |             ----^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `in_collection`
[INFO] [stdout]    --> src/providers/webdav.rs:123:13
[INFO] [stdout]     |
[INFO] [stdout] 123 |         let mut in_collection = false;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_in_collection`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TimeZone`
[INFO] [stdout]  --> src/core/scheduler.rs:6:24
[INFO] [stdout]   |
[INFO] [stdout] 6 | use chrono::{DateTime, TimeZone, Utc};
[INFO] [stdout]   |                        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `d` is never read
[INFO] [stdout]    --> src/sync/engine.rs:809:37
[INFO] [stdout]     |
[INFO] [stdout] 809 |                           let mut d = FileDiff::unchanged(
[INFO] [stdout]     |  _____________________________________^
[INFO] [stdout] 810 | |                             path.clone(),
[INFO] [stdout] 811 | |                             crate::sync::diff::FileMetadata::new(std::path::PathBuf::from(&path)),
[INFO] [stdout] 812 | |                             t.clone(),
[INFO] [stdout] 813 | |                         );
[INFO] [stdout]     | |_________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/commands/key.rs:56:9
[INFO] [stdout]    |
[INFO] [stdout] 56 |     let mut encryption_key = [0u8; 32];
[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 import: `TimeZone`
[INFO] [stdout]  --> src/core/scheduler.rs:6:24
[INFO] [stdout]   |
[INFO] [stdout] 6 | use chrono::{DateTime, TimeZone, Utc};
[INFO] [stdout]   |                        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `download_result`
[INFO] [stdout]    --> src/sync/engine.rs:879:13
[INFO] [stdout]     |
[INFO] [stdout] 879 |         let download_result = source.download(&source_full_path, &temp_path).await?;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_download_result`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `metadata`
[INFO] [stdout]    --> src/sync/engine.rs:882:30
[INFO] [stdout]     |
[INFO] [stdout] 882 |         let (encrypted_data, metadata) = if let Some(enc_config) = &task.encryption {
[INFO] [stdout]     |                              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_metadata`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `upload_result`
[INFO] [stdout]    --> src/sync/engine.rs:891:13
[INFO] [stdout]     |
[INFO] [stdout] 891 |         let upload_result = if let Some(encrypted) = encrypted_data {
[INFO] [stdout]     |             ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_upload_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `source_storage_provider`
[INFO] [stdout]    --> src/sync/engine.rs:910:9
[INFO] [stdout]     |
[INFO] [stdout] 910 |         source_storage_provider: &dyn StorageProvider,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_source_storage_provider`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `target_storage_provider`
[INFO] [stdout]    --> src/sync/engine.rs:911:9
[INFO] [stdout]     |
[INFO] [stdout] 911 |         target_storage_provider: &dyn StorageProvider,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_target_storage_provider`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `file_diff`
[INFO] [stdout]    --> src/sync/engine.rs:912:9
[INFO] [stdout]     |
[INFO] [stdout] 912 |         file_diff: &FileDiff,
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_file_diff`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `task`
[INFO] [stdout]    --> src/sync/engine.rs:913:9
[INFO] [stdout]     |
[INFO] [stdout] 913 |         task: &SyncTask,
[INFO] [stdout]     |         ^^^^ help: if this is intentional, prefix it with an underscore: `_task`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `data`
[INFO] [stdout]    --> src/sync/engine.rs:914:9
[INFO] [stdout]     |
[INFO] [stdout] 914 |         data: &String,
[INFO] [stdout]     |         ^^^^ help: if this is intentional, prefix it with an underscore: `_data`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `reporter`
[INFO] [stdout]    --> src/sync/engine.rs:915:9
[INFO] [stdout]     |
[INFO] [stdout] 915 |         reporter: &mut SyncReport,
[INFO] [stdout]     |         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_reporter`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/encryption/mod.rs:61:23
[INFO] [stdout]    |
[INFO] [stdout] 61 |             .map_err(|e| EncryptionError::InvalidData)?;
[INFO] [stdout]    |                       ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `verification_rate`
[INFO] [stdout]     --> src/report/mod.rs:1115:13
[INFO] [stdout]      |
[INFO] [stdout] 1115 |         let verification_rate = self.verification_success_rate();
[INFO] [stdout]      |             ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_verification_rate`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `algorithm`
[INFO] [stdout]    --> src/sync/diff.rs:484:38
[INFO] [stdout]     |
[INFO] [stdout] 484 |     pub fn calculate_hash(&mut self, algorithm: ChecksumType) -> Result<()> {
[INFO] [stdout]     |                                      ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_algorithm`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `d` is never read
[INFO] [stdout]    --> src/sync/engine.rs:809:37
[INFO] [stdout]     |
[INFO] [stdout] 809 |                           let mut d = FileDiff::unchanged(
[INFO] [stdout]     |  _____________________________________^
[INFO] [stdout] 810 | |                             path.clone(),
[INFO] [stdout] 811 | |                             crate::sync::diff::FileMetadata::new(std::path::PathBuf::from(&path)),
[INFO] [stdout] 812 | |                             t.clone(),
[INFO] [stdout] 813 | |                         );
[INFO] [stdout]     | |_________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/commands/key.rs:56:9
[INFO] [stdout]    |
[INFO] [stdout] 56 |     let mut encryption_key = [0u8; 32];
[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: `download_result`
[INFO] [stdout]    --> src/sync/engine.rs:879:13
[INFO] [stdout]     |
[INFO] [stdout] 879 |         let download_result = source.download(&source_full_path, &temp_path).await?;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_download_result`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `metadata`
[INFO] [stdout]    --> src/sync/engine.rs:882:30
[INFO] [stdout]     |
[INFO] [stdout] 882 |         let (encrypted_data, metadata) = if let Some(enc_config) = &task.encryption {
[INFO] [stdout]     |                              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_metadata`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `upload_result`
[INFO] [stdout]    --> src/sync/engine.rs:891:13
[INFO] [stdout]     |
[INFO] [stdout] 891 |         let upload_result = if let Some(encrypted) = encrypted_data {
[INFO] [stdout]     |             ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_upload_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `source_storage_provider`
[INFO] [stdout]    --> src/sync/engine.rs:910:9
[INFO] [stdout]     |
[INFO] [stdout] 910 |         source_storage_provider: &dyn StorageProvider,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_source_storage_provider`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `target_storage_provider`
[INFO] [stdout]    --> src/sync/engine.rs:911:9
[INFO] [stdout]     |
[INFO] [stdout] 911 |         target_storage_provider: &dyn StorageProvider,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_target_storage_provider`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `file_diff`
[INFO] [stdout]    --> src/sync/engine.rs:912:9
[INFO] [stdout]     |
[INFO] [stdout] 912 |         file_diff: &FileDiff,
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_file_diff`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `task`
[INFO] [stdout]    --> src/sync/engine.rs:913:9
[INFO] [stdout]     |
[INFO] [stdout] 913 |         task: &SyncTask,
[INFO] [stdout]     |         ^^^^ help: if this is intentional, prefix it with an underscore: `_task`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `data`
[INFO] [stdout]    --> src/sync/engine.rs:914:9
[INFO] [stdout]     |
[INFO] [stdout] 914 |         data: &String,
[INFO] [stdout]     |         ^^^^ help: if this is intentional, prefix it with an underscore: `_data`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `reporter`
[INFO] [stdout]    --> src/sync/engine.rs:915:9
[INFO] [stdout]     |
[INFO] [stdout] 915 |         reporter: &mut SyncReport,
[INFO] [stdout]     |         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_reporter`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/encryption/mod.rs:61:23
[INFO] [stdout]    |
[INFO] [stdout] 61 |             .map_err(|e| EncryptionError::InvalidData)?;
[INFO] [stdout]    |                       ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/sync/diff.rs:771:23
[INFO] [stdout]     |
[INFO] [stdout] 771 |             .map_err(|e| SyncError::Unsupported("转换异常".into()))?;
[INFO] [stdout]     |                       ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/sync/diff.rs:776:27
[INFO] [stdout]     |
[INFO] [stdout] 776 |                 .map_err(|e| SyncError::Unsupported("转换异常".into()))?,
[INFO] [stdout]     |                           ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `similarity`
[INFO] [stdout]     --> src/sync/diff.rs:1032:38
[INFO] [stdout]      |
[INFO] [stdout] 1032 |         for (delete_idx, upload_idx, similarity) in potential_moves {
[INFO] [stdout]      |                                      ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_similarity`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `d` is never read
[INFO] [stdout]    --> src/sync/engine.rs:809:37
[INFO] [stdout]     |
[INFO] [stdout] 809 |                           let mut d = FileDiff::unchanged(
[INFO] [stdout]     |  _____________________________________^
[INFO] [stdout] 810 | |                             path.clone(),
[INFO] [stdout] 811 | |                             crate::sync::diff::FileMetadata::new(std::path::PathBuf::from(&path)),
[INFO] [stdout] 812 | |                             t.clone(),
[INFO] [stdout] 813 | |                         );
[INFO] [stdout]     | |_________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `download_result`
[INFO] [stdout]    --> src/sync/engine.rs:879:13
[INFO] [stdout]     |
[INFO] [stdout] 879 |         let download_result = source.download(&source_full_path, &temp_path).await?;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_download_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `metadata`
[INFO] [stdout]    --> src/sync/engine.rs:882:30
[INFO] [stdout]     |
[INFO] [stdout] 882 |         let (encrypted_data, metadata) = if let Some(enc_config) = &task.encryption {
[INFO] [stdout]     |                              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_metadata`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `upload_result`
[INFO] [stdout]    --> src/sync/engine.rs:891:13
[INFO] [stdout]     |
[INFO] [stdout] 891 |         let upload_result = if let Some(encrypted) = encrypted_data {
[INFO] [stdout]     |             ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_upload_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `source_storage_provider`
[INFO] [stdout]    --> src/sync/engine.rs:910:9
[INFO] [stdout]     |
[INFO] [stdout] 910 |         source_storage_provider: &dyn StorageProvider,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_source_storage_provider`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `target_storage_provider`
[INFO] [stdout]    --> src/sync/engine.rs:911:9
[INFO] [stdout]     |
[INFO] [stdout] 911 |         target_storage_provider: &dyn StorageProvider,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_target_storage_provider`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `file_diff`
[INFO] [stdout]    --> src/sync/engine.rs:912:9
[INFO] [stdout]     |
[INFO] [stdout] 912 |         file_diff: &FileDiff,
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_file_diff`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `task`
[INFO] [stdout]    --> src/sync/engine.rs:913:9
[INFO] [stdout]     |
[INFO] [stdout] 913 |         task: &SyncTask,
[INFO] [stdout]     |         ^^^^ help: if this is intentional, prefix it with an underscore: `_task`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `data`
[INFO] [stdout]    --> src/sync/engine.rs:914:9
[INFO] [stdout]     |
[INFO] [stdout] 914 |         data: &String,
[INFO] [stdout]     |         ^^^^ help: if this is intentional, prefix it with an underscore: `_data`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `reporter`
[INFO] [stdout]    --> src/sync/engine.rs:915:9
[INFO] [stdout]     |
[INFO] [stdout] 915 |         reporter: &mut SyncReport,
[INFO] [stdout]     |         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_reporter`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `TempStorageHealth` is more private than the item `StorageHealth::temp_storage`
[INFO] [stdout]    --> src/core/health.rs:133:5
[INFO] [stdout]     |
[INFO] [stdout] 133 |     pub temp_storage: TempStorageHealth,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ field `StorageHealth::temp_storage` is reachable at visibility `pub`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `TempStorageHealth` is only usable at visibility `pub(self)`
[INFO] [stdout]    --> src/core/health.rs:18:1
[INFO] [stdout]     |
[INFO] [stdout]  18 | struct TempStorageHealth {}
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `ErrorResult` is more private than the item `sync::VerificationResult::errors`
[INFO] [stdout]   --> src/sync/mod.rs:9:5
[INFO] [stdout]    |
[INFO] [stdout]  9 |     pub errors: Vec<ErrorResult>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ field `sync::VerificationResult::errors` is reachable at visibility `pub`
[INFO] [stdout]    |
[INFO] [stdout] note: but type `ErrorResult` is only usable at visibility `pub(self)`
[INFO] [stdout]   --> src/sync/mod.rs:12:1
[INFO] [stdout]    |
[INFO] [stdout] 12 | struct ErrorResult {}
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `backup_config`, `restore_config`, and `list_backups` are never used
[INFO] [stdout]   --> src/config/migrator.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout]  8 | impl ConfigMigrator {
[INFO] [stdout]    | ------------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub fn backup_config(config_path: &std::path::Path) -> Result<()> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub fn restore_config(config_path: &std::path::Path, backup_name: &str) -> Result<()> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub fn list_backups(config_path: &std::path::Path) -> Result<Vec<String>> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `key_path` is never read
[INFO] [stdout]   --> src/config/security.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct SecurityManager {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] 14 |     key_path: PathBuf,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConfigUtils` is never constructed
[INFO] [stdout]  --> src/config/utils.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct ConfigUtils;
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]    --> src/config/utils.rs:8:12
[INFO] [stdout]     |
[INFO] [stdout]   6 | impl ConfigUtils {
[INFO] [stdout]     | ---------------- associated functions in this implementation
[INFO] [stdout]   7 |     /// 生成默认配置文件
[INFO] [stdout]   8 |     pub fn generate_default_config() -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  14 |     pub fn validate_config_syntax(content: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  21 |     pub fn find_config_files() -> Vec<std::path::PathBuf> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  51 |     pub fn merge_configs(configs: &[super::ConfigFile]) -> super::ConfigFile {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  82 |     pub fn load_from_env() -> super::ConfigFile {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub fn generate_template(template_type: ConfigTemplate) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     pub fn diff_configs(config1: &super::ConfigFile, config2: &super::ConfigFile) -> ConfigDiff {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ConfigTemplate` is never used
[INFO] [stdout]    --> src/config/utils.rs:236:10
[INFO] [stdout]     |
[INFO] [stdout] 236 | pub enum ConfigTemplate {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConfigDiff` is never constructed
[INFO] [stdout]    --> src/config/utils.rs:244:12
[INFO] [stdout]     |
[INFO] [stdout] 244 | pub struct ConfigDiff {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `has_changes` are never used
[INFO] [stdout]    --> src/config/utils.rs:253:12
[INFO] [stdout]     |
[INFO] [stdout] 252 | impl ConfigDiff {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 253 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 263 |     pub fn has_changes(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConfigValidatorImpl` is never constructed
[INFO] [stdout]  --> src/config/validator.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct ConfigValidatorImpl;
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_valid_cron` is never used
[INFO] [stdout]    --> src/config/validator.rs:124:4
[INFO] [stdout]     |
[INFO] [stdout] 124 | fn is_valid_cron(expr: &str) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DatabaseAuditLogger` is never constructed
[INFO] [stdout]   --> src/core/audit.rs:52:12
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct DatabaseAuditLogger {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/core/audit.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 56 | impl DatabaseAuditLogger {
[INFO] [stdout]    | ------------------------ associated function in this implementation
[INFO] [stdout] 57 |     pub fn new(db_path: &std::path::Path) -> Result<Self> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HealthCheckerImpl` is never constructed
[INFO] [stdout]  --> src/core/health.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct HealthCheckerImpl {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/core/health.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | impl HealthCheckerImpl {
[INFO] [stdout]    | ---------------------- associated function in this implementation
[INFO] [stdout] 12 |     pub fn new(providers: HashMap<String, Box<dyn crate::providers::StorageProvider>>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `semaphore` is never read
[INFO] [stdout]   --> src/core/rate_limit.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct TokenBucketRateLimiter {
[INFO] [stdout]    |            ---------------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 15 |     semaphore: Arc<Semaphore>,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ResourceManagerImpl` is never constructed
[INFO] [stdout]    --> src/core/resources.rs:298:12
[INFO] [stdout]     |
[INFO] [stdout] 298 | pub struct ResourceManagerImpl {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/core/resources.rs:309:12
[INFO] [stdout]     |
[INFO] [stdout] 308 | impl ResourceManagerImpl {
[INFO] [stdout]     | ------------------------ associated items in this implementation
[INFO] [stdout] 309 |     pub fn new(limits: ResourceLimits) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 323 |     pub fn allocate_memory(&self, size: usize) -> Result<MemoryHandle> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 354 |     pub fn allocate_disk(&self, size: u64) -> Result<DiskHandle> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 400 |     pub fn deallocate_memory(&self, handle_id: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 416 |     pub fn deallocate_disk(&self, handle_id: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 436 |     pub fn current_usage(&self) -> ResourceUsage {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 464 |     pub fn set_limits(&self, limits: ResourceLimits) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 469 |     pub fn start_task(&self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 485 |     pub fn end_task(&self) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 489 |     pub fn cleanup_old_resources(&self, max_age: Duration) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ExponentialBackoffRetry` is never constructed
[INFO] [stdout]  --> src/core/retry.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct ExponentialBackoffRetry {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `new` and `builder` are never used
[INFO] [stdout]   --> src/core/retry.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl ExponentialBackoffRetry {
[INFO] [stdout]    | ---------------------------- associated functions in this implementation
[INFO] [stdout] 15 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn builder() -> ExponentialBackoffRetryBuilder {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ExponentialBackoffRetryBuilder` is never constructed
[INFO] [stdout]   --> src/core/retry.rs:63:12
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct ExponentialBackoffRetryBuilder {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/core/retry.rs:72:12
[INFO] [stdout]     |
[INFO] [stdout]  71 | impl ExponentialBackoffRetryBuilder {
[INFO] [stdout]     | ----------------------------------- associated items in this implementation
[INFO] [stdout]  72 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  82 |     pub fn max_attempts(mut self, attempts: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     pub fn initial_delay(mut self, delay: Duration) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  92 |     pub fn max_delay(mut self, delay: Duration) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn backoff_factor(mut self, factor: f64) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub fn retryable_error(mut self, error_code: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub fn build(self) -> ExponentialBackoffRetry {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `JitterRetry` is never constructed
[INFO] [stdout]    --> src/core/retry.rs:119:12
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub struct JitterRetry {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `add_jitter` are never used
[INFO] [stdout]    --> src/core/retry.rs:125:12
[INFO] [stdout]     |
[INFO] [stdout] 124 | impl JitterRetry {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] 125 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     fn add_jitter(&self, delay: Duration) -> Duration {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SchedulerManager` is never constructed
[INFO] [stdout]    --> src/core/scheduler.rs:262:12
[INFO] [stdout]     |
[INFO] [stdout] 262 | pub struct SchedulerManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/core/scheduler.rs:270:18
[INFO] [stdout]     |
[INFO] [stdout] 269 | impl SchedulerManager {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] 270 |     pub async fn new(sync_engine: SyncEngine) -> Result<Self> {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 285 |     pub async fn add_task(&self, mut scheduled_task: ScheduledTask) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 309 |     async fn schedule_job(&self, scheduled_task: &ScheduledTask) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 367 |     async fn execute_task(
[INFO] [stdout]     |              ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 433 |     pub async fn start(&self) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 440 |     pub async fn stop(&mut self) -> Result<()> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 447 |     pub async fn get_tasks(&self) -> Vec<ScheduledTask> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 452 |     pub async fn get_task(&self, task_id: &str) -> Option<ScheduledTask> {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 458 |     pub async fn delete_task(&self, task_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 469 |     pub async fn trigger_task(&self, task_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 506 |     pub async fn pause_task(&self, task_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 517 |     pub async fn resume_task(&self, task_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 528 |     pub async fn reschedule_all(&mut self) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 554 |     pub async fn get_stats(&self) -> SchedulerStats {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 584 |     pub async fn cleanup_completed_tasks(&self, max_age_days: u32) -> Result<usize> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 604 |     pub async fn export_tasks(&self, format: ExportFormat) -> Result<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 618 |     pub async fn import_tasks(&self, data: &str, format: ExportFormat) -> Result<usize> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 640 |     fn tasks_to_csv(tasks: &[ScheduledTask]) -> Result<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SchedulerStats` is never constructed
[INFO] [stdout]    --> src/core/scheduler.rs:671:12
[INFO] [stdout]     |
[INFO] [stdout] 671 | pub struct SchedulerStats {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `success_rate`, and `health_score` are never used
[INFO] [stdout]    --> src/core/scheduler.rs:705:12
[INFO] [stdout]     |
[INFO] [stdout] 704 | impl SchedulerStats {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 705 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 725 |     pub fn success_rate(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 733 |     pub fn health_score(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ExportFormat` is never used
[INFO] [stdout]    --> src/core/scheduler.rs:751:10
[INFO] [stdout]     |
[INFO] [stdout] 751 | pub enum ExportFormat {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CsvTask` is never constructed
[INFO] [stdout]    --> src/core/scheduler.rs:759:8
[INFO] [stdout]     |
[INFO] [stdout] 759 | struct CsvTask<'a> {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TaskNotifier` is never constructed
[INFO] [stdout]    --> src/core/scheduler.rs:773:12
[INFO] [stdout]     |
[INFO] [stdout] 773 | pub struct TaskNotifier {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/core/scheduler.rs:779:12
[INFO] [stdout]     |
[INFO] [stdout] 778 | impl TaskNotifier {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout] 779 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 787 |     pub async fn notify_task_start(&self, task: &ScheduledTask) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 799 |     pub async fn notify_task_complete(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 819 |     pub async fn notify_task_failed(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 838 |     async fn send_notification(&self, message: &str) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 852 |     async fn send_email(&self, config: &EmailConfig, message: &str) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 858 |     async fn send_webhook(&self, url: &str, message: &str) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EmailConfig` is never constructed
[INFO] [stdout]    --> src/core/scheduler.rs:873:12
[INFO] [stdout]     |
[INFO] [stdout] 873 | pub struct EmailConfig {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cmd_schedule_task` is never used
[INFO] [stdout]    --> src/core/scheduler.rs:883:14
[INFO] [stdout]     |
[INFO] [stdout] 883 | pub async fn cmd_schedule_task(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cmd_list_scheduled_tasks` is never used
[INFO] [stdout]    --> src/core/scheduler.rs:922:14
[INFO] [stdout]     |
[INFO] [stdout] 922 | pub async fn cmd_list_scheduled_tasks(scheduler: &SchedulerManager) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `hooks_by_priority` is never read
[INFO] [stdout]  --> src/plugins/manager.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct HookManager {
[INFO] [stdout]   |            ----------- field in this struct
[INFO] [stdout] 8 |     handlers: HashMap<String, Vec<Box<dyn HookHandler>>>,
[INFO] [stdout] 9 |     hooks_by_priority: HashMap<PluginHook, Vec<Box<dyn HookHandler>>>,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `all_hook_types` is never used
[INFO] [stdout]   --> src/plugins/manager.rs:48:8
[INFO] [stdout]    |
[INFO] [stdout] 12 | impl HookManager {
[INFO] [stdout]    | ---------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 48 |     fn all_hook_types() -> Vec<&'static str> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `client`, `token`, `refresh_token`, and `rate_limiter` are never read
[INFO] [stdout]   --> src/providers/aliyun.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct AliYunDriveProvider {
[INFO] [stdout]    |            ------------------- fields in this struct
[INFO] [stdout] 14 |     client: reqwest::Client,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 15 |     token: String,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 16 |     refresh_token: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 17 |     rate_limiter: Arc<dyn RateLimiter>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `refresh_token_if_needed` is never used
[INFO] [stdout]   --> src/providers/aliyun.rs:43:14
[INFO] [stdout]    |
[INFO] [stdout] 20 | impl AliYunDriveProvider {
[INFO] [stdout]    | ------------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 43 |     async fn refresh_token_if_needed(&mut self) -> Result<(), ProviderError> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `diff_cache` is never read
[INFO] [stdout]   --> src/sync/engine.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct SyncEngine {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 19 |     diff_cache: DashMap<String, FileDiff>,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/core/health.rs:87:13
[INFO] [stdout]    |
[INFO] [stdout] 87 |         let mut status = ConnectivityStatus {
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `internet_test`
[INFO] [stdout]   --> src/core/health.rs:95:13
[INFO] [stdout]    |
[INFO] [stdout] 95 |         let internet_test = ConnectivityTest {
[INFO] [stdout]    |             ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_internet_test`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `requests_per_second`
[INFO] [stdout]    --> src/core/rate_limit.rs:174:28
[INFO] [stdout]     |
[INFO] [stdout] 174 |     fn set_rate(&mut self, requests_per_second: f64) {
[INFO] [stdout]     |                            ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_requests_per_second`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `limit`
[INFO] [stdout]    --> src/core/resources.rs:202:21
[INFO] [stdout]     |
[INFO] [stdout] 202 |         if let Some(limit) = self.memory_limit {
[INFO] [stdout]     |                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_limit`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `limit`
[INFO] [stdout]    --> src/core/resources.rs:208:21
[INFO] [stdout]     |
[INFO] [stdout] 208 |         if let Some(limit) = self.disk_limit {
[INFO] [stdout]     |                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_limit`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `limit`
[INFO] [stdout]    --> src/core/resources.rs:214:21
[INFO] [stdout]     |
[INFO] [stdout] 214 |         if let Some(limit) = self.file_descriptors_limit {
[INFO] [stdout]     |                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_limit`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `now`
[INFO] [stdout]    --> src/core/resources.rs:490:13
[INFO] [stdout]     |
[INFO] [stdout] 490 |         let now = Instant::now();
[INFO] [stdout]     |             ^^^ help: if this is intentional, prefix it with an underscore: `_now`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/core/scheduler.rs:362:23
[INFO] [stdout]     |
[INFO] [stdout] 362 |             .map_err(|e| SyncError::Unknown("".into()))?;
[INFO] [stdout]     |                       ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sync_engine`
[INFO] [stdout]    --> src/core/scheduler.rs:368:9
[INFO] [stdout]     |
[INFO] [stdout] 368 |         sync_engine: &Arc<SyncEngine>,
[INFO] [stdout]     |         ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sync_engine`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `duration`
[INFO] [stdout]    --> src/core/scheduler.rs:403:13
[INFO] [stdout]     |
[INFO] [stdout] 403 |         let duration = Utc::now() - start_time;
[INFO] [stdout]     |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_duration`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `success`
[INFO] [stdout]    --> src/core/scheduler.rs:404:13
[INFO] [stdout]     |
[INFO] [stdout] 404 |         let success = match result {
[INFO] [stdout]     |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_success`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `config`
[INFO] [stdout]    --> src/core/scheduler.rs:852:32
[INFO] [stdout]     |
[INFO] [stdout] 852 |     async fn send_email(&self, config: &EmailConfig, message: &str) -> Result<()> {
[INFO] [stdout]     |                                ^^^^^^ help: if this is intentional, prefix it with an underscore: `_config`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `message`
[INFO] [stdout]    --> src/core/scheduler.rs:852:54
[INFO] [stdout]     |
[INFO] [stdout] 852 |     async fn send_email(&self, config: &EmailConfig, message: &str) -> Result<()> {
[INFO] [stdout]     |                                                      ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_message`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/core/health.rs:87:13
[INFO] [stdout]    |
[INFO] [stdout] 87 |         let mut status = ConnectivityStatus {
[INFO] [stdout]    |             ----^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `internet_test`
[INFO] [stdout]   --> src/core/health.rs:95:13
[INFO] [stdout]    |
[INFO] [stdout] 95 |         let internet_test = ConnectivityTest {
[INFO] [stdout]    |             ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_internet_test`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `requests_per_second`
[INFO] [stdout]    --> src/core/rate_limit.rs:174:28
[INFO] [stdout]     |
[INFO] [stdout] 174 |     fn set_rate(&mut self, requests_per_second: f64) {
[INFO] [stdout]     |                            ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_requests_per_second`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `limit`
[INFO] [stdout]    --> src/core/resources.rs:202:21
[INFO] [stdout]     |
[INFO] [stdout] 202 |         if let Some(limit) = self.memory_limit {
[INFO] [stdout]     |                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_limit`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `limit`
[INFO] [stdout]    --> src/core/resources.rs:208:21
[INFO] [stdout]     |
[INFO] [stdout] 208 |         if let Some(limit) = self.disk_limit {
[INFO] [stdout]     |                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_limit`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `limit`
[INFO] [stdout]    --> src/core/resources.rs:214:21
[INFO] [stdout]     |
[INFO] [stdout] 214 |         if let Some(limit) = self.file_descriptors_limit {
[INFO] [stdout]     |                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_limit`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `now`
[INFO] [stdout]    --> src/core/resources.rs:490:13
[INFO] [stdout]     |
[INFO] [stdout] 490 |         let now = Instant::now();
[INFO] [stdout]     |             ^^^ help: if this is intentional, prefix it with an underscore: `_now`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/core/scheduler.rs:362:23
[INFO] [stdout]     |
[INFO] [stdout] 362 |             .map_err(|e| SyncError::Unknown("".into()))?;
[INFO] [stdout]     |                       ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sync_engine`
[INFO] [stdout]    --> src/core/scheduler.rs:368:9
[INFO] [stdout]     |
[INFO] [stdout] 368 |         sync_engine: &Arc<SyncEngine>,
[INFO] [stdout]     |         ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sync_engine`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `duration`
[INFO] [stdout]    --> src/core/scheduler.rs:403:13
[INFO] [stdout]     |
[INFO] [stdout] 403 |         let duration = Utc::now() - start_time;
[INFO] [stdout]     |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_duration`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `success`
[INFO] [stdout]    --> src/core/scheduler.rs:404:13
[INFO] [stdout]     |
[INFO] [stdout] 404 |         let success = match result {
[INFO] [stdout]     |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_success`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `config`
[INFO] [stdout]    --> src/core/scheduler.rs:852:32
[INFO] [stdout]     |
[INFO] [stdout] 852 |     async fn send_email(&self, config: &EmailConfig, message: &str) -> Result<()> {
[INFO] [stdout]     |                                ^^^^^^ help: if this is intentional, prefix it with an underscore: `_config`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `message`
[INFO] [stdout]    --> src/core/scheduler.rs:852:54
[INFO] [stdout]     |
[INFO] [stdout] 852 |     async fn send_email(&self, config: &EmailConfig, message: &str) -> Result<()> {
[INFO] [stdout]     |                                                      ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_message`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `local_path`
[INFO] [stdout]   --> src/providers/aliyun.rs:62:9
[INFO] [stdout]    |
[INFO] [stdout] 62 |         local_path: &Path,
[INFO] [stdout]    |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_local_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `remote_path`
[INFO] [stdout]   --> src/providers/aliyun.rs:63:9
[INFO] [stdout]    |
[INFO] [stdout] 63 |         remote_path: &str,
[INFO] [stdout]    |         ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_remote_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `remote_path`
[INFO] [stdout]   --> src/providers/aliyun.rs:72:9
[INFO] [stdout]    |
[INFO] [stdout] 72 |         remote_path: &str,
[INFO] [stdout]    |         ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_remote_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `local_path`
[INFO] [stdout]   --> src/providers/aliyun.rs:73:9
[INFO] [stdout]    |
[INFO] [stdout] 73 |         local_path: &Path,
[INFO] [stdout]    |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_local_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `path`
[INFO] [stdout]   --> src/providers/aliyun.rs:79:28
[INFO] [stdout]    |
[INFO] [stdout] 79 |     async fn delete(&self, path: &str) -> Result<(), SyncError> {
[INFO] [stdout]    |                            ^^^^ help: if this is intentional, prefix it with an underscore: `_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `path`
[INFO] [stdout]   --> src/providers/aliyun.rs:82:27
[INFO] [stdout]    |
[INFO] [stdout] 82 |     async fn mkdir(&self, path: &str) -> Result<(), SyncError> {
[INFO] [stdout]    |                           ^^^^ help: if this is intentional, prefix it with an underscore: `_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `path`
[INFO] [stdout]   --> src/providers/aliyun.rs:94:28
[INFO] [stdout]    |
[INFO] [stdout] 94 |     async fn exists(&self, path: &str) -> Result<bool, SyncError> {
[INFO] [stdout]    |                            ^^^^ help: if this is intentional, prefix it with an underscore: `_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/providers/webdav.rs:123:13
[INFO] [stdout]     |
[INFO] [stdout] 123 |         let mut in_collection = false;
[INFO] [stdout]     |             ----^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `in_collection`
[INFO] [stdout]    --> src/providers/webdav.rs:123:13
[INFO] [stdout]     |
[INFO] [stdout] 123 |         let mut in_collection = false;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_in_collection`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `local_path`
[INFO] [stdout]   --> src/providers/aliyun.rs:62:9
[INFO] [stdout]    |
[INFO] [stdout] 62 |         local_path: &Path,
[INFO] [stdout]    |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_local_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `remote_path`
[INFO] [stdout]   --> src/providers/aliyun.rs:63:9
[INFO] [stdout]    |
[INFO] [stdout] 63 |         remote_path: &str,
[INFO] [stdout]    |         ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_remote_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `remote_path`
[INFO] [stdout]   --> src/providers/aliyun.rs:72:9
[INFO] [stdout]    |
[INFO] [stdout] 72 |         remote_path: &str,
[INFO] [stdout]    |         ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_remote_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `local_path`
[INFO] [stdout]   --> src/providers/aliyun.rs:73:9
[INFO] [stdout]    |
[INFO] [stdout] 73 |         local_path: &Path,
[INFO] [stdout]    |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_local_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `path`
[INFO] [stdout]   --> src/providers/aliyun.rs:79:28
[INFO] [stdout]    |
[INFO] [stdout] 79 |     async fn delete(&self, path: &str) -> Result<(), SyncError> {
[INFO] [stdout]    |                            ^^^^ help: if this is intentional, prefix it with an underscore: `_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `path`
[INFO] [stdout]   --> src/providers/aliyun.rs:82:27
[INFO] [stdout]    |
[INFO] [stdout] 82 |     async fn mkdir(&self, path: &str) -> Result<(), SyncError> {
[INFO] [stdout]    |                           ^^^^ help: if this is intentional, prefix it with an underscore: `_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `path`
[INFO] [stdout]   --> src/providers/aliyun.rs:94:28
[INFO] [stdout]    |
[INFO] [stdout] 94 |     async fn exists(&self, path: &str) -> Result<bool, SyncError> {
[INFO] [stdout]    |                            ^^^^ help: if this is intentional, prefix it with an underscore: `_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/providers/webdav.rs:123:13
[INFO] [stdout]     |
[INFO] [stdout] 123 |         let mut in_collection = false;
[INFO] [stdout]     |             ----^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `in_collection`
[INFO] [stdout]    --> src/providers/webdav.rs:123:13
[INFO] [stdout]     |
[INFO] [stdout] 123 |         let mut in_collection = false;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_in_collection`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `verification_rate`
[INFO] [stdout]     --> src/report/mod.rs:1115:13
[INFO] [stdout]      |
[INFO] [stdout] 1115 |         let verification_rate = self.verification_success_rate();
[INFO] [stdout]      |             ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_verification_rate`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `algorithm`
[INFO] [stdout]    --> src/sync/diff.rs:484:38
[INFO] [stdout]     |
[INFO] [stdout] 484 |     pub fn calculate_hash(&mut self, algorithm: ChecksumType) -> Result<()> {
[INFO] [stdout]     |                                      ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_algorithm`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `verification_rate`
[INFO] [stdout]     --> src/report/mod.rs:1115:13
[INFO] [stdout]      |
[INFO] [stdout] 1115 |         let verification_rate = self.verification_success_rate();
[INFO] [stdout]      |             ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_verification_rate`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/sync/diff.rs:771:23
[INFO] [stdout]     |
[INFO] [stdout] 771 |             .map_err(|e| SyncError::Unsupported("转换异常".into()))?;
[INFO] [stdout]     |                       ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/sync/diff.rs:776:27
[INFO] [stdout]     |
[INFO] [stdout] 776 |                 .map_err(|e| SyncError::Unsupported("转换异常".into()))?,
[INFO] [stdout]     |                           ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `similarity`
[INFO] [stdout]     --> src/sync/diff.rs:1032:38
[INFO] [stdout]      |
[INFO] [stdout] 1032 |         for (delete_idx, upload_idx, similarity) in potential_moves {
[INFO] [stdout]      |                                      ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_similarity`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `algorithm`
[INFO] [stdout]    --> src/sync/diff.rs:484:38
[INFO] [stdout]     |
[INFO] [stdout] 484 |     pub fn calculate_hash(&mut self, algorithm: ChecksumType) -> Result<()> {
[INFO] [stdout]     |                                      ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_algorithm`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `TempStorageHealth` is more private than the item `StorageHealth::temp_storage`
[INFO] [stdout]    --> src/core/health.rs:133:5
[INFO] [stdout]     |
[INFO] [stdout] 133 |     pub temp_storage: TempStorageHealth,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ field `StorageHealth::temp_storage` is reachable at visibility `pub(crate)`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `TempStorageHealth` is only usable at visibility `pub(self)`
[INFO] [stdout]    --> src/core/health.rs:18:1
[INFO] [stdout]     |
[INFO] [stdout]  18 | struct TempStorageHealth {}
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `ErrorResult` is more private than the item `sync::VerificationResult::errors`
[INFO] [stdout]   --> src/sync/mod.rs:9:5
[INFO] [stdout]    |
[INFO] [stdout]  9 |     pub errors: Vec<ErrorResult>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ field `sync::VerificationResult::errors` is reachable at visibility `pub(crate)`
[INFO] [stdout]    |
[INFO] [stdout] note: but type `ErrorResult` is only usable at visibility `pub(self)`
[INFO] [stdout]   --> src/sync/mod.rs:12:1
[INFO] [stdout]    |
[INFO] [stdout] 12 | struct ErrorResult {}
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `validate` is never used
[INFO] [stdout]   --> src/config/mod.rs:38:12
[INFO] [stdout]    |
[INFO] [stdout] 37 | impl AccountConfig {
[INFO] [stdout]    | ------------------ method in this implementation
[INFO] [stdout] 38 |     pub fn validate(&self) -> Result<(), Box<dyn Error>> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `validate` is never used
[INFO] [stdout]   --> src/config/mod.rs:89:12
[INFO] [stdout]    |
[INFO] [stdout] 88 | impl SyncTask {
[INFO] [stdout]    | ------------- method in this implementation
[INFO] [stdout] 89 |     pub fn validate(&self) -> Result<(), Box<dyn Error>> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `update_account` and `update_task` are never used
[INFO] [stdout]    --> src/config/mod.rs:290:12
[INFO] [stdout]     |
[INFO] [stdout] 270 | impl ConfigManager {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 290 |     pub fn update_account(&mut self, account: AccountConfig) -> Result<(), ConfigError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 307 |     pub fn update_task(&mut self, task: SyncTask) -> Result<(), ConfigError> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `validate`, `find_account`, `find_task`, `find_encryption_key`, and `find_schedule` are never used
[INFO] [stdout]    --> src/config/mod.rs:519:12
[INFO] [stdout]     |
[INFO] [stdout] 518 | impl ConfigFile {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 519 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 533 |     pub fn validate(&self) -> Result<(), Vec<String>> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 571 |     pub fn find_account(&self, account_id: &str) -> Option<&AccountConfig> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 575 |     pub fn find_task(&self, task_id: &str) -> Option<&SyncTask> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 579 |     pub fn find_encryption_key(&self, key_id: &str) -> Option<&EncryptionKey> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 583 |     pub fn find_schedule(&self, schedule_id: &str) -> Option<&ScheduleConfig> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `backup_config`, `restore_config`, and `list_backups` are never used
[INFO] [stdout]   --> src/config/migrator.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout]  8 | impl ConfigMigrator {
[INFO] [stdout]    | ------------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub fn backup_config(config_path: &std::path::Path) -> Result<()> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub fn restore_config(config_path: &std::path::Path, backup_name: &str) -> Result<()> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub fn list_backups(config_path: &std::path::Path) -> Result<Vec<String>> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `key_path` is never read
[INFO] [stdout]   --> src/config/security.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct SecurityManager {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] 14 |     key_path: PathBuf,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConfigUtils` is never constructed
[INFO] [stdout]  --> src/config/utils.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct ConfigUtils;
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]    --> src/config/utils.rs:8:12
[INFO] [stdout]     |
[INFO] [stdout]   6 | impl ConfigUtils {
[INFO] [stdout]     | ---------------- associated functions in this implementation
[INFO] [stdout]   7 |     /// 生成默认配置文件
[INFO] [stdout]   8 |     pub fn generate_default_config() -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  14 |     pub fn validate_config_syntax(content: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  21 |     pub fn find_config_files() -> Vec<std::path::PathBuf> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  51 |     pub fn merge_configs(configs: &[super::ConfigFile]) -> super::ConfigFile {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  82 |     pub fn load_from_env() -> super::ConfigFile {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub fn generate_template(template_type: ConfigTemplate) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     pub fn diff_configs(config1: &super::ConfigFile, config2: &super::ConfigFile) -> ConfigDiff {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ConfigTemplate` is never used
[INFO] [stdout]    --> src/config/utils.rs:236:10
[INFO] [stdout]     |
[INFO] [stdout] 236 | pub enum ConfigTemplate {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConfigDiff` is never constructed
[INFO] [stdout]    --> src/config/utils.rs:244:12
[INFO] [stdout]     |
[INFO] [stdout] 244 | pub struct ConfigDiff {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `has_changes` are never used
[INFO] [stdout]    --> src/config/utils.rs:253:12
[INFO] [stdout]     |
[INFO] [stdout] 252 | impl ConfigDiff {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 253 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 263 |     pub fn has_changes(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConfigValidatorImpl` is never constructed
[INFO] [stdout]  --> src/config/validator.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct ConfigValidatorImpl;
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_valid_cron` is never used
[INFO] [stdout]    --> src/config/validator.rs:124:4
[INFO] [stdout]     |
[INFO] [stdout] 124 | fn is_valid_cron(expr: &str) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AuditOperation` is never constructed
[INFO] [stdout]  --> src/core/audit.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct AuditOperation {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `OperationType` is never used
[INFO] [stdout]   --> src/core/audit.rs:23:10
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub enum OperationType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AuditFilter` is never constructed
[INFO] [stdout]   --> src/core/audit.rs:41:12
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub struct AuditFilter {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DatabaseAuditLogger` is never constructed
[INFO] [stdout]   --> src/core/audit.rs:52:12
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct DatabaseAuditLogger {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/core/audit.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 56 | impl DatabaseAuditLogger {
[INFO] [stdout]    | ------------------------ associated function in this implementation
[INFO] [stdout] 57 |     pub fn new(db_path: &std::path::Path) -> Result<Self> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HealthCheckerImpl` is never constructed
[INFO] [stdout]  --> src/core/health.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct HealthCheckerImpl {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/core/health.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | impl HealthCheckerImpl {
[INFO] [stdout]    | ---------------------- associated function in this implementation
[INFO] [stdout] 12 |     pub fn new(providers: HashMap<String, Box<dyn crate::providers::StorageProvider>>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TempStorageHealth` is never constructed
[INFO] [stdout]   --> src/core/health.rs:18:8
[INFO] [stdout]    |
[INFO] [stdout] 18 | struct TempStorageHealth {}
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `HealthStatus` is never used
[INFO] [stdout]    --> src/core/health.rs:112:10
[INFO] [stdout]     |
[INFO] [stdout] 112 | pub enum HealthStatus {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StorageHealth` is never constructed
[INFO] [stdout]    --> src/core/health.rs:131:12
[INFO] [stdout]     |
[INFO] [stdout] 131 | pub struct StorageHealth {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LocalStorageHealth` is never constructed
[INFO] [stdout]    --> src/core/health.rs:139:12
[INFO] [stdout]     |
[INFO] [stdout] 139 | pub struct LocalStorageHealth {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DatabaseHealth` is never constructed
[INFO] [stdout]    --> src/core/health.rs:148:12
[INFO] [stdout]     |
[INFO] [stdout] 148 | pub struct DatabaseHealth {}
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConnectivityStatus` is never constructed
[INFO] [stdout]    --> src/core/health.rs:151:12
[INFO] [stdout]     |
[INFO] [stdout] 151 | pub struct ConnectivityStatus {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConnectivityTest` is never constructed
[INFO] [stdout]    --> src/core/health.rs:159:12
[INFO] [stdout]     |
[INFO] [stdout] 159 | pub struct ConnectivityTest {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Protocol` is never used
[INFO] [stdout]    --> src/core/health.rs:169:10
[INFO] [stdout]     |
[INFO] [stdout] 169 | pub enum Protocol {
[INFO] [stdout]     |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TokenBucketRateLimiter` is never constructed
[INFO] [stdout]   --> src/core/rate_limit.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct TokenBucketRateLimiter {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `refill_tokens` are never used
[INFO] [stdout]   --> src/core/rate_limit.rs:42:12
[INFO] [stdout]    |
[INFO] [stdout] 41 | impl TokenBucketRateLimiter {
[INFO] [stdout]    | --------------------------- associated items in this implementation
[INFO] [stdout] 42 |     pub fn new(capacity: u64, requests_per_second: f64) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 52 |     fn refill_tokens(&self) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `window_size`, `max_requests`, and `requests` are never read
[INFO] [stdout]    --> src/core/rate_limit.rs:118:16
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub struct SlidingWindowRateLimiter {
[INFO] [stdout]     |            ------------------------ fields in this struct
[INFO] [stdout] 118 |     pub(crate) window_size: Duration,
[INFO] [stdout]     |                ^^^^^^^^^^^
[INFO] [stdout] 119 |     pub(crate) max_requests: u64,
[INFO] [stdout]     |                ^^^^^^^^^^^^
[INFO] [stdout] 120 |     pub(crate) requests: Mutex<Vec<Instant>>,
[INFO] [stdout]     |                ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `cleanup_old_requests` are never used
[INFO] [stdout]    --> src/core/rate_limit.rs:124:12
[INFO] [stdout]     |
[INFO] [stdout] 123 | impl SlidingWindowRateLimiter {
[INFO] [stdout]     | ----------------------------- associated items in this implementation
[INFO] [stdout] 124 |     pub fn new(window_size: Duration, max_requests: u64) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     fn cleanup_old_requests(&self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MemoryHandle` is never constructed
[INFO] [stdout]   --> src/core/resources.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct MemoryHandle {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `id`, `size`, `allocated_at`, and `age` are never used
[INFO] [stdout]   --> src/core/resources.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | impl MemoryHandle {
[INFO] [stdout]    | ----------------- associated items in this implementation
[INFO] [stdout] 19 |     pub fn new(id: String, size: usize) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub fn id(&self) -> &str {
[INFO] [stdout]    |            ^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn size(&self) -> usize {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 35 |     pub fn allocated_at(&self) -> Instant {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     pub fn age(&self) -> Duration {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DiskHandle` is never constructed
[INFO] [stdout]   --> src/core/resources.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub struct DiskHandle {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/core/resources.rs:55:12
[INFO] [stdout]    |
[INFO] [stdout] 54 | impl DiskHandle {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 55 |     pub fn new(id: String, path: std::path::PathBuf, size: u64, is_temporary: bool) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub fn id(&self) -> &str {
[INFO] [stdout]    |            ^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub fn path(&self) -> &std::path::Path {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub fn size(&self) -> u64 {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 77 |     pub fn is_temporary(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub fn allocated_at(&self) -> Instant {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub fn age(&self) -> Duration {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 90 |     pub fn cleanup(&self) -> Result<()> {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ResourceUsage` is never constructed
[INFO] [stdout]    --> src/core/resources.rs:104:12
[INFO] [stdout]     |
[INFO] [stdout] 104 | pub struct ResourceUsage {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `update_from_system`, `is_overloaded`, and `to_string` are never used
[INFO] [stdout]    --> src/core/resources.rs:128:12
[INFO] [stdout]     |
[INFO] [stdout] 127 | impl ResourceUsage {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] 128 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 153 |     pub fn update_from_system(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 200 |     pub fn is_overloaded(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 227 |     pub fn to_string(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ResourceLimits` is never constructed
[INFO] [stdout]    --> src/core/resources.rs:241:12
[INFO] [stdout]     |
[INFO] [stdout] 241 | pub struct ResourceLimits {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `default` and `validate` are never used
[INFO] [stdout]    --> src/core/resources.rs:254:12
[INFO] [stdout]     |
[INFO] [stdout] 253 | impl ResourceLimits {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 254 |     pub fn default() -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 268 |     pub fn validate(&self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ResourceManagerImpl` is never constructed
[INFO] [stdout]    --> src/core/resources.rs:298:12
[INFO] [stdout]     |
[INFO] [stdout] 298 | pub struct ResourceManagerImpl {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/core/resources.rs:309:12
[INFO] [stdout]     |
[INFO] [stdout] 308 | impl ResourceManagerImpl {
[INFO] [stdout]     | ------------------------ associated items in this implementation
[INFO] [stdout] 309 |     pub fn new(limits: ResourceLimits) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 323 |     pub fn allocate_memory(&self, size: usize) -> Result<MemoryHandle> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 354 |     pub fn allocate_disk(&self, size: u64) -> Result<DiskHandle> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 400 |     pub fn deallocate_memory(&self, handle_id: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 416 |     pub fn deallocate_disk(&self, handle_id: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 436 |     pub fn current_usage(&self) -> ResourceUsage {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 464 |     pub fn set_limits(&self, limits: ResourceLimits) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 469 |     pub fn start_task(&self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 485 |     pub fn end_task(&self) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 489 |     pub fn cleanup_old_resources(&self, max_age: Duration) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ExponentialBackoffRetry` is never constructed
[INFO] [stdout]  --> src/core/retry.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct ExponentialBackoffRetry {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `new` and `builder` are never used
[INFO] [stdout]   --> src/core/retry.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl ExponentialBackoffRetry {
[INFO] [stdout]    | ---------------------------- associated functions in this implementation
[INFO] [stdout] 15 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn builder() -> ExponentialBackoffRetryBuilder {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ExponentialBackoffRetryBuilder` is never constructed
[INFO] [stdout]   --> src/core/retry.rs:63:12
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct ExponentialBackoffRetryBuilder {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/core/retry.rs:72:12
[INFO] [stdout]     |
[INFO] [stdout]  71 | impl ExponentialBackoffRetryBuilder {
[INFO] [stdout]     | ----------------------------------- associated items in this implementation
[INFO] [stdout]  72 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  82 |     pub fn max_attempts(mut self, attempts: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     pub fn initial_delay(mut self, delay: Duration) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  92 |     pub fn max_delay(mut self, delay: Duration) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn backoff_factor(mut self, factor: f64) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub fn retryable_error(mut self, error_code: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub fn build(self) -> ExponentialBackoffRetry {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `JitterRetry` is never constructed
[INFO] [stdout]    --> src/core/retry.rs:119:12
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub struct JitterRetry {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `add_jitter` are never used
[INFO] [stdout]    --> src/core/retry.rs:125:12
[INFO] [stdout]     |
[INFO] [stdout] 124 | impl JitterRetry {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] 125 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     fn add_jitter(&self, delay: Duration) -> Duration {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ScheduledTask` is never constructed
[INFO] [stdout]   --> src/core/scheduler.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct ScheduledTask {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/core/scheduler.rs:60:12
[INFO] [stdout]     |
[INFO] [stdout]  59 | impl ScheduledTask {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout]  60 |     pub fn new(sync_task: &SyncTask, schedule: Schedule) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn calculate_next_run(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn update_statistics(&mut self, duration: Duration, success: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 133 |     pub fn should_run_now(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub fn get_status(&self) -> TaskStatus {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 155 |     pub fn get_health(&self) -> TaskHealth {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 177 |     pub fn format_next_run(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 200 |     pub fn enable(&mut self) {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 206 |     pub fn disable(&mut self) {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 212 |     pub fn retry(&mut self) -> bool {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TaskResult` is never constructed
[INFO] [stdout]    --> src/core/scheduler.rs:225:12
[INFO] [stdout]     |
[INFO] [stdout] 225 | pub struct TaskResult {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `TaskStatus` is never used
[INFO] [stdout]    --> src/core/scheduler.rs:233:10
[INFO] [stdout]     |
[INFO] [stdout] 233 | pub enum TaskStatus {
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `TaskHealth` is never used
[INFO] [stdout]    --> src/core/scheduler.rs:250:10
[INFO] [stdout]     |
[INFO] [stdout] 250 | pub enum TaskHealth {
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SchedulerManager` is never constructed
[INFO] [stdout]    --> src/core/scheduler.rs:262:12
[INFO] [stdout]     |
[INFO] [stdout] 262 | pub struct SchedulerManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/core/scheduler.rs:270:18
[INFO] [stdout]     |
[INFO] [stdout] 269 | impl SchedulerManager {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] 270 |     pub async fn new(sync_engine: SyncEngine) -> Result<Self> {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 285 |     pub async fn add_task(&self, mut scheduled_task: ScheduledTask) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 309 |     async fn schedule_job(&self, scheduled_task: &ScheduledTask) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 367 |     async fn execute_task(
[INFO] [stdout]     |              ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 433 |     pub async fn start(&self) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 440 |     pub async fn stop(&mut self) -> Result<()> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 447 |     pub async fn get_tasks(&self) -> Vec<ScheduledTask> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 452 |     pub async fn get_task(&self, task_id: &str) -> Option<ScheduledTask> {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 458 |     pub async fn delete_task(&self, task_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 469 |     pub async fn trigger_task(&self, task_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 506 |     pub async fn pause_task(&self, task_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 517 |     pub async fn resume_task(&self, task_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 528 |     pub async fn reschedule_all(&mut self) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 554 |     pub async fn get_stats(&self) -> SchedulerStats {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 584 |     pub async fn cleanup_completed_tasks(&self, max_age_days: u32) -> Result<usize> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 604 |     pub async fn export_tasks(&self, format: ExportFormat) -> Result<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 618 |     pub async fn import_tasks(&self, data: &str, format: ExportFormat) -> Result<usize> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 640 |     fn tasks_to_csv(tasks: &[ScheduledTask]) -> Result<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SchedulerStats` is never constructed
[INFO] [stdout]    --> src/core/scheduler.rs:671:12
[INFO] [stdout]     |
[INFO] [stdout] 671 | pub struct SchedulerStats {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `success_rate`, and `health_score` are never used
[INFO] [stdout]    --> src/core/scheduler.rs:705:12
[INFO] [stdout]     |
[INFO] [stdout] 704 | impl SchedulerStats {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 705 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 725 |     pub fn success_rate(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 733 |     pub fn health_score(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ExportFormat` is never used
[INFO] [stdout]    --> src/core/scheduler.rs:751:10
[INFO] [stdout]     |
[INFO] [stdout] 751 | pub enum ExportFormat {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CsvTask` is never constructed
[INFO] [stdout]    --> src/core/scheduler.rs:759:8
[INFO] [stdout]     |
[INFO] [stdout] 759 | struct CsvTask<'a> {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TaskNotifier` is never constructed
[INFO] [stdout]    --> src/core/scheduler.rs:773:12
[INFO] [stdout]     |
[INFO] [stdout] 773 | pub struct TaskNotifier {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/core/scheduler.rs:779:12
[INFO] [stdout]     |
[INFO] [stdout] 778 | impl TaskNotifier {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout] 779 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 787 |     pub async fn notify_task_start(&self, task: &ScheduledTask) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 799 |     pub async fn notify_task_complete(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 819 |     pub async fn notify_task_failed(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 838 |     async fn send_notification(&self, message: &str) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 852 |     async fn send_email(&self, config: &EmailConfig, message: &str) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 858 |     async fn send_webhook(&self, url: &str, message: &str) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EmailConfig` is never constructed
[INFO] [stdout]    --> src/core/scheduler.rs:873:12
[INFO] [stdout]     |
[INFO] [stdout] 873 | pub struct EmailConfig {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cmd_schedule_task` is never used
[INFO] [stdout]    --> src/core/scheduler.rs:883:14
[INFO] [stdout]     |
[INFO] [stdout] 883 | pub async fn cmd_schedule_task(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cmd_list_scheduled_tasks` is never used
[INFO] [stdout]    --> src/core/scheduler.rs:922:14
[INFO] [stdout]     |
[INFO] [stdout] 922 | pub async fn cmd_list_scheduled_tasks(scheduler: &SchedulerManager) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `StateManager` is never used
[INFO] [stdout]   --> src/core/traits.rs:14:11
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait StateManager: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `ProgressReporter` is never used
[INFO] [stdout]   --> src/core/traits.rs:22:11
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub trait ProgressReporter: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `RetryStrategy` is never used
[INFO] [stdout]   --> src/core/traits.rs:31:11
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub trait RetryStrategy: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `acquire`, `current_rate`, `set_rate`, and `try_acquire` are never used
[INFO] [stdout]   --> src/core/traits.rs:40:14
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub trait RateLimiter: Send + Sync {
[INFO] [stdout]    |           ----------- methods in this trait
[INFO] [stdout] 40 |     async fn acquire<'a>(&'a self) -> Result<()>
[INFO] [stdout]    |              ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     fn current_rate(&self) -> f64; // 请求/秒
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 45 |     fn set_rate(&mut self, requests_per_second: f64);
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 46 |     fn try_acquire(&self) -> bool;
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `ChecksumCalculator` is never used
[INFO] [stdout]   --> src/core/traits.rs:50:11
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub trait ChecksumCalculator: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `DiffDetector` is never used
[INFO] [stdout]   --> src/core/traits.rs:57:11
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub trait DiffDetector: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `FileFilter` is never used
[INFO] [stdout]   --> src/core/traits.rs:69:11
[INFO] [stdout]    |
[INFO] [stdout] 69 | pub trait FileFilter: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `TaskScheduler` is never used
[INFO] [stdout]   --> src/core/traits.rs:76:11
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub trait TaskScheduler: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `Notifier` is never used
[INFO] [stdout]   --> src/core/traits.rs:84:11
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub trait Notifier: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `AuditLogger` is never used
[INFO] [stdout]   --> src/core/traits.rs:92:11
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub trait AuditLogger: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `ConfigValidator` is never used
[INFO] [stdout]    --> src/core/traits.rs:102:11
[INFO] [stdout]     |
[INFO] [stdout] 102 | pub trait ConfigValidator: Send + Sync {
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `HealthChecker` is never used
[INFO] [stdout]    --> src/core/traits.rs:110:11
[INFO] [stdout]     |
[INFO] [stdout] 110 | pub trait HealthChecker: Send + Sync {
[INFO] [stdout]     |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `ResourceManager` is never used
[INFO] [stdout]    --> src/core/traits.rs:117:11
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub trait ResourceManager: Send + Sync {
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `Plugin` is never used
[INFO] [stdout]    --> src/core/traits.rs:126:11
[INFO] [stdout]     |
[INFO] [stdout] 126 | pub trait Plugin: Send + Sync {
[INFO] [stdout]     |           ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `HookHandler` is never used
[INFO] [stdout]    --> src/core/traits.rs:139:11
[INFO] [stdout]     |
[INFO] [stdout] 139 | pub trait HookHandler: Send + Sync {
[INFO] [stdout]     |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TransferStats` is never constructed
[INFO] [stdout]    --> src/core/traits.rs:149:12
[INFO] [stdout]     |
[INFO] [stdout] 149 | pub struct TransferStats {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FileMetadata` is never constructed
[INFO] [stdout]    --> src/core/traits.rs:164:12
[INFO] [stdout]     |
[INFO] [stdout] 164 | pub struct FileMetadata {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FileChange` is never used
[INFO] [stdout]    --> src/core/traits.rs:178:10
[INFO] [stdout]     |
[INFO] [stdout] 178 | pub enum FileChange {
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DiffOptions` is never constructed
[INFO] [stdout]    --> src/core/traits.rs:194:12
[INFO] [stdout]     |
[INFO] [stdout] 194 | pub struct DiffOptions {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProgressUpdate` is never constructed
[INFO] [stdout]    --> src/core/traits.rs:205:12
[INFO] [stdout]     |
[INFO] [stdout] 205 | pub struct ProgressUpdate {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `algorithm`, `key_id`, `nonce`, and `hmac` are never read
[INFO] [stdout]   --> src/encryption/mod.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct EncryptionMetadata {
[INFO] [stdout]    |            ------------------ fields in this struct
[INFO] [stdout] 17 |     pub algorithm: EncryptionAlgorithm,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 18 |     pub key_id: String,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 19 |     pub nonce: Vec<u8>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 20 |     pub hmac: Hmac,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `decrypt_file` is never used
[INFO] [stdout]   --> src/encryption/mod.rs:93:18
[INFO] [stdout]    |
[INFO] [stdout] 23 | impl EncryptionManager {
[INFO] [stdout]    | ---------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 93 |     pub async fn decrypt_file(
[INFO] [stdout]    |                  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/sync/diff.rs:771:23
[INFO] [stdout]     |
[INFO] [stdout] 771 |             .map_err(|e| SyncError::Unsupported("转换异常".into()))?;
[INFO] [stdout]     |                       ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/sync/diff.rs:776:27
[INFO] [stdout]     |
[INFO] [stdout] 776 |                 .map_err(|e| SyncError::Unsupported("转换异常".into()))?,
[INFO] [stdout]     |                           ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `key_size`, `iv_size`, `tag_size`, and `recommended_iv_mode` are never used
[INFO] [stdout]   --> src/encryption/types.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | impl EncryptionAlgorithm {
[INFO] [stdout]    | ------------------------ methods in this implementation
[INFO] [stdout] 21 |     pub fn key_size(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn iv_size(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub fn tag_size(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 51 |     pub fn recommended_iv_mode(&self) -> IvMode {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `requires_unique_per_file`, `generate_iv`, `generate_random_iv`, `generate_derived_iv`, `generate_counter_iv`, and `generate_file_offset_iv` are never used
[INFO] [stdout]    --> src/encryption/types.rs:77:12
[INFO] [stdout]     |
[INFO] [stdout]  76 | impl IvMode {
[INFO] [stdout]     | ----------- methods in this implementation
[INFO] [stdout]  77 |     pub fn requires_unique_per_file(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     pub fn generate_iv(&self, context: &IvContext) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     fn generate_random_iv(&self, size: usize) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 105 |     fn generate_derived_iv(&self, context: &IvContext) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     fn generate_counter_iv(&self, context: &IvContext) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 139 |     fn generate_file_offset_iv(&self, context: &IvContext) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `IvContext` is never constructed
[INFO] [stdout]    --> src/encryption/types.rs:154:12
[INFO] [stdout]     |
[INFO] [stdout] 154 | pub struct IvContext {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> src/error/mod.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub enum SyncError {
[INFO] [stdout]    |          --------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 35 |     Validation(String),
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 38 |     Timeout(String),
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     RateLimitExceeded(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     AuthenticationFailed(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     PermissionDenied(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     FileNotFound(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     ResourceExhausted(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 56 |     Conflict(String),
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     IntegrityCheckFailed(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     RetryLimitExceeded(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     OperationCanceled,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     Unsupported(String),
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SyncError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `FileNotFound`, `ReadFailed`, `ParseFailed`, `MissingField`, and `Invalid` are never constructed
[INFO] [stdout]   --> src/error/mod.rs:77:5
[INFO] [stdout]    |
[INFO] [stdout] 75 | pub enum ConfigError {
[INFO] [stdout]    |          ----------- variants in this enum
[INFO] [stdout] 76 |     #[error("Configuration file not found: {0}")]
[INFO] [stdout] 77 |     FileNotFound(PathBuf),
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 80 |     ReadFailed(#[source] IoError),
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 83 |     ParseFailed(String),
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 86 |     MissingField(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 89 |     Invalid(String),
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ConfigError` 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/mod.rs:101:5
[INFO] [stdout]     |
[INFO] [stdout]  96 | pub enum ProviderError {
[INFO] [stdout]     |          ------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 101 |     NotSupported(String),
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     InvalidCredentials(String),
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |     QuotaExceeded(String),
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     RateLimited(String),
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 116 |     AuthFailed(String),
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     Timeout(String),
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     PermissionDenied(String),
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ProviderError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `InvalidKey`, `DecryptionFailed`, `InvalidIV`, `IntegrityCheckFailed`, and `UnsupportedAlgorithm` are never constructed
[INFO] [stdout]    --> src/error/mod.rs:140:5
[INFO] [stdout]     |
[INFO] [stdout] 135 | pub enum EncryptionError {
[INFO] [stdout]     |          --------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 140 |     InvalidKey(String),
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 146 |     DecryptionFailed(String),
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 149 |     InvalidIV,
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 152 |     IntegrityCheckFailed,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 158 |     UnsupportedAlgorithm(String),
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `EncryptionError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Full`, `NotAvailable`, `Timeout`, `Corruption`, and `VersionMismatch` are never constructed
[INFO] [stdout]    --> src/error/mod.rs:164:5
[INFO] [stdout]     |
[INFO] [stdout] 162 | pub enum StorageError {
[INFO] [stdout]     |          ------------ variants in this enum
[INFO] [stdout] 163 |     #[error("Storage full: {0}")]
[INFO] [stdout] 164 |     Full(String),
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 167 |     NotAvailable(String),
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     Timeout(String),
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 173 |     Corruption(String),
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     VersionMismatch(String),
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `StorageError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `is_retryable`, `is_fatal`, and `error_code` are never used
[INFO] [stdout]    --> src/error/mod.rs:181:12
[INFO] [stdout]     |
[INFO] [stdout] 180 | impl SyncError {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] 181 |     pub fn is_retryable(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 194 |     pub fn is_fatal(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 207 |     pub fn error_code(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `ConfigResult` is never used
[INFO] [stdout]    --> src/error/mod.rs:236:10
[INFO] [stdout]     |
[INFO] [stdout] 236 | pub type ConfigResult<T> = std::result::Result<T, ConfigError>;
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `ProviderResult` is never used
[INFO] [stdout]    --> src/error/mod.rs:237:10
[INFO] [stdout]     |
[INFO] [stdout] 237 | pub type ProviderResult<T> = std::result::Result<T, ProviderError>;
[INFO] [stdout]     |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `EncryptionResult` is never used
[INFO] [stdout]    --> src/error/mod.rs:238:10
[INFO] [stdout]     |
[INFO] [stdout] 238 | pub type EncryptionResult<T> = std::result::Result<T, EncryptionError>;
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FileMetadata` is never constructed
[INFO] [stdout]  --> src/plugins/mod.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct FileMetadata {
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `PluginHook` is never used
[INFO] [stdout]  --> src/plugins/hooks.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub enum PluginHook {
[INFO] [stdout]   |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `HookPriority` is never used
[INFO] [stdout]   --> src/plugins/hooks.rs:43:10
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub enum HookPriority {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `name`, `priority`, and `set_priority` are never used
[INFO] [stdout]   --> src/plugins/hooks.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 56 | impl PluginHook {
[INFO] [stdout]    | --------------- methods in this implementation
[INFO] [stdout] 57 |     pub fn name(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 71 |     pub fn priority(&self) -> HookPriority {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub fn set_priority(&mut self, priority: HookPriority) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HookContext` is never constructed
[INFO] [stdout]    --> src/plugins/hooks.rs:101:12
[INFO] [stdout]     |
[INFO] [stdout] 101 | pub struct HookContext {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/plugins/hooks.rs:110:12
[INFO] [stdout]     |
[INFO] [stdout] 109 | impl HookContext {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] 110 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub fn with_task(mut self, task: SyncTask) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     pub fn with_report(mut self, report: SyncReport) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     pub fn with_file(mut self, file: FileMetadata) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     pub fn with_error(mut self, error: SyncError) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 140 |     pub fn set_custom_data(&mut self, key: String, value: serde_json::Value) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub fn get_custom_data(&self, key: &str) -> Option<&serde_json::Value> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `HookHandler` is never used
[INFO] [stdout]    --> src/plugins/hooks.rs:150:11
[INFO] [stdout]     |
[INFO] [stdout] 150 | pub trait HookHandler: Send + Sync {
[INFO] [stdout]     |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HookManager` is never constructed
[INFO] [stdout]  --> src/plugins/manager.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct HookManager {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `register_handler`, `execute_hook`, and `all_hook_types` are never used
[INFO] [stdout]   --> src/plugins/manager.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | impl HookManager {
[INFO] [stdout]    | ---------------- associated items in this implementation
[INFO] [stdout] 13 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     pub fn register_handler(&mut self, handler: Box<dyn HookHandler>) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 28 |     pub async fn execute_hook(&self, hook: PluginHook, context: &mut HookContext) -> Result<()> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     fn all_hook_types() -> Vec<&'static str> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LoggingPlugin` is never constructed
[INFO] [stdout]   --> src/plugins/manager.rs:55:12
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub struct LoggingPlugin {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/plugins/manager.rs:62:12
[INFO] [stdout]    |
[INFO] [stdout] 61 | impl LoggingPlugin {
[INFO] [stdout]    | ------------------ associated function in this implementation
[INFO] [stdout] 62 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `stat` and `exists` are never used
[INFO] [stdout]   --> src/providers/mod.rs:28:14
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub trait StorageProvider: Send + Sync {
[INFO] [stdout]    |           --------------- methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 28 |     async fn stat(&self, path: &str) -> Result<FileInfo, SyncError>;
[INFO] [stdout]    |              ^^^^
[INFO] [stdout] 29 |     async fn exists(&self, path: &str) -> Result<bool, SyncError>;
[INFO] [stdout]    |              ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_provider` is never used
[INFO] [stdout]   --> src/providers/mod.rs:32:14
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub async fn create_provider(
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `bytes_uploaded`, `file_size`, `checksum`, and `elapsed_time` are never read
[INFO] [stdout]   --> src/providers/mod.rs:59:9
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub struct UploadResult {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 59 |     pub bytes_uploaded: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 60 |     pub file_size: u64,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 61 |     pub checksum: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 62 |     pub elapsed_time: Duration,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `UploadResult` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `bytes_downloaded`, `file_size`, `checksum`, and `elapsed_time` are never read
[INFO] [stdout]   --> src/providers/mod.rs:67:9
[INFO] [stdout]    |
[INFO] [stdout] 66 | pub struct DownloadResult {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] 67 |     pub bytes_downloaded: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 68 |     pub file_size: u64,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 69 |     pub checksum: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 70 |     pub elapsed_time: Duration,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DownloadResult` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RateLimitedProvider` is never constructed
[INFO] [stdout]   --> src/providers/mod.rs:73:12
[INFO] [stdout]    |
[INFO] [stdout] 73 | pub struct RateLimitedProvider<T> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/providers/mod.rs:79:12
[INFO] [stdout]    |
[INFO] [stdout] 78 | impl<T: StorageProvider> RateLimitedProvider<T> {
[INFO] [stdout]    | ----------------------------------------------- associated function in this implementation
[INFO] [stdout] 79 |     pub fn new(inner: T, config: RateLimitConfig) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `client`, `token`, `refresh_token`, and `rate_limiter` are never read
[INFO] [stdout]   --> src/providers/aliyun.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct AliYunDriveProvider {
[INFO] [stdout]    |            ------------------- fields in this struct
[INFO] [stdout] 14 |     client: reqwest::Client,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 15 |     token: String,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 16 |     refresh_token: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 17 |     rate_limiter: Arc<dyn RateLimiter>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `refresh_token_if_needed` is never used
[INFO] [stdout]   --> src/providers/aliyun.rs:43:14
[INFO] [stdout]    |
[INFO] [stdout] 20 | impl AliYunDriveProvider {
[INFO] [stdout]    | ------------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 43 |     async fn refresh_token_if_needed(&mut self) -> Result<(), ProviderError> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `generate_html`, `generate_file_rows`, `generate_error_list`, and `generate_json` are never used
[INFO] [stdout]    --> src/report/mod.rs:74:12
[INFO] [stdout]     |
[INFO] [stdout]  60 | impl SyncReport {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  74 |     pub fn generate_html(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 152 |     fn generate_file_rows(&self) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 166 |     fn generate_error_list(&self) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 174 |     pub fn generate_json(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `as_str`, `emoji`, `is_completed`, `is_successful`, `can_retry`, and `is_active` are never used
[INFO] [stdout]    --> src/report/mod.rs:207:12
[INFO] [stdout]     |
[INFO] [stdout] 206 | impl SyncStatus {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] 207 |     pub fn as_str(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 222 |     pub fn emoji(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 237 |     pub fn is_completed(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 244 |     pub fn is_successful(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 248 |     pub fn can_retry(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 252 |     pub fn is_active(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/report/mod.rs:346:12
[INFO] [stdout]     |
[INFO] [stdout] 315 | impl FileSyncResult {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 346 |     pub fn from_diff(diff: &FileDiff, operation: FileOperation) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 380 |     pub fn mark_started(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 385 |     pub fn mark_completed(&mut self, success: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 406 |     pub fn mark_retry(&mut self, error: Option<String>) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 413 |     pub fn mark_verifying(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 417 |     pub fn mark_verified(&mut self, verified: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 426 |     pub fn add_warning(&mut self, warning: String) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 438 |     pub fn is_completed(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 447 |     pub fn human_readable_size(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 451 |     pub fn human_readable_transferred(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 455 |     pub fn human_readable_speed(&self) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 467 |     pub fn summary(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 487 |     pub fn detailed_info(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 554 |     pub fn to_json(&self) -> Result<String, serde_json::Error> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 558 |     pub fn from_json(json: &str) -> Result<Self, serde_json::Error> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `as_str`, `emoji`, `is_completed`, `is_successful`, and `can_retry` are never used
[INFO] [stdout]    --> src/report/mod.rs:593:12
[INFO] [stdout]     |
[INFO] [stdout] 592 | impl FileSyncStatus {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] 593 |     pub fn as_str(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 610 |     pub fn emoji(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 627 |     pub fn is_completed(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 634 |     pub fn is_successful(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 638 |     pub fn can_retry(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_extension`, `from_path`, `from_metadata`, `from_mime_type`, `is_compressible`, and `is_binary` are never used
[INFO] [stdout]    --> src/report/mod.rs:775:12
[INFO] [stdout]     |
[INFO] [stdout] 774 | impl FileType {
[INFO] [stdout]     | ------------- associated items in this implementation
[INFO] [stdout] 775 |     pub fn from_extension(extension: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 800 |     pub fn from_path(path: &Path) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 812 |     pub fn from_metadata(metadata: &crate::sync::diff::FileMetadata) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 826 |     pub fn from_mime_type(mime_type: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 895 |     pub fn is_compressible(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 908 |     pub fn is_binary(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `update_speed_metrics` are never used
[INFO] [stdout]     --> src/report/mod.rs:966:12
[INFO] [stdout]      |
[INFO] [stdout]  965 | impl SyncStatistics {
[INFO] [stdout]      | ------------------- associated items in this implementation
[INFO] [stdout]  966 |     pub fn new() -> Self {
[INFO] [stdout]      |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 1040 |     pub fn update_speed_metrics(&mut self, speed: f64) {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `success_rate` is never used
[INFO] [stdout]     --> src/report/mod.rs:1281:12
[INFO] [stdout]      |
[INFO] [stdout] 1244 | impl FileTypeStats {
[INFO] [stdout]      | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 1281 |     pub fn success_rate(&self) -> f64 {
[INFO] [stdout]      |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VerificationResult` is never constructed
[INFO] [stdout]  --> src/sync/mod.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct VerificationResult {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ErrorResult` is never constructed
[INFO] [stdout]   --> src/sync/mod.rs:12:8
[INFO] [stdout]    |
[INFO] [stdout] 12 | struct ErrorResult {}
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `as_str`, `emoji`, `is_destructive`, and `requires_user_action` are never used
[INFO] [stdout]   --> src/sync/diff.rs:31:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | impl DiffAction {
[INFO] [stdout]    | --------------- methods in this implementation
[INFO] [stdout] 31 |     pub fn as_str(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub fn emoji(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     pub fn is_destructive(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub fn requires_user_action(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/sync/diff.rs:157:12
[INFO] [stdout]     |
[INFO] [stdout] 115 | impl FileDiff {
[INFO] [stdout]     | ------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 157 |     pub fn download(
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 169 |     pub fn conflict(path: String, source_info: FileMetadata, target_info: FileMetadata) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     pub fn create_dir(path: String, source_info: FileMetadata) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 202 |     pub fn move_file(
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 269 |     pub fn calculate_similarity(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 289 |     pub fn is_similar(&self, threshold: f64) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 293 |     pub fn should_retry(&self, max_retries: u32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 297 |     pub fn mark_retry(&mut self, error: Option<String>) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 303 |     pub fn mark_success(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 309 |     pub fn is_expired(&self, timeout: Duration) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 335 |     pub fn human_readable_size(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 339 |     pub fn summary(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 361 |     pub fn to_json(&self) -> Result<String> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 366 |     pub fn from_json(json: &str) -> Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 370 |     pub fn is_encrypted(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 380 |     pub fn requires_decryption(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `calculate_hash` and `update_metadata_hash` are never used
[INFO] [stdout]    --> src/sync/diff.rs:484:12
[INFO] [stdout]     |
[INFO] [stdout] 409 | impl FileMetadata {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 484 |     pub fn calculate_hash(&mut self, algorithm: ChecksumType) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 512 |     pub fn update_metadata_hash(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `hash_size` and `recommended` are never used
[INFO] [stdout]    --> src/sync/diff.rs:614:12
[INFO] [stdout]     |
[INFO] [stdout] 613 | impl ChecksumType {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout] 614 |     pub fn hash_size(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 626 |     pub fn recommended() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/sync/diff.rs:710:12
[INFO] [stdout]     |
[INFO] [stdout] 660 | impl DiffResult {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 710 |     pub fn sort_by_priority(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 714 |     pub fn filter_by_action(&self, action: DiffAction) -> Vec<&FileDiff> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 721 |     pub fn filter_by_tag(&self, tag: &str) -> Vec<&FileDiff> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 728 |     pub fn find_by_path(&self, path: &str) -> Option<&FileDiff> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 732 |     pub fn has_conflicts(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 736 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 740 |     pub fn summary(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 751 |     pub fn to_json(&self) -> Result<String> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 756 |     pub fn to_csv(&self) -> Result<String> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `finalize` and `human_readable` are never used
[INFO] [stdout]    --> src/sync/diff.rs:835:12
[INFO] [stdout]     |
[INFO] [stdout] 798 | impl DiffStats {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 835 |     pub fn finalize(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 843 |     pub fn human_readable(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CsvDiff` is never constructed
[INFO] [stdout]    --> src/sync/diff.rs:855:8
[INFO] [stdout]     |
[INFO] [stdout] 855 | struct CsvDiff<'a> {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DiffDetector` is never constructed
[INFO] [stdout]    --> src/sync/diff.rs:868:12
[INFO] [stdout]     |
[INFO] [stdout] 868 | pub struct DiffDetector {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]     --> src/sync/diff.rs:874:12
[INFO] [stdout]      |
[INFO] [stdout]  873 | impl DiffDetector {
[INFO] [stdout]      | ----------------- associated items in this implementation
[INFO] [stdout]  874 |     pub fn new(options: DiffOptions) -> Self {
[INFO] [stdout]      |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  881 |     pub async fn detect_changes(
[INFO] [stdout]      |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  945 |     fn is_file_changed(&self, source: &FileMetadata, target: &FileMetadata) -> bool {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  968 |     fn create_file_diff(&self, source: &FileMetadata, target: Option<&FileMetadata>) -> FileDiff {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  983 |     fn analyze_changes(&self, diff: &mut FileDiff) {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1011 |     fn detect_moves(&self, result: &mut DiffResult) {
[INFO] [stdout]      |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1050 |     fn detect_conflicts(&self, result: &mut DiffResult) {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1084 |     fn calculate_file_similarity(&self, file1: &FileMetadata, file2: &FileMetadata) -> f64 {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1118 |     fn update_cache(&mut self, files: &[FileMetadata]) {
[INFO] [stdout]      |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DiffOptions` is never constructed
[INFO] [stdout]     --> src/sync/diff.rs:1128:12
[INFO] [stdout]      |
[INFO] [stdout] 1128 | pub struct DiffOptions {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `diff_cache` is never read
[INFO] [stdout]   --> src/sync/engine.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct SyncEngine {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 19 |     diff_cache: DashMap<String, FileDiff>,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `sync` is never used
[INFO] [stdout]    --> src/sync/engine.rs:116:18
[INFO] [stdout]     |
[INFO] [stdout]  25 | impl SyncEngine {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 116 |     pub async fn sync(&mut self, task: &SyncTask) -> Result<SyncReport, SyncError> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `speed` is never read
[INFO] [stdout]    --> src/sync/engine.rs:392:9
[INFO] [stdout]     |
[INFO] [stdout] 386 | pub struct SyncProgress {
[INFO] [stdout]     |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 392 |     pub speed: f64,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `similarity`
[INFO] [stdout]     --> src/sync/diff.rs:1032:38
[INFO] [stdout]      |
[INFO] [stdout] 1032 |         for (delete_idx, upload_idx, similarity) in potential_moves {
[INFO] [stdout]      |                                      ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_similarity`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `TempStorageHealth` is more private than the item `StorageHealth::temp_storage`
[INFO] [stdout]    --> src/core/health.rs:133:5
[INFO] [stdout]     |
[INFO] [stdout] 133 |     pub temp_storage: TempStorageHealth,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ field `StorageHealth::temp_storage` is reachable at visibility `pub(crate)`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `TempStorageHealth` is only usable at visibility `pub(self)`
[INFO] [stdout]    --> src/core/health.rs:18:1
[INFO] [stdout]     |
[INFO] [stdout]  18 | struct TempStorageHealth {}
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `ErrorResult` is more private than the item `sync::VerificationResult::errors`
[INFO] [stdout]   --> src/sync/mod.rs:9:5
[INFO] [stdout]    |
[INFO] [stdout]  9 |     pub errors: Vec<ErrorResult>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ field `sync::VerificationResult::errors` is reachable at visibility `pub(crate)`
[INFO] [stdout]    |
[INFO] [stdout] note: but type `ErrorResult` is only usable at visibility `pub(self)`
[INFO] [stdout]   --> src/sync/mod.rs:12:1
[INFO] [stdout]    |
[INFO] [stdout] 12 | struct ErrorResult {}
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `validate` is never used
[INFO] [stdout]   --> src/config/mod.rs:38:12
[INFO] [stdout]    |
[INFO] [stdout] 37 | impl AccountConfig {
[INFO] [stdout]    | ------------------ method in this implementation
[INFO] [stdout] 38 |     pub fn validate(&self) -> Result<(), Box<dyn Error>> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `validate` is never used
[INFO] [stdout]   --> src/config/mod.rs:89:12
[INFO] [stdout]    |
[INFO] [stdout] 88 | impl SyncTask {
[INFO] [stdout]    | ------------- method in this implementation
[INFO] [stdout] 89 |     pub fn validate(&self) -> Result<(), Box<dyn Error>> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `update_account` and `update_task` are never used
[INFO] [stdout]    --> src/config/mod.rs:290:12
[INFO] [stdout]     |
[INFO] [stdout] 270 | impl ConfigManager {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 290 |     pub fn update_account(&mut self, account: AccountConfig) -> Result<(), ConfigError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 307 |     pub fn update_task(&mut self, task: SyncTask) -> Result<(), ConfigError> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `validate`, `find_account`, `find_task`, `find_encryption_key`, and `find_schedule` are never used
[INFO] [stdout]    --> src/config/mod.rs:519:12
[INFO] [stdout]     |
[INFO] [stdout] 518 | impl ConfigFile {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 519 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 533 |     pub fn validate(&self) -> Result<(), Vec<String>> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 571 |     pub fn find_account(&self, account_id: &str) -> Option<&AccountConfig> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 575 |     pub fn find_task(&self, task_id: &str) -> Option<&SyncTask> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 579 |     pub fn find_encryption_key(&self, key_id: &str) -> Option<&EncryptionKey> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 583 |     pub fn find_schedule(&self, schedule_id: &str) -> Option<&ScheduleConfig> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `backup_config`, `restore_config`, and `list_backups` are never used
[INFO] [stdout]   --> src/config/migrator.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout]  8 | impl ConfigMigrator {
[INFO] [stdout]    | ------------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub fn backup_config(config_path: &std::path::Path) -> Result<()> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub fn restore_config(config_path: &std::path::Path, backup_name: &str) -> Result<()> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub fn list_backups(config_path: &std::path::Path) -> Result<Vec<String>> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `key_path` is never read
[INFO] [stdout]   --> src/config/security.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct SecurityManager {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] 14 |     key_path: PathBuf,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConfigUtils` is never constructed
[INFO] [stdout]  --> src/config/utils.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct ConfigUtils;
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]    --> src/config/utils.rs:8:12
[INFO] [stdout]     |
[INFO] [stdout]   6 | impl ConfigUtils {
[INFO] [stdout]     | ---------------- associated functions in this implementation
[INFO] [stdout]   7 |     /// 生成默认配置文件
[INFO] [stdout]   8 |     pub fn generate_default_config() -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  14 |     pub fn validate_config_syntax(content: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  21 |     pub fn find_config_files() -> Vec<std::path::PathBuf> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  51 |     pub fn merge_configs(configs: &[super::ConfigFile]) -> super::ConfigFile {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  82 |     pub fn load_from_env() -> super::ConfigFile {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub fn generate_template(template_type: ConfigTemplate) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     pub fn diff_configs(config1: &super::ConfigFile, config2: &super::ConfigFile) -> ConfigDiff {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ConfigTemplate` is never used
[INFO] [stdout]    --> src/config/utils.rs:236:10
[INFO] [stdout]     |
[INFO] [stdout] 236 | pub enum ConfigTemplate {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConfigDiff` is never constructed
[INFO] [stdout]    --> src/config/utils.rs:244:12
[INFO] [stdout]     |
[INFO] [stdout] 244 | pub struct ConfigDiff {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `has_changes` are never used
[INFO] [stdout]    --> src/config/utils.rs:253:12
[INFO] [stdout]     |
[INFO] [stdout] 252 | impl ConfigDiff {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 253 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 263 |     pub fn has_changes(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConfigValidatorImpl` is never constructed
[INFO] [stdout]  --> src/config/validator.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct ConfigValidatorImpl;
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_valid_cron` is never used
[INFO] [stdout]    --> src/config/validator.rs:124:4
[INFO] [stdout]     |
[INFO] [stdout] 124 | fn is_valid_cron(expr: &str) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AuditOperation` is never constructed
[INFO] [stdout]  --> src/core/audit.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct AuditOperation {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `OperationType` is never used
[INFO] [stdout]   --> src/core/audit.rs:23:10
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub enum OperationType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AuditFilter` is never constructed
[INFO] [stdout]   --> src/core/audit.rs:41:12
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub struct AuditFilter {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DatabaseAuditLogger` is never constructed
[INFO] [stdout]   --> src/core/audit.rs:52:12
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct DatabaseAuditLogger {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/core/audit.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 56 | impl DatabaseAuditLogger {
[INFO] [stdout]    | ------------------------ associated function in this implementation
[INFO] [stdout] 57 |     pub fn new(db_path: &std::path::Path) -> Result<Self> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HealthCheckerImpl` is never constructed
[INFO] [stdout]  --> src/core/health.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct HealthCheckerImpl {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/core/health.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | impl HealthCheckerImpl {
[INFO] [stdout]    | ---------------------- associated function in this implementation
[INFO] [stdout] 12 |     pub fn new(providers: HashMap<String, Box<dyn crate::providers::StorageProvider>>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TempStorageHealth` is never constructed
[INFO] [stdout]   --> src/core/health.rs:18:8
[INFO] [stdout]    |
[INFO] [stdout] 18 | struct TempStorageHealth {}
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `HealthStatus` is never used
[INFO] [stdout]    --> src/core/health.rs:112:10
[INFO] [stdout]     |
[INFO] [stdout] 112 | pub enum HealthStatus {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StorageHealth` is never constructed
[INFO] [stdout]    --> src/core/health.rs:131:12
[INFO] [stdout]     |
[INFO] [stdout] 131 | pub struct StorageHealth {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LocalStorageHealth` is never constructed
[INFO] [stdout]    --> src/core/health.rs:139:12
[INFO] [stdout]     |
[INFO] [stdout] 139 | pub struct LocalStorageHealth {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DatabaseHealth` is never constructed
[INFO] [stdout]    --> src/core/health.rs:148:12
[INFO] [stdout]     |
[INFO] [stdout] 148 | pub struct DatabaseHealth {}
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConnectivityStatus` is never constructed
[INFO] [stdout]    --> src/core/health.rs:151:12
[INFO] [stdout]     |
[INFO] [stdout] 151 | pub struct ConnectivityStatus {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConnectivityTest` is never constructed
[INFO] [stdout]    --> src/core/health.rs:159:12
[INFO] [stdout]     |
[INFO] [stdout] 159 | pub struct ConnectivityTest {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Protocol` is never used
[INFO] [stdout]    --> src/core/health.rs:169:10
[INFO] [stdout]     |
[INFO] [stdout] 169 | pub enum Protocol {
[INFO] [stdout]     |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `semaphore` is never read
[INFO] [stdout]   --> src/core/rate_limit.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct TokenBucketRateLimiter {
[INFO] [stdout]    |            ---------------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 15 |     semaphore: Arc<Semaphore>,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MemoryHandle` is never constructed
[INFO] [stdout]   --> src/core/resources.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct MemoryHandle {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `id`, `size`, `allocated_at`, and `age` are never used
[INFO] [stdout]   --> src/core/resources.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | impl MemoryHandle {
[INFO] [stdout]    | ----------------- associated items in this implementation
[INFO] [stdout] 19 |     pub fn new(id: String, size: usize) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub fn id(&self) -> &str {
[INFO] [stdout]    |            ^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn size(&self) -> usize {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 35 |     pub fn allocated_at(&self) -> Instant {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     pub fn age(&self) -> Duration {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DiskHandle` is never constructed
[INFO] [stdout]   --> src/core/resources.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub struct DiskHandle {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/core/resources.rs:55:12
[INFO] [stdout]    |
[INFO] [stdout] 54 | impl DiskHandle {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 55 |     pub fn new(id: String, path: std::path::PathBuf, size: u64, is_temporary: bool) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub fn id(&self) -> &str {
[INFO] [stdout]    |            ^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub fn path(&self) -> &std::path::Path {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub fn size(&self) -> u64 {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 77 |     pub fn is_temporary(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub fn allocated_at(&self) -> Instant {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub fn age(&self) -> Duration {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 90 |     pub fn cleanup(&self) -> Result<()> {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ResourceUsage` is never constructed
[INFO] [stdout]    --> src/core/resources.rs:104:12
[INFO] [stdout]     |
[INFO] [stdout] 104 | pub struct ResourceUsage {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `update_from_system`, `is_overloaded`, and `to_string` are never used
[INFO] [stdout]    --> src/core/resources.rs:128:12
[INFO] [stdout]     |
[INFO] [stdout] 127 | impl ResourceUsage {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] 128 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 153 |     pub fn update_from_system(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 200 |     pub fn is_overloaded(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 227 |     pub fn to_string(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ResourceLimits` is never constructed
[INFO] [stdout]    --> src/core/resources.rs:241:12
[INFO] [stdout]     |
[INFO] [stdout] 241 | pub struct ResourceLimits {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `default` and `validate` are never used
[INFO] [stdout]    --> src/core/resources.rs:254:12
[INFO] [stdout]     |
[INFO] [stdout] 253 | impl ResourceLimits {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 254 |     pub fn default() -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 268 |     pub fn validate(&self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ResourceManagerImpl` is never constructed
[INFO] [stdout]    --> src/core/resources.rs:298:12
[INFO] [stdout]     |
[INFO] [stdout] 298 | pub struct ResourceManagerImpl {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/core/resources.rs:309:12
[INFO] [stdout]     |
[INFO] [stdout] 308 | impl ResourceManagerImpl {
[INFO] [stdout]     | ------------------------ associated items in this implementation
[INFO] [stdout] 309 |     pub fn new(limits: ResourceLimits) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 323 |     pub fn allocate_memory(&self, size: usize) -> Result<MemoryHandle> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 354 |     pub fn allocate_disk(&self, size: u64) -> Result<DiskHandle> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 400 |     pub fn deallocate_memory(&self, handle_id: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 416 |     pub fn deallocate_disk(&self, handle_id: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 436 |     pub fn current_usage(&self) -> ResourceUsage {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 464 |     pub fn set_limits(&self, limits: ResourceLimits) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 469 |     pub fn start_task(&self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 485 |     pub fn end_task(&self) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 489 |     pub fn cleanup_old_resources(&self, max_age: Duration) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ExponentialBackoffRetry` is never constructed
[INFO] [stdout]  --> src/core/retry.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct ExponentialBackoffRetry {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `new` and `builder` are never used
[INFO] [stdout]   --> src/core/retry.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl ExponentialBackoffRetry {
[INFO] [stdout]    | ---------------------------- associated functions in this implementation
[INFO] [stdout] 15 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn builder() -> ExponentialBackoffRetryBuilder {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ExponentialBackoffRetryBuilder` is never constructed
[INFO] [stdout]   --> src/core/retry.rs:63:12
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct ExponentialBackoffRetryBuilder {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/core/retry.rs:72:12
[INFO] [stdout]     |
[INFO] [stdout]  71 | impl ExponentialBackoffRetryBuilder {
[INFO] [stdout]     | ----------------------------------- associated items in this implementation
[INFO] [stdout]  72 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  82 |     pub fn max_attempts(mut self, attempts: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     pub fn initial_delay(mut self, delay: Duration) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  92 |     pub fn max_delay(mut self, delay: Duration) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn backoff_factor(mut self, factor: f64) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub fn retryable_error(mut self, error_code: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub fn build(self) -> ExponentialBackoffRetry {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `JitterRetry` is never constructed
[INFO] [stdout]    --> src/core/retry.rs:119:12
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub struct JitterRetry {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `add_jitter` are never used
[INFO] [stdout]    --> src/core/retry.rs:125:12
[INFO] [stdout]     |
[INFO] [stdout] 124 | impl JitterRetry {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] 125 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     fn add_jitter(&self, delay: Duration) -> Duration {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ScheduledTask` is never constructed
[INFO] [stdout]   --> src/core/scheduler.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct ScheduledTask {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/core/scheduler.rs:60:12
[INFO] [stdout]     |
[INFO] [stdout]  59 | impl ScheduledTask {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout]  60 |     pub fn new(sync_task: &SyncTask, schedule: Schedule) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn calculate_next_run(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn update_statistics(&mut self, duration: Duration, success: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 133 |     pub fn should_run_now(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub fn get_status(&self) -> TaskStatus {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 155 |     pub fn get_health(&self) -> TaskHealth {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 177 |     pub fn format_next_run(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 200 |     pub fn enable(&mut self) {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 206 |     pub fn disable(&mut self) {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 212 |     pub fn retry(&mut self) -> bool {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TaskResult` is never constructed
[INFO] [stdout]    --> src/core/scheduler.rs:225:12
[INFO] [stdout]     |
[INFO] [stdout] 225 | pub struct TaskResult {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `TaskStatus` is never used
[INFO] [stdout]    --> src/core/scheduler.rs:233:10
[INFO] [stdout]     |
[INFO] [stdout] 233 | pub enum TaskStatus {
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `TaskHealth` is never used
[INFO] [stdout]    --> src/core/scheduler.rs:250:10
[INFO] [stdout]     |
[INFO] [stdout] 250 | pub enum TaskHealth {
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SchedulerManager` is never constructed
[INFO] [stdout]    --> src/core/scheduler.rs:262:12
[INFO] [stdout]     |
[INFO] [stdout] 262 | pub struct SchedulerManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/core/scheduler.rs:270:18
[INFO] [stdout]     |
[INFO] [stdout] 269 | impl SchedulerManager {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] 270 |     pub async fn new(sync_engine: SyncEngine) -> Result<Self> {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 285 |     pub async fn add_task(&self, mut scheduled_task: ScheduledTask) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 309 |     async fn schedule_job(&self, scheduled_task: &ScheduledTask) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 367 |     async fn execute_task(
[INFO] [stdout]     |              ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 433 |     pub async fn start(&self) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 440 |     pub async fn stop(&mut self) -> Result<()> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 447 |     pub async fn get_tasks(&self) -> Vec<ScheduledTask> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 452 |     pub async fn get_task(&self, task_id: &str) -> Option<ScheduledTask> {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 458 |     pub async fn delete_task(&self, task_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 469 |     pub async fn trigger_task(&self, task_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 506 |     pub async fn pause_task(&self, task_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 517 |     pub async fn resume_task(&self, task_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 528 |     pub async fn reschedule_all(&mut self) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 554 |     pub async fn get_stats(&self) -> SchedulerStats {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 584 |     pub async fn cleanup_completed_tasks(&self, max_age_days: u32) -> Result<usize> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 604 |     pub async fn export_tasks(&self, format: ExportFormat) -> Result<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 618 |     pub async fn import_tasks(&self, data: &str, format: ExportFormat) -> Result<usize> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 640 |     fn tasks_to_csv(tasks: &[ScheduledTask]) -> Result<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SchedulerStats` is never constructed
[INFO] [stdout]    --> src/core/scheduler.rs:671:12
[INFO] [stdout]     |
[INFO] [stdout] 671 | pub struct SchedulerStats {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `success_rate`, and `health_score` are never used
[INFO] [stdout]    --> src/core/scheduler.rs:705:12
[INFO] [stdout]     |
[INFO] [stdout] 704 | impl SchedulerStats {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 705 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 725 |     pub fn success_rate(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 733 |     pub fn health_score(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ExportFormat` is never used
[INFO] [stdout]    --> src/core/scheduler.rs:751:10
[INFO] [stdout]     |
[INFO] [stdout] 751 | pub enum ExportFormat {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CsvTask` is never constructed
[INFO] [stdout]    --> src/core/scheduler.rs:759:8
[INFO] [stdout]     |
[INFO] [stdout] 759 | struct CsvTask<'a> {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TaskNotifier` is never constructed
[INFO] [stdout]    --> src/core/scheduler.rs:773:12
[INFO] [stdout]     |
[INFO] [stdout] 773 | pub struct TaskNotifier {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/core/scheduler.rs:779:12
[INFO] [stdout]     |
[INFO] [stdout] 778 | impl TaskNotifier {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout] 779 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 787 |     pub async fn notify_task_start(&self, task: &ScheduledTask) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 799 |     pub async fn notify_task_complete(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 819 |     pub async fn notify_task_failed(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 838 |     async fn send_notification(&self, message: &str) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 852 |     async fn send_email(&self, config: &EmailConfig, message: &str) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 858 |     async fn send_webhook(&self, url: &str, message: &str) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EmailConfig` is never constructed
[INFO] [stdout]    --> src/core/scheduler.rs:873:12
[INFO] [stdout]     |
[INFO] [stdout] 873 | pub struct EmailConfig {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cmd_schedule_task` is never used
[INFO] [stdout]    --> src/core/scheduler.rs:883:14
[INFO] [stdout]     |
[INFO] [stdout] 883 | pub async fn cmd_schedule_task(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cmd_list_scheduled_tasks` is never used
[INFO] [stdout]    --> src/core/scheduler.rs:922:14
[INFO] [stdout]     |
[INFO] [stdout] 922 | pub async fn cmd_list_scheduled_tasks(scheduler: &SchedulerManager) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `StateManager` is never used
[INFO] [stdout]   --> src/core/traits.rs:14:11
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub trait StateManager: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `ProgressReporter` is never used
[INFO] [stdout]   --> src/core/traits.rs:22:11
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub trait ProgressReporter: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `RetryStrategy` is never used
[INFO] [stdout]   --> src/core/traits.rs:31:11
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub trait RetryStrategy: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `current_rate` and `set_rate` are never used
[INFO] [stdout]   --> src/core/traits.rs:44:8
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub trait RateLimiter: Send + Sync {
[INFO] [stdout]    |           ----------- methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 44 |     fn current_rate(&self) -> f64; // 请求/秒
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 45 |     fn set_rate(&mut self, requests_per_second: f64);
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `ChecksumCalculator` is never used
[INFO] [stdout]   --> src/core/traits.rs:50:11
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub trait ChecksumCalculator: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `DiffDetector` is never used
[INFO] [stdout]   --> src/core/traits.rs:57:11
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub trait DiffDetector: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `FileFilter` is never used
[INFO] [stdout]   --> src/core/traits.rs:69:11
[INFO] [stdout]    |
[INFO] [stdout] 69 | pub trait FileFilter: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `TaskScheduler` is never used
[INFO] [stdout]   --> src/core/traits.rs:76:11
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub trait TaskScheduler: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `Notifier` is never used
[INFO] [stdout]   --> src/core/traits.rs:84:11
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub trait Notifier: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `AuditLogger` is never used
[INFO] [stdout]   --> src/core/traits.rs:92:11
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub trait AuditLogger: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `ConfigValidator` is never used
[INFO] [stdout]    --> src/core/traits.rs:102:11
[INFO] [stdout]     |
[INFO] [stdout] 102 | pub trait ConfigValidator: Send + Sync {
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `HealthChecker` is never used
[INFO] [stdout]    --> src/core/traits.rs:110:11
[INFO] [stdout]     |
[INFO] [stdout] 110 | pub trait HealthChecker: Send + Sync {
[INFO] [stdout]     |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `ResourceManager` is never used
[INFO] [stdout]    --> src/core/traits.rs:117:11
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub trait ResourceManager: Send + Sync {
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `Plugin` is never used
[INFO] [stdout]    --> src/core/traits.rs:126:11
[INFO] [stdout]     |
[INFO] [stdout] 126 | pub trait Plugin: Send + Sync {
[INFO] [stdout]     |           ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `HookHandler` is never used
[INFO] [stdout]    --> src/core/traits.rs:139:11
[INFO] [stdout]     |
[INFO] [stdout] 139 | pub trait HookHandler: Send + Sync {
[INFO] [stdout]     |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TransferStats` is never constructed
[INFO] [stdout]    --> src/core/traits.rs:149:12
[INFO] [stdout]     |
[INFO] [stdout] 149 | pub struct TransferStats {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FileMetadata` is never constructed
[INFO] [stdout]    --> src/core/traits.rs:164:12
[INFO] [stdout]     |
[INFO] [stdout] 164 | pub struct FileMetadata {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FileChange` is never used
[INFO] [stdout]    --> src/core/traits.rs:178:10
[INFO] [stdout]     |
[INFO] [stdout] 178 | pub enum FileChange {
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DiffOptions` is never constructed
[INFO] [stdout]    --> src/core/traits.rs:194:12
[INFO] [stdout]     |
[INFO] [stdout] 194 | pub struct DiffOptions {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProgressUpdate` is never constructed
[INFO] [stdout]    --> src/core/traits.rs:205:12
[INFO] [stdout]     |
[INFO] [stdout] 205 | pub struct ProgressUpdate {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `algorithm` and `nonce` are never read
[INFO] [stdout]   --> src/encryption/mod.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct EncryptionMetadata {
[INFO] [stdout]    |            ------------------ fields in this struct
[INFO] [stdout] 17 |     pub algorithm: EncryptionAlgorithm,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 18 |     pub key_id: String,
[INFO] [stdout] 19 |     pub nonce: Vec<u8>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `key_size`, `iv_size`, `tag_size`, and `recommended_iv_mode` are never used
[INFO] [stdout]   --> src/encryption/types.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | impl EncryptionAlgorithm {
[INFO] [stdout]    | ------------------------ methods in this implementation
[INFO] [stdout] 21 |     pub fn key_size(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn iv_size(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub fn tag_size(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 51 |     pub fn recommended_iv_mode(&self) -> IvMode {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `requires_unique_per_file`, `generate_iv`, `generate_random_iv`, `generate_derived_iv`, `generate_counter_iv`, and `generate_file_offset_iv` are never used
[INFO] [stdout]    --> src/encryption/types.rs:77:12
[INFO] [stdout]     |
[INFO] [stdout]  76 | impl IvMode {
[INFO] [stdout]     | ----------- methods in this implementation
[INFO] [stdout]  77 |     pub fn requires_unique_per_file(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     pub fn generate_iv(&self, context: &IvContext) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     fn generate_random_iv(&self, size: usize) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 105 |     fn generate_derived_iv(&self, context: &IvContext) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     fn generate_counter_iv(&self, context: &IvContext) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 139 |     fn generate_file_offset_iv(&self, context: &IvContext) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `IvContext` is never constructed
[INFO] [stdout]    --> src/encryption/types.rs:154:12
[INFO] [stdout]     |
[INFO] [stdout] 154 | pub struct IvContext {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> src/error/mod.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub enum SyncError {
[INFO] [stdout]    |          --------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 35 |     Validation(String),
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 38 |     Timeout(String),
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     RateLimitExceeded(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     AuthenticationFailed(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     PermissionDenied(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     FileNotFound(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     ResourceExhausted(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 56 |     Conflict(String),
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     IntegrityCheckFailed(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     RetryLimitExceeded(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     OperationCanceled,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     Unsupported(String),
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SyncError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `FileNotFound`, `ReadFailed`, `ParseFailed`, `MissingField`, and `Invalid` are never constructed
[INFO] [stdout]   --> src/error/mod.rs:77:5
[INFO] [stdout]    |
[INFO] [stdout] 75 | pub enum ConfigError {
[INFO] [stdout]    |          ----------- variants in this enum
[INFO] [stdout] 76 |     #[error("Configuration file not found: {0}")]
[INFO] [stdout] 77 |     FileNotFound(PathBuf),
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 80 |     ReadFailed(#[source] IoError),
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 83 |     ParseFailed(String),
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 86 |     MissingField(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 89 |     Invalid(String),
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ConfigError` 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/mod.rs:101:5
[INFO] [stdout]     |
[INFO] [stdout]  96 | pub enum ProviderError {
[INFO] [stdout]     |          ------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 101 |     NotSupported(String),
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     InvalidCredentials(String),
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |     QuotaExceeded(String),
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     RateLimited(String),
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 116 |     AuthFailed(String),
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     Timeout(String),
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     PermissionDenied(String),
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ProviderError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `InvalidKey`, `InvalidIV`, and `UnsupportedAlgorithm` are never constructed
[INFO] [stdout]    --> src/error/mod.rs:140:5
[INFO] [stdout]     |
[INFO] [stdout] 135 | pub enum EncryptionError {
[INFO] [stdout]     |          --------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 140 |     InvalidKey(String),
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 149 |     InvalidIV,
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 158 |     UnsupportedAlgorithm(String),
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `EncryptionError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Full`, `NotAvailable`, `Timeout`, `Corruption`, and `VersionMismatch` are never constructed
[INFO] [stdout]    --> src/error/mod.rs:164:5
[INFO] [stdout]     |
[INFO] [stdout] 162 | pub enum StorageError {
[INFO] [stdout]     |          ------------ variants in this enum
[INFO] [stdout] 163 |     #[error("Storage full: {0}")]
[INFO] [stdout] 164 |     Full(String),
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 167 |     NotAvailable(String),
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     Timeout(String),
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 173 |     Corruption(String),
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     VersionMismatch(String),
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `StorageError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `is_retryable`, `is_fatal`, and `error_code` are never used
[INFO] [stdout]    --> src/error/mod.rs:181:12
[INFO] [stdout]     |
[INFO] [stdout] 180 | impl SyncError {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] 181 |     pub fn is_retryable(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 194 |     pub fn is_fatal(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 207 |     pub fn error_code(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `ConfigResult` is never used
[INFO] [stdout]    --> src/error/mod.rs:236:10
[INFO] [stdout]     |
[INFO] [stdout] 236 | pub type ConfigResult<T> = std::result::Result<T, ConfigError>;
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `ProviderResult` is never used
[INFO] [stdout]    --> src/error/mod.rs:237:10
[INFO] [stdout]     |
[INFO] [stdout] 237 | pub type ProviderResult<T> = std::result::Result<T, ProviderError>;
[INFO] [stdout]     |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `EncryptionResult` is never used
[INFO] [stdout]    --> src/error/mod.rs:238:10
[INFO] [stdout]     |
[INFO] [stdout] 238 | pub type EncryptionResult<T> = std::result::Result<T, EncryptionError>;
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FileMetadata` is never constructed
[INFO] [stdout]  --> src/plugins/mod.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct FileMetadata {
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `PluginHook` is never used
[INFO] [stdout]  --> src/plugins/hooks.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub enum PluginHook {
[INFO] [stdout]   |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `HookPriority` is never used
[INFO] [stdout]   --> src/plugins/hooks.rs:43:10
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub enum HookPriority {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `name`, `priority`, and `set_priority` are never used
[INFO] [stdout]   --> src/plugins/hooks.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 56 | impl PluginHook {
[INFO] [stdout]    | --------------- methods in this implementation
[INFO] [stdout] 57 |     pub fn name(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 71 |     pub fn priority(&self) -> HookPriority {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub fn set_priority(&mut self, priority: HookPriority) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HookContext` is never constructed
[INFO] [stdout]    --> src/plugins/hooks.rs:101:12
[INFO] [stdout]     |
[INFO] [stdout] 101 | pub struct HookContext {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/plugins/hooks.rs:110:12
[INFO] [stdout]     |
[INFO] [stdout] 109 | impl HookContext {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] 110 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub fn with_task(mut self, task: SyncTask) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     pub fn with_report(mut self, report: SyncReport) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     pub fn with_file(mut self, file: FileMetadata) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     pub fn with_error(mut self, error: SyncError) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 140 |     pub fn set_custom_data(&mut self, key: String, value: serde_json::Value) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub fn get_custom_data(&self, key: &str) -> Option<&serde_json::Value> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `HookHandler` is never used
[INFO] [stdout]    --> src/plugins/hooks.rs:150:11
[INFO] [stdout]     |
[INFO] [stdout] 150 | pub trait HookHandler: Send + Sync {
[INFO] [stdout]     |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HookManager` is never constructed
[INFO] [stdout]  --> src/plugins/manager.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct HookManager {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `register_handler`, `execute_hook`, and `all_hook_types` are never used
[INFO] [stdout]   --> src/plugins/manager.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | impl HookManager {
[INFO] [stdout]    | ---------------- associated items in this implementation
[INFO] [stdout] 13 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     pub fn register_handler(&mut self, handler: Box<dyn HookHandler>) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 28 |     pub async fn execute_hook(&self, hook: PluginHook, context: &mut HookContext) -> Result<()> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     fn all_hook_types() -> Vec<&'static str> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LoggingPlugin` is never constructed
[INFO] [stdout]   --> src/plugins/manager.rs:55:12
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub struct LoggingPlugin {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/plugins/manager.rs:62:12
[INFO] [stdout]    |
[INFO] [stdout] 61 | impl LoggingPlugin {
[INFO] [stdout]    | ------------------ associated function in this implementation
[INFO] [stdout] 62 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `stat` and `exists` are never used
[INFO] [stdout]   --> src/providers/mod.rs:28:14
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub trait StorageProvider: Send + Sync {
[INFO] [stdout]    |           --------------- methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 28 |     async fn stat(&self, path: &str) -> Result<FileInfo, SyncError>;
[INFO] [stdout]    |              ^^^^
[INFO] [stdout] 29 |     async fn exists(&self, path: &str) -> Result<bool, SyncError>;
[INFO] [stdout]    |              ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_provider` is never used
[INFO] [stdout]   --> src/providers/mod.rs:32:14
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub async fn create_provider(
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `bytes_uploaded`, `checksum`, and `elapsed_time` are never read
[INFO] [stdout]   --> src/providers/mod.rs:59:9
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub struct UploadResult {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 59 |     pub bytes_uploaded: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 60 |     pub file_size: u64,
[INFO] [stdout] 61 |     pub checksum: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 62 |     pub elapsed_time: Duration,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `UploadResult` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `bytes_downloaded`, `checksum`, and `elapsed_time` are never read
[INFO] [stdout]   --> src/providers/mod.rs:67:9
[INFO] [stdout]    |
[INFO] [stdout] 66 | pub struct DownloadResult {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] 67 |     pub bytes_downloaded: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 68 |     pub file_size: u64,
[INFO] [stdout] 69 |     pub checksum: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 70 |     pub elapsed_time: Duration,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DownloadResult` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RateLimitedProvider` is never constructed
[INFO] [stdout]   --> src/providers/mod.rs:73:12
[INFO] [stdout]    |
[INFO] [stdout] 73 | pub struct RateLimitedProvider<T> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/providers/mod.rs:79:12
[INFO] [stdout]    |
[INFO] [stdout] 78 | impl<T: StorageProvider> RateLimitedProvider<T> {
[INFO] [stdout]    | ----------------------------------------------- associated function in this implementation
[INFO] [stdout] 79 |     pub fn new(inner: T, config: RateLimitConfig) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `client`, `token`, `refresh_token`, and `rate_limiter` are never read
[INFO] [stdout]   --> src/providers/aliyun.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct AliYunDriveProvider {
[INFO] [stdout]    |            ------------------- fields in this struct
[INFO] [stdout] 14 |     client: reqwest::Client,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 15 |     token: String,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 16 |     refresh_token: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 17 |     rate_limiter: Arc<dyn RateLimiter>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `refresh_token_if_needed` is never used
[INFO] [stdout]   --> src/providers/aliyun.rs:43:14
[INFO] [stdout]    |
[INFO] [stdout] 20 | impl AliYunDriveProvider {
[INFO] [stdout]    | ------------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 43 |     async fn refresh_token_if_needed(&mut self) -> Result<(), ProviderError> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `generate_html`, `generate_file_rows`, `generate_error_list`, and `generate_json` are never used
[INFO] [stdout]    --> src/report/mod.rs:74:12
[INFO] [stdout]     |
[INFO] [stdout]  60 | impl SyncReport {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  74 |     pub fn generate_html(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 152 |     fn generate_file_rows(&self) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 166 |     fn generate_error_list(&self) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 174 |     pub fn generate_json(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `as_str`, `emoji`, `is_completed`, `is_successful`, `can_retry`, and `is_active` are never used
[INFO] [stdout]    --> src/report/mod.rs:207:12
[INFO] [stdout]     |
[INFO] [stdout] 206 | impl SyncStatus {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] 207 |     pub fn as_str(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 222 |     pub fn emoji(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 237 |     pub fn is_completed(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 244 |     pub fn is_successful(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 248 |     pub fn can_retry(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 252 |     pub fn is_active(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/report/mod.rs:346:12
[INFO] [stdout]     |
[INFO] [stdout] 315 | impl FileSyncResult {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 346 |     pub fn from_diff(diff: &FileDiff, operation: FileOperation) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 380 |     pub fn mark_started(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 385 |     pub fn mark_completed(&mut self, success: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 406 |     pub fn mark_retry(&mut self, error: Option<String>) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 413 |     pub fn mark_verifying(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 417 |     pub fn mark_verified(&mut self, verified: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 426 |     pub fn add_warning(&mut self, warning: String) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 438 |     pub fn is_completed(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 447 |     pub fn human_readable_size(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 451 |     pub fn human_readable_transferred(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 455 |     pub fn human_readable_speed(&self) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 467 |     pub fn summary(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 487 |     pub fn detailed_info(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 554 |     pub fn to_json(&self) -> Result<String, serde_json::Error> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 558 |     pub fn from_json(json: &str) -> Result<Self, serde_json::Error> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `as_str`, `emoji`, `is_completed`, `is_successful`, and `can_retry` are never used
[INFO] [stdout]    --> src/report/mod.rs:593:12
[INFO] [stdout]     |
[INFO] [stdout] 592 | impl FileSyncStatus {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] 593 |     pub fn as_str(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 610 |     pub fn emoji(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 627 |     pub fn is_completed(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 634 |     pub fn is_successful(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 638 |     pub fn can_retry(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_extension`, `from_path`, `from_metadata`, `from_mime_type`, `is_compressible`, and `is_binary` are never used
[INFO] [stdout]    --> src/report/mod.rs:775:12
[INFO] [stdout]     |
[INFO] [stdout] 774 | impl FileType {
[INFO] [stdout]     | ------------- associated items in this implementation
[INFO] [stdout] 775 |     pub fn from_extension(extension: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 800 |     pub fn from_path(path: &Path) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 812 |     pub fn from_metadata(metadata: &crate::sync::diff::FileMetadata) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 826 |     pub fn from_mime_type(mime_type: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 895 |     pub fn is_compressible(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 908 |     pub fn is_binary(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `update_speed_metrics` are never used
[INFO] [stdout]     --> src/report/mod.rs:966:12
[INFO] [stdout]      |
[INFO] [stdout]  965 | impl SyncStatistics {
[INFO] [stdout]      | ------------------- associated items in this implementation
[INFO] [stdout]  966 |     pub fn new() -> Self {
[INFO] [stdout]      |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 1040 |     pub fn update_speed_metrics(&mut self, speed: f64) {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `success_rate` is never used
[INFO] [stdout]     --> src/report/mod.rs:1281:12
[INFO] [stdout]      |
[INFO] [stdout] 1244 | impl FileTypeStats {
[INFO] [stdout]      | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 1281 |     pub fn success_rate(&self) -> f64 {
[INFO] [stdout]      |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VerificationResult` is never constructed
[INFO] [stdout]  --> src/sync/mod.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct VerificationResult {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ErrorResult` is never constructed
[INFO] [stdout]   --> src/sync/mod.rs:12:8
[INFO] [stdout]    |
[INFO] [stdout] 12 | struct ErrorResult {}
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `as_str`, `emoji`, `is_destructive`, and `requires_user_action` are never used
[INFO] [stdout]   --> src/sync/diff.rs:31:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | impl DiffAction {
[INFO] [stdout]    | --------------- methods in this implementation
[INFO] [stdout] 31 |     pub fn as_str(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub fn emoji(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     pub fn is_destructive(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub fn requires_user_action(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/sync/diff.rs:157:12
[INFO] [stdout]     |
[INFO] [stdout] 115 | impl FileDiff {
[INFO] [stdout]     | ------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 157 |     pub fn download(
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 169 |     pub fn conflict(path: String, source_info: FileMetadata, target_info: FileMetadata) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     pub fn create_dir(path: String, source_info: FileMetadata) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 202 |     pub fn move_file(
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 269 |     pub fn calculate_similarity(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 289 |     pub fn is_similar(&self, threshold: f64) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 293 |     pub fn should_retry(&self, max_retries: u32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 297 |     pub fn mark_retry(&mut self, error: Option<String>) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 303 |     pub fn mark_success(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 309 |     pub fn is_expired(&self, timeout: Duration) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 335 |     pub fn human_readable_size(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 339 |     pub fn summary(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 361 |     pub fn to_json(&self) -> Result<String> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 366 |     pub fn from_json(json: &str) -> Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 370 |     pub fn is_encrypted(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 380 |     pub fn requires_decryption(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `calculate_hash` and `update_metadata_hash` are never used
[INFO] [stdout]    --> src/sync/diff.rs:484:12
[INFO] [stdout]     |
[INFO] [stdout] 409 | impl FileMetadata {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 484 |     pub fn calculate_hash(&mut self, algorithm: ChecksumType) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 512 |     pub fn update_metadata_hash(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `hash_size` and `recommended` are never used
[INFO] [stdout]    --> src/sync/diff.rs:614:12
[INFO] [stdout]     |
[INFO] [stdout] 613 | impl ChecksumType {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout] 614 |     pub fn hash_size(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 626 |     pub fn recommended() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/sync/diff.rs:710:12
[INFO] [stdout]     |
[INFO] [stdout] 660 | impl DiffResult {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 710 |     pub fn sort_by_priority(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 714 |     pub fn filter_by_action(&self, action: DiffAction) -> Vec<&FileDiff> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 721 |     pub fn filter_by_tag(&self, tag: &str) -> Vec<&FileDiff> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 728 |     pub fn find_by_path(&self, path: &str) -> Option<&FileDiff> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 732 |     pub fn has_conflicts(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 736 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 751 |     pub fn to_json(&self) -> Result<String> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 756 |     pub fn to_csv(&self) -> Result<String> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `finalize` and `human_readable` are never used
[INFO] [stdout]    --> src/sync/diff.rs:835:12
[INFO] [stdout]     |
[INFO] [stdout] 798 | impl DiffStats {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 835 |     pub fn finalize(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 843 |     pub fn human_readable(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CsvDiff` is never constructed
[INFO] [stdout]    --> src/sync/diff.rs:855:8
[INFO] [stdout]     |
[INFO] [stdout] 855 | struct CsvDiff<'a> {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DiffDetector` is never constructed
[INFO] [stdout]    --> src/sync/diff.rs:868:12
[INFO] [stdout]     |
[INFO] [stdout] 868 | pub struct DiffDetector {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]     --> src/sync/diff.rs:874:12
[INFO] [stdout]      |
[INFO] [stdout]  873 | impl DiffDetector {
[INFO] [stdout]      | ----------------- associated items in this implementation
[INFO] [stdout]  874 |     pub fn new(options: DiffOptions) -> Self {
[INFO] [stdout]      |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  881 |     pub async fn detect_changes(
[INFO] [stdout]      |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  945 |     fn is_file_changed(&self, source: &FileMetadata, target: &FileMetadata) -> bool {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  968 |     fn create_file_diff(&self, source: &FileMetadata, target: Option<&FileMetadata>) -> FileDiff {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  983 |     fn analyze_changes(&self, diff: &mut FileDiff) {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1011 |     fn detect_moves(&self, result: &mut DiffResult) {
[INFO] [stdout]      |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1050 |     fn detect_conflicts(&self, result: &mut DiffResult) {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1084 |     fn calculate_file_similarity(&self, file1: &FileMetadata, file2: &FileMetadata) -> f64 {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1118 |     fn update_cache(&mut self, files: &[FileMetadata]) {
[INFO] [stdout]      |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DiffOptions` is never constructed
[INFO] [stdout]     --> src/sync/diff.rs:1128:12
[INFO] [stdout]      |
[INFO] [stdout] 1128 | pub struct DiffOptions {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `diff_cache` is never read
[INFO] [stdout]   --> src/sync/engine.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct SyncEngine {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 19 |     diff_cache: DashMap<String, FileDiff>,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `sync` is never used
[INFO] [stdout]    --> src/sync/engine.rs:116:18
[INFO] [stdout]     |
[INFO] [stdout]  25 | impl SyncEngine {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 116 |     pub async fn sync(&mut self, task: &SyncTask) -> Result<SyncReport, SyncError> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `speed` is never read
[INFO] [stdout]    --> src/sync/engine.rs:392:9
[INFO] [stdout]     |
[INFO] [stdout] 386 | pub struct SyncProgress {
[INFO] [stdout]     |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 392 |     pub speed: f64,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 09s
[INFO] running `Command { std: "docker" "inspect" "8f895edbc40eed2d97ae872b0564ddbd4985d78b13c64f029286f406b9436c36", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "8f895edbc40eed2d97ae872b0564ddbd4985d78b13c64f029286f406b9436c36", kill_on_drop: false }`
[INFO] [stdout] 8f895edbc40eed2d97ae872b0564ddbd4985d78b13c64f029286f406b9436c36
