[INFO] fetching crate cloud-disk-sync 0.1.0...
[INFO] checking cloud-disk-sync-0.1.0 against a5689b034ad287112f709693384a37f1377eb9cc for pr-129249-3
[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 a5689b034ad287112f709693384a37f1377eb9cc
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+a5689b034ad287112f709693384a37f1377eb9cc" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate 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" "+a5689b034ad287112f709693384a37f1377eb9cc" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr] warning: Cargo.toml: 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] warning: `cloud-disk-sync` (manifest) generated 1 warning
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:77db811e55d90add9212f6832c23229e3de5f1c1f9905e8cb07319ea15df73ac" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 136375f20fb044c4a310fbbd5c4ae3bf9f1dca4490572e0e44a3a287b669afda
[INFO] running `Command { std: "docker" "start" "136375f20fb044c4a310fbbd5c4ae3bf9f1dca4490572e0e44a3a287b669afda", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "136375f20fb044c4a310fbbd5c4ae3bf9f1dca4490572e0e44a3a287b669afda", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "136375f20fb044c4a310fbbd5c4ae3bf9f1dca4490572e0e44a3a287b669afda" "/opt/rustwide/cargo-home/bin/cargo" "+a5689b034ad287112f709693384a37f1377eb9cc" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "136375f20fb044c4a310fbbd5c4ae3bf9f1dca4490572e0e44a3a287b669afda", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-w" "/opt/rustwide/workdir" "--user" "0:0" "136375f20fb044c4a310fbbd5c4ae3bf9f1dca4490572e0e44a3a287b669afda" "/opt/rustwide/cargo-home/bin/cargo" "+a5689b034ad287112f709693384a37f1377eb9cc" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr] warning: Cargo.toml: 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] warning: `cloud-disk-sync` (manifest) generated 1 warning
[INFO] [stderr]    Compiling proc-macro2 v1.0.105
[INFO] [stderr]    Compiling unicode-ident v1.0.22
[INFO] [stderr]    Compiling quote v1.0.43
[INFO] [stderr]    Compiling libc v0.2.180
[INFO] [stderr]     Checking itoa v1.0.17
[INFO] [stderr]     Checking smallvec v1.15.1
[INFO] [stderr]    Compiling typenum v1.19.0
[INFO] [stderr]     Checking log v0.4.29
[INFO] [stderr]     Checking bytes v1.11.0
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]     Checking memchr v2.7.6
[INFO] [stderr]     Checking lock_api v0.4.14
[INFO] [stderr]    Compiling find-msvc-tools v0.1.7
[INFO] [stderr]     Checking bitflags v2.10.0
[INFO] [stderr]     Checking futures-sink v0.3.31
[INFO] [stderr]    Compiling strsim v0.11.1
[INFO] [stderr]    Compiling ident_case v1.0.1
[INFO] [stderr]     Checking foldhash v0.2.0
[INFO] [stderr]    Compiling cc v1.2.52
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]     Checking futures-channel v0.3.31
[INFO] [stderr]    Compiling pkg-config v0.3.32
[INFO] [stderr]     Checking futures-io v0.3.31
[INFO] [stderr]     Checking slab v0.4.11
[INFO] [stderr]    Compiling heck v0.5.0
[INFO] [stderr]     Checking hashbrown v0.16.1
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]     Checking ryu v1.0.22
[INFO] [stderr]     Checking litemap v0.8.1
[INFO] [stderr]     Checking writeable v0.6.2
[INFO] [stderr]     Checking tracing-core v0.1.36
[INFO] [stderr]    Compiling zerocopy v0.8.33
[INFO] [stderr]    Compiling icu_properties_data v2.1.2
[INFO] [stderr]    Compiling icu_normalizer_data v2.1.1
[INFO] [stderr]    Compiling rustversion v1.0.22
[INFO] [stderr]     Checking unicode-width v0.2.2
[INFO] [stderr]    Compiling fnv v1.0.7
[INFO] [stderr]    Compiling thiserror v2.0.17
[INFO] [stderr]    Compiling rustix v1.1.3
[INFO] [stderr]     Checking subtle v2.6.1
[INFO] [stderr]     Checking either v1.15.0
[INFO] [stderr]    Compiling signal-hook v0.3.18
[INFO] [stderr]     Checking linux-raw-sys v0.11.0
[INFO] [stderr]     Checking static_assertions v1.1.0
[INFO] [stderr]    Compiling indoc v2.0.7
[INFO] [stderr]     Checking http v1.4.0
[INFO] [stderr]    Compiling openssl v0.10.75
[INFO] [stderr]     Checking itertools v0.14.0
[INFO] [stderr]    Compiling unicode-segmentation v1.12.0
[INFO] [stderr]     Checking foreign-types-shared v0.1.1
[INFO] [stderr]    Compiling instability v0.3.11
[INFO] [stderr]    Compiling syn v2.0.114
[INFO] [stderr]     Checking http v0.2.12
[INFO] [stderr]     Checking lru v0.16.3
[INFO] [stderr]     Checking foreign-types v0.3.2
[INFO] [stderr]    Compiling zmij v1.0.14
[INFO] [stderr]     Checking utf8parse v0.2.2
[INFO] [stderr]     Checking castaway v0.2.4
[INFO] [stderr]     Checking compact_str v0.9.0
[INFO] [stderr]    Compiling native-tls v0.2.14
[INFO] [stderr]     Checking iana-time-zone v0.1.64
[INFO] [stderr]    Compiling convert_case v0.10.0
[INFO] [stderr]     Checking anstyle-parse v0.2.7
[INFO] [stderr]     Checking deranged v0.5.5
[INFO] [stderr]     Checking indexmap v2.13.0
[INFO] [stderr]     Checking time-core v0.1.7
[INFO] [stderr]     Checking http-body v1.0.1
[INFO] [stderr]     Checking num-conv v0.1.0
[INFO] [stderr]     Checking is_terminal_polyfill v1.70.2
[INFO] [stderr]     Checking num_threads v0.1.7
[INFO] [stderr]    Compiling litrs v1.0.0
[INFO] [stderr]     Checking openssl-probe v0.1.6
[INFO] [stderr]     Checking anstyle-query v1.1.5
[INFO] [stderr]     Checking anstyle v1.0.13
[INFO] [stderr]     Checking colorchoice v1.0.4
[INFO] [stderr]     Checking siphasher v1.0.1
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]     Checking errno v0.3.14
[INFO] [stderr]     Checking getrandom v0.2.17
[INFO] [stderr]     Checking generic-array v0.14.7
[INFO] [stderr]     Checking mio v1.1.1
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking socket2 v0.6.1
[INFO] [stderr]     Checking signal-hook-registry v1.4.8
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking getrandom v0.3.4
[INFO] [stderr]     Checking hybrid-array v0.4.5
[INFO] [stderr]    Compiling document-features v0.2.12
[INFO] [stderr]     Checking time v0.3.45
[INFO] [stderr]     Checking anstream v0.6.21
[INFO] [stderr]     Checking phf_shared v0.12.1
[INFO] [stderr]     Checking dirs-sys-next v0.1.2
[INFO] [stderr]     Checking block-buffer v0.10.4
[INFO] [stderr]     Checking inout v0.1.4
[INFO] [stderr]     Checking ppv-lite86 v0.2.21
[INFO] [stderr]     Checking line-clipping v0.3.5
[INFO] [stderr]     Checking sync_wrapper v1.0.2
[INFO] [stderr]     Checking crypto-common v0.1.7
[INFO] [stderr]     Checking crypto-common v0.2.0-rc.4
[INFO] [stderr]     Checking block-buffer v0.11.0-rc.5
[INFO] [stderr]     Checking regex-syntax v0.8.8
[INFO] [stderr]     Checking ipnet v2.11.0
[INFO] [stderr]    Compiling openssl-sys v0.9.111
[INFO] [stderr]    Compiling libsqlite3-sys v0.36.0
[INFO] [stderr]     Checking digest v0.10.7
[INFO] [stderr]     Checking cipher v0.4.4
[INFO] [stderr]     Checking universal-hash v0.5.1
[INFO] [stderr]     Checking zeroize v1.8.2
[INFO] [stderr]    Compiling chrono-tz v0.10.4
[INFO] [stderr]     Checking clap_lex v0.7.7
[INFO] [stderr]    Compiling portable-atomic v1.13.0
[INFO] [stderr]    Compiling crossbeam-utils v0.8.21
[INFO] [stderr]     Checking signal-hook-mio v0.2.5
[INFO] [stderr]     Checking sha1 v0.10.6
[INFO] [stderr]     Checking polyval v0.6.2
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]    Compiling sys-info v0.9.1
[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 rand_core v0.9.5
[INFO] [stderr]     Checking console v0.16.2
[INFO] [stderr]     Checking http-body-util v0.1.3
[INFO] [stderr]     Checking csv-core v0.1.13
[INFO] [stderr]    Compiling tokio-cron-scheduler v0.15.1
[INFO] [stderr]     Checking iri-string v0.7.10
[INFO] [stderr]     Checking option-ext v0.2.0
[INFO] [stderr]     Checking unicode-truncate v2.0.1
[INFO] [stderr]    Compiling rlimit v0.10.2
[INFO] [stderr]    Compiling unicase v2.9.0
[INFO] [stderr]     Checking tempfile v3.24.0
[INFO] [stderr]     Checking rand_chacha v0.9.0
[INFO] [stderr]     Checking dirs-sys v0.5.0
[INFO] [stderr]     Checking csv v1.4.0
[INFO] [stderr]     Checking term v0.7.0
[INFO] [stderr]     Checking ghash v0.5.1
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking rustls-pki-types v1.13.2
[INFO] [stderr]    Compiling mime_guess v2.0.5
[INFO] [stderr]     Checking aes v0.8.4
[INFO] [stderr]     Checking digest v0.11.0-rc.3
[INFO] [stderr]     Checking ctr v0.9.2
[INFO] [stderr]     Checking aead v0.5.2
[INFO] [stderr]     Checking regex-automata v0.4.13
[INFO] [stderr]     Checking uuid v1.19.0
[INFO] [stderr]     Checking hmac v0.13.0-rc.2
[INFO] [stderr]     Checking rtoolbox v0.0.3
[INFO] [stderr]     Checking is-terminal v0.4.17
[INFO] [stderr]     Checking hashlink v0.11.0
[INFO] [stderr]     Checking tracing-log v0.2.0
[INFO] [stderr]     Checking thread_local v1.1.9
[INFO] [stderr]    Compiling multer v2.1.0
[INFO] [stderr]     Checking unicode-width v0.1.14
[INFO] [stderr]     Checking utf-8 v0.7.6
[INFO] [stderr]     Checking same-file v1.0.6
[INFO] [stderr]     Checking httpdate v1.0.3
[INFO] [stderr]     Checking winnow v0.6.26
[INFO] [stderr]     Checking shell-words v1.1.1
[INFO] [stderr]     Checking hashbrown v0.14.5
[INFO] [stderr]     Checking unsafe-libyaml v0.2.11
[INFO] [stderr]     Checking data-encoding v2.10.0
[INFO] [stderr]     Checking encode_unicode v1.0.0
[INFO] [stderr]     Checking unit-prefix v0.5.2
[INFO] [stderr]     Checking dialoguer v0.12.0
[INFO] [stderr]     Checking walkdir v2.5.0
[INFO] [stderr]     Checking indicatif v0.18.3
[INFO] [stderr]     Checking aes-gcm v0.10.3
[INFO] [stderr]     Checking pbkdf2 v0.13.0-rc.1
[INFO] [stderr]     Checking rpassword v7.4.0
[INFO] [stderr]     Checking rand v0.9.2
[INFO] [stderr]     Checking dirs v6.0.0
[INFO] [stderr]     Checking sha2 v0.10.9
[INFO] [stderr]     Checking http-body v0.4.6
[INFO] [stderr]     Checking headers-core v0.2.0
[INFO] [stderr]     Checking fs2 v0.4.3
[INFO] [stderr]     Checking socket2 v0.5.10
[INFO] [stderr]     Checking sysinfo v0.37.2
[INFO] [stderr]     Checking quick-xml v0.39.0
[INFO] [stderr]     Checking prettytable v0.10.0
[INFO] [stderr]     Checking encoding_rs v0.8.35
[INFO] [stderr]     Checking hex v0.4.3
[INFO] [stderr]     Checking spin v0.9.8
[INFO] [stderr]     Checking headers v0.3.9
[INFO] [stderr]     Checking scoped-tls v1.0.1
[INFO] [stderr]     Checking dashmap v6.1.0
[INFO] [stderr]     Checking matchers v0.2.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 tokio-macros v2.6.0
[INFO] [stderr]    Compiling displaydoc v0.2.5
[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 tokio v1.49.0
[INFO] [stderr]     Checking futures-util v0.3.31
[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]    Compiling num-derive v0.4.2
[INFO] [stderr]     Checking zerofrom v0.1.6
[INFO] [stderr]    Compiling pin-project-internal v1.1.10
[INFO] [stderr]     Checking yoke v0.8.1
[INFO] [stderr]     Checking kasuari v0.4.11
[INFO] [stderr]     Checking tracing v0.1.44
[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 async-trait v0.1.89
[INFO] [stderr]     Checking clap v4.5.54
[INFO] [stderr]     Checking clap_complete v4.5.65
[INFO] [stderr]     Checking strum v0.27.2
[INFO] [stderr]     Checking ratatui-core v0.1.0
[INFO] [stderr]    Compiling darling_macro v0.20.11
[INFO] [stderr]     Checking thiserror v1.0.69
[INFO] [stderr]     Checking pin-project v1.1.10
[INFO] [stderr]     Checking tinystr v0.8.2
[INFO] [stderr]     Checking potential_utf v0.1.4
[INFO] [stderr]     Checking icu_collections v2.1.1
[INFO] [stderr]    Compiling darling v0.20.11
[INFO] [stderr]    Compiling derive_builder_core v0.20.2
[INFO] [stderr]     Checking icu_locale_core v2.1.1
[INFO] [stderr]    Compiling darling_macro v0.23.0
[INFO] [stderr]    Compiling darling v0.23.0
[INFO] [stderr]     Checking icu_provider v2.1.1
[INFO] [stderr]     Checking icu_properties v2.1.2
[INFO] [stderr]     Checking icu_normalizer v2.1.1
[INFO] [stderr]    Compiling derive_builder_macro v0.20.2
[INFO] [stderr]     Checking ratatui-widgets v0.3.0
[INFO] [stderr]     Checking ratatui-crossterm v0.1.0
[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]     Checking derive_builder v0.20.2
[INFO] [stderr]     Checking futures-executor v0.3.31
[INFO] [stderr]     Checking futures v0.3.31
[INFO] [stderr]     Checking ratatui-macros v0.7.0
[INFO] [stderr]     Checking idna_adapter v1.2.1
[INFO] [stderr]     Checking ratatui v0.30.0
[INFO] [stderr]     Checking idna v1.1.0
[INFO] [stderr]     Checking croner v3.0.1
[INFO] [stderr]     Checking cron v0.15.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 tokio-tungstenite v0.21.0
[INFO] [stderr]     Checking h2 v0.3.27
[INFO] [stderr]     Checking tower-http v0.6.8
[INFO] [stderr]     Checking rusqlite v0.38.0
[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]     | |_________________________^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 818 |                           d = FileDiff::new(
[INFO] [stdout]     |                           - `d` is overwritten here before the previous value is read
[INFO] [stdout]     |
[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] error: useless conversion to the same type: `serde_json::Error`
[INFO] [stdout]    --> src/sync/diff.rs:363:65
[INFO] [stdout]     |
[INFO] [stdout] 363 |             .map_err(|e| crate::error::SyncError::Serialization(e.into()))
[INFO] [stdout]     |                                                                 ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: `#[deny(self_type_conversion)]` on by default
[INFO] [stdout] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 363 -             .map_err(|e| crate::error::SyncError::Serialization(e.into()))
[INFO] [stdout] 363 +             .map_err(|e| crate::error::SyncError::Serialization(e))
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 363 -             .map_err(|e| crate::error::SyncError::Serialization(e.into()))
[INFO] [stdout] 363 +             .map_err(|e| crate::error::SyncError::Serialization(<serde_json::Error as Into<_>>::into(e)))
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `serde_json::Error`
[INFO] [stdout]    --> src/sync/diff.rs:367:87
[INFO] [stdout]     |
[INFO] [stdout] 367 |         serde_json::from_str(json).map_err(|e| crate::error::SyncError::Serialization(e.into()))
[INFO] [stdout]     |                                                                                       ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 367 -         serde_json::from_str(json).map_err(|e| crate::error::SyncError::Serialization(e.into()))
[INFO] [stdout] 367 +         serde_json::from_str(json).map_err(|e| crate::error::SyncError::Serialization(e))
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 367 -         serde_json::from_str(json).map_err(|e| crate::error::SyncError::Serialization(e.into()))
[INFO] [stdout] 367 +         serde_json::from_str(json).map_err(|e| crate::error::SyncError::Serialization(<serde_json::Error as Into<_>>::into(e)))
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `serde_json::Error`
[INFO] [stdout]    --> src/sync/diff.rs:753:65
[INFO] [stdout]     |
[INFO] [stdout] 753 |             .map_err(|e| crate::error::SyncError::Serialization(e.into()))
[INFO] [stdout]     |                                                                 ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 753 -             .map_err(|e| crate::error::SyncError::Serialization(e.into()))
[INFO] [stdout] 753 +             .map_err(|e| crate::error::SyncError::Serialization(e))
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 753 -             .map_err(|e| crate::error::SyncError::Serialization(e.into()))
[INFO] [stdout] 753 +             .map_err(|e| crate::error::SyncError::Serialization(<serde_json::Error as Into<_>>::into(e)))
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `cloud-disk-sync` (lib) due to 3 previous errors; 90 warnings emitted
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[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] [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]     | |_________________________^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 818 |                           d = FileDiff::new(
[INFO] [stdout]     |                           - `d` is overwritten here before the previous value is read
[INFO] [stdout]     |
[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] error: useless conversion to the same type: `serde_json::Error`
[INFO] [stdout]    --> src/sync/diff.rs:363:65
[INFO] [stdout]     |
[INFO] [stdout] 363 |             .map_err(|e| crate::error::SyncError::Serialization(e.into()))
[INFO] [stdout]     |                                                                 ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: `#[deny(self_type_conversion)]` on by default
[INFO] [stdout] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 363 -             .map_err(|e| crate::error::SyncError::Serialization(e.into()))
[INFO] [stdout] 363 +             .map_err(|e| crate::error::SyncError::Serialization(e))
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 363 -             .map_err(|e| crate::error::SyncError::Serialization(e.into()))
[INFO] [stdout] 363 +             .map_err(|e| crate::error::SyncError::Serialization(<serde_json::Error as Into<_>>::into(e)))
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `serde_json::Error`
[INFO] [stdout]    --> src/sync/diff.rs:367:87
[INFO] [stdout]     |
[INFO] [stdout] 367 |         serde_json::from_str(json).map_err(|e| crate::error::SyncError::Serialization(e.into()))
[INFO] [stdout]     |                                                                                       ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 367 -         serde_json::from_str(json).map_err(|e| crate::error::SyncError::Serialization(e.into()))
[INFO] [stdout] 367 +         serde_json::from_str(json).map_err(|e| crate::error::SyncError::Serialization(e))
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 367 -         serde_json::from_str(json).map_err(|e| crate::error::SyncError::Serialization(e.into()))
[INFO] [stdout] 367 +         serde_json::from_str(json).map_err(|e| crate::error::SyncError::Serialization(<serde_json::Error as Into<_>>::into(e)))
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `serde_json::Error`
[INFO] [stdout]    --> src/sync/diff.rs:753:65
[INFO] [stdout]     |
[INFO] [stdout] 753 |             .map_err(|e| crate::error::SyncError::Serialization(e.into()))
[INFO] [stdout]     |                                                                 ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 753 -             .map_err(|e| crate::error::SyncError::Serialization(e.into()))
[INFO] [stdout] 753 +             .map_err(|e| crate::error::SyncError::Serialization(e))
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 753 -             .map_err(|e| crate::error::SyncError::Serialization(e.into()))
[INFO] [stdout] 753 +             .map_err(|e| crate::error::SyncError::Serialization(<serde_json::Error as Into<_>>::into(e)))
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `cloud-disk-sync` (lib test) due to 3 previous errors; 90 warnings emitted
[INFO] running `Command { std: "docker" "inspect" "136375f20fb044c4a310fbbd5c4ae3bf9f1dca4490572e0e44a3a287b669afda", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "136375f20fb044c4a310fbbd5c4ae3bf9f1dca4490572e0e44a3a287b669afda", kill_on_drop: false }`
[INFO] [stdout] 136375f20fb044c4a310fbbd5c4ae3bf9f1dca4490572e0e44a3a287b669afda
