[INFO] fetching crate matrix-bridge-wechat 0.1.0...
[INFO] checking matrix-bridge-wechat-0.1.0 against master#57f772f25c5ce2bd870d6f8c3ab318eaee5a3326 for pr-133502-22
[INFO] extracting crate matrix-bridge-wechat 0.1.0 into /workspace/builds/worker-5-tc1/source
[INFO] started tweaking crates.io crate matrix-bridge-wechat 0.1.0
[INFO] removed 0 missing tests
[INFO] finished tweaking crates.io crate matrix-bridge-wechat 0.1.0
[INFO] tweaked toml for crates.io crate matrix-bridge-wechat 0.1.0 written to /workspace/builds/worker-5-tc1/source/Cargo.toml
[INFO] validating manifest of crates.io crate matrix-bridge-wechat 0.1.0 on toolchain 57f772f25c5ce2bd870d6f8c3ab318eaee5a3326
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+57f772f25c5ce2bd870d6f8c3ab318eaee5a3326" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate matrix-bridge-wechat 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" "+57f772f25c5ce2bd870d6f8c3ab318eaee5a3326" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded tokio-test v0.4.5
[INFO] [stderr]   Downloaded ulid v1.2.1
[INFO] [stderr]   Downloaded anyhow v1.0.101
[INFO] [stderr]   Downloaded salvo_extra v0.89.1
[INFO] [stderr]   Downloaded salvo v0.89.1
[INFO] [stderr]   Downloaded untrusted v0.7.1
[INFO] [stderr]   Downloaded salvo_core v0.89.1
[INFO] [stderr]   Downloaded tempfile v3.25.0
[INFO] [stderr]   Downloaded xml v1.2.1
[INFO] [stderr]   Downloaded salvo_macros v0.89.1
[INFO] [stderr]   Downloaded salvo-serde-util v0.89.1
[INFO] [stderr]   Downloaded serde-xml-rs v0.8.2
[INFO] [stderr]   Downloaded toml_parser v1.0.8+spec-1.1.0
[INFO] [stderr]   Downloaded salvo-http3 v0.7.0
[INFO] [stderr]   Downloaded h3-quinn v0.0.10
[INFO] [stderr]   Downloaded multimap v0.10.1
[INFO] [stderr]   Downloaded h3-datagram v0.0.2
[INFO] [stderr]   Downloaded multer v3.1.0
[INFO] [stderr]   Downloaded mime-infer v4.0.1
[INFO] [stderr]   Downloaded h3 v0.0.8
[INFO] [stderr]   Downloaded headers-core v0.3.0
[INFO] [stderr]   Downloaded headers v0.4.1
[INFO] [stderr]   Downloaded nix v0.31.1
[INFO] [stderr]   Downloaded cookie v0.18.1
[INFO] [stderr]   Downloaded deranged v0.5.6
[INFO] [stderr]   Downloaded str-buf v3.0.3
[INFO] [stderr]   Downloaded content_inspector v0.2.4
[INFO] [stderr]   Downloaded etag v4.0.0
[INFO] [stderr]   Downloaded salvo-proxy v0.89.1
[INFO] [stderr]   Downloaded chardetng v0.1.17
[INFO] [stderr]   Downloaded wasm-streams v0.5.0
[INFO] [stderr]   Downloaded security-framework-sys v2.16.0
[INFO] [stderr]   Downloaded security-framework v3.6.0
[INFO] [stderr]   Downloaded local-ip-address v0.6.10
[INFO] [stderr]   Downloaded salvo-cors v0.89.1
[INFO] [stderr]   Downloaded pq-sys v0.7.5
[INFO] [stderr]   Downloaded dsl_auto_type v0.2.0
[INFO] [stderr]   Downloaded diesel_table_macro_syntax v0.3.0
[INFO] [stderr]   Downloaded salvo-acme v0.89.1
[INFO] [stderr]   Downloaded r2d2 v0.8.10
[INFO] [stderr]   Downloaded scheduled-thread-pool v0.2.7
[INFO] [stderr]   Downloaded rsqlite-vfs v0.1.0
[INFO] [stderr]   Downloaded diesel_derives v2.3.7
[INFO] [stderr]   Downloaded clap_derive v4.5.55
[INFO] [stderr]   Downloaded diesel v2.3.6
[INFO] [stderr]   Downloaded aws-lc-sys v0.37.1
[INFO] [stderr]   Downloaded sqlite-wasm-rs v0.5.2
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+57f772f25c5ce2bd870d6f8c3ab318eaee5a3326" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] cb264f1d0b3da7b5a3c3e487e258ffe1b65a09ba16efaa3c2bec3c4b3ba5811b
[INFO] running `Command { std: "docker" "start" "-a" "cb264f1d0b3da7b5a3c3e487e258ffe1b65a09ba16efaa3c2bec3c4b3ba5811b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "cb264f1d0b3da7b5a3c3e487e258ffe1b65a09ba16efaa3c2bec3c4b3ba5811b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "cb264f1d0b3da7b5a3c3e487e258ffe1b65a09ba16efaa3c2bec3c4b3ba5811b", kill_on_drop: false }`
[INFO] [stdout] cb264f1d0b3da7b5a3c3e487e258ffe1b65a09ba16efaa3c2bec3c4b3ba5811b
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+57f772f25c5ce2bd870d6f8c3ab318eaee5a3326" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] f572d457a0a4e6f589802c41e737747ab409f5fe73ad926afd28d0c4ea13a2b5
[INFO] running `Command { std: "docker" "start" "-a" "f572d457a0a4e6f589802c41e737747ab409f5fe73ad926afd28d0c4ea13a2b5", kill_on_drop: false }`
[INFO] [stderr]    Compiling unicode-ident v1.0.23
[INFO] [stderr]    Compiling quote v1.0.44
[INFO] [stderr]    Compiling libc v0.2.180
[INFO] [stderr]    Compiling typenum v1.19.0
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]     Checking pin-project-lite v0.2.16
[INFO] [stderr]     Checking itoa v1.0.17
[INFO] [stderr]     Checking subtle v2.6.1
[INFO] [stderr]     Checking once_cell v1.21.3
[INFO] [stderr]    Compiling zerocopy v0.8.39
[INFO] [stderr]     Checking log v0.4.29
[INFO] [stderr]    Compiling proc-macro2 v1.0.106
[INFO] [stderr]     Checking futures-io v0.3.31
[INFO] [stderr]    Compiling dunce v1.0.5
[INFO] [stderr]     Checking litemap v0.8.1
[INFO] [stderr]    Compiling fs_extra v1.3.0
[INFO] [stderr]     Checking http v1.4.0
[INFO] [stderr]     Checking writeable v0.6.2
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]     Checking hashbrown v0.16.1
[INFO] [stderr]    Compiling icu_properties_data v2.1.2
[INFO] [stderr]     Checking tracing-core v0.1.36
[INFO] [stderr]    Compiling icu_normalizer_data v2.1.1
[INFO] [stderr]     Checking bitflags v2.11.0
[INFO] [stderr]    Compiling aws-lc-rs v1.15.4
[INFO] [stderr]     Checking aho-corasick v1.1.4
[INFO] [stderr]     Checking futures-channel v0.3.31
[INFO] [stderr]    Compiling equivalent v1.0.2
[INFO] [stderr]    Compiling winnow v0.7.14
[INFO] [stderr]     Checking regex-syntax v0.8.9
[INFO] [stderr]     Checking rustls-pki-types v1.14.0
[INFO] [stderr]     Checking sync_wrapper v1.0.2
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling getrandom v0.4.1
[INFO] [stderr]    Compiling toml_datetime v0.7.5+spec-1.1.0
[INFO] [stderr]     Checking indexmap v2.13.0
[INFO] [stderr]    Compiling syn v2.0.115
[INFO] [stderr]    Compiling rustix v1.1.3
[INFO] [stderr]    Compiling cfg_aliases v0.2.1
[INFO] [stderr]    Compiling time-core v0.1.8
[INFO] [stderr]     Checking ipnet v2.11.0
[INFO] [stderr]    Compiling num-conv v0.2.0
[INFO] [stderr]    Compiling zstd-safe v7.2.4
[INFO] [stderr]    Compiling unicase v2.9.0
[INFO] [stderr]    Compiling crc32fast v1.5.0
[INFO] [stderr]     Checking generic-array v0.14.7
[INFO] [stderr]    Compiling time-macros v0.2.27
[INFO] [stderr]     Checking deranged v0.5.6
[INFO] [stderr]    Compiling mime-infer v4.0.1
[INFO] [stderr]    Compiling nix v0.31.1
[INFO] [stderr]    Compiling multer v3.1.0
[INFO] [stderr]     Checking http-body v1.0.1
[INFO] [stderr]    Compiling cookie v0.18.1
[INFO] [stderr]     Checking simd-adler32 v0.3.8
[INFO] [stderr]     Checking linux-raw-sys v0.11.0
[INFO] [stderr]     Checking adler2 v2.0.1
[INFO] [stderr]    Compiling rustls v0.23.36
[INFO] [stderr]     Checking block-buffer v0.10.4
[INFO] [stderr]     Checking inout v0.1.4
[INFO] [stderr]     Checking untrusted v0.9.0
[INFO] [stderr]     Checking miniz_oxide v0.8.9
[INFO] [stderr]     Checking http-body-util v0.1.3
[INFO] [stderr]     Checking headers-core v0.3.0
[INFO] [stderr]     Checking brotli-decompressor v5.0.0
[INFO] [stderr]    Compiling jobserver v0.1.34
[INFO] [stderr]     Checking fastrand v2.3.0
[INFO] [stderr]     Checking spin v0.9.8
[INFO] [stderr]     Checking getrandom v0.2.17
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]    Compiling cc v1.2.56
[INFO] [stderr]     Checking errno v0.3.14
[INFO] [stderr]     Checking socket2 v0.6.2
[INFO] [stderr]     Checking signal-hook-registry v1.4.8
[INFO] [stderr]     Checking mio v1.1.1
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking crypto-common v0.1.7
[INFO] [stderr]     Checking digest v0.10.7
[INFO] [stderr]     Checking rand_core v0.9.5
[INFO] [stderr]     Checking cipher v0.4.4
[INFO] [stderr]     Checking universal-hash v0.5.1
[INFO] [stderr]     Checking regex-automata v0.4.14
[INFO] [stderr]     Checking polyval v0.6.2
[INFO] [stderr]     Checking aead v0.5.2
[INFO] [stderr]     Checking ghash v0.5.1
[INFO] [stderr]     Checking time v0.3.47
[INFO] [stderr]     Checking hmac v0.12.1
[INFO] [stderr]     Checking sha2 v0.10.9
[INFO] [stderr]     Checking sha1 v0.10.6
[INFO] [stderr]     Checking aes v0.8.4
[INFO] [stderr]     Checking ctr v0.9.2
[INFO] [stderr]    Compiling toml_parser v1.0.8+spec-1.1.0
[INFO] [stderr]     Checking xml v1.2.1
[INFO] [stderr]     Checking headers v0.4.1
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]     Checking brotli v8.0.2
[INFO] [stderr]     Checking flate2 v1.1.9
[INFO] [stderr]     Checking aes-gcm v0.10.3
[INFO] [stderr]    Compiling cmake v0.1.57
[INFO] [stderr]     Checking chardetng v0.1.17
[INFO] [stderr]    Compiling toml_edit v0.23.10+spec-1.0.0
[INFO] [stderr]     Checking content_inspector v0.2.4
[INFO] [stderr]     Checking utf8parse v0.2.2
[INFO] [stderr]    Compiling libsqlite3-sys v0.30.1
[INFO] [stderr]    Compiling pq-sys v0.7.5
[INFO] [stderr]     Checking anstyle-parse v0.2.7
[INFO] [stderr]    Compiling diesel_derives v2.3.7
[INFO] [stderr]     Checking xxhash-rust v0.8.15
[INFO] [stderr]     Checking anstyle-query v1.1.5
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]     Checking str-buf v3.0.3
[INFO] [stderr]     Checking is_terminal_polyfill v1.70.2
[INFO] [stderr]     Checking anstyle v1.0.13
[INFO] [stderr]     Checking colorchoice v1.0.4
[INFO] [stderr]     Checking rustls-native-certs v0.8.3
[INFO] [stderr]     Checking etag v4.0.0
[INFO] [stderr]     Checking scheduled-thread-pool v0.2.7
[INFO] [stderr]     Checking strsim v0.11.1
[INFO] [stderr]     Checking iana-time-zone v0.1.65
[INFO] [stderr]     Checking iri-string v0.7.10
[INFO] [stderr]     Checking anstream v0.6.21
[INFO] [stderr]     Checking clap_lex v1.0.0
[INFO] [stderr]    Compiling anyhow v1.0.101
[INFO] [stderr]     Checking sharded-slab v0.1.7
[INFO] [stderr]    Compiling aws-lc-sys v0.37.1
[INFO] [stderr]    Compiling zstd-sys v2.0.16+zstd.1.5.7
[INFO] [stderr]     Checking tempfile v3.25.0
[INFO] [stderr]     Checking r2d2 v0.8.10
[INFO] [stderr]     Checking clap_builder v4.5.58
[INFO] [stderr]     Checking tracing-log v0.2.0
[INFO] [stderr]     Checking thread_local v1.1.9
[INFO] [stderr]     Checking unsafe-libyaml v0.2.11
[INFO] [stderr]     Checking downcast-rs v2.0.2
[INFO] [stderr]    Compiling proc-macro-crate v3.4.0
[INFO] [stderr]     Checking nu-ansi-term v0.50.3
[INFO] [stderr]     Checking urlencoding v2.1.3
[INFO] [stderr]     Checking regex v1.12.3
[INFO] [stderr]     Checking ppv-lite86 v0.2.21
[INFO] [stderr]     Checking matchers v0.2.0
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling darling_core v0.21.3
[INFO] [stderr]    Compiling salvo-serde-util v0.89.1
[INFO] [stderr]    Compiling diesel_table_macro_syntax v0.3.0
[INFO] [stderr]     Checking rand_chacha v0.9.0
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking rand v0.9.2
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]    Compiling zerofrom-derive v0.1.6
[INFO] [stderr]    Compiling yoke-derive v0.8.1
[INFO] [stderr]    Compiling tokio-macros v2.6.0
[INFO] [stderr]    Compiling zerovec-derive v0.11.2
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling futures-macro v0.3.31
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]     Checking tokio v1.49.0
[INFO] [stderr]    Compiling enumflags2_derive v0.7.12
[INFO] [stderr]     Checking futures-util v0.3.31
[INFO] [stderr]    Compiling pin-project-internal v1.1.10
[INFO] [stderr]     Checking enumflags2 v0.7.12
[INFO] [stderr]     Checking zerofrom v0.1.6
[INFO] [stderr]     Checking tracing v0.1.44
[INFO] [stderr]     Checking yoke v0.8.1
[INFO] [stderr]    Compiling salvo_macros v0.89.1
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]     Checking ulid v1.2.1
[INFO] [stderr]     Checking zerovec v0.11.5
[INFO] [stderr]     Checking zerotrie v0.2.3
[INFO] [stderr]    Compiling clap_derive v4.5.55
[INFO] [stderr]     Checking tracing-subscriber v0.3.22
[INFO] [stderr]     Checking thiserror v2.0.18
[INFO] [stderr]     Checking tungstenite v0.28.0
[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_macro v0.21.3
[INFO] [stderr]     Checking icu_locale_core v2.1.1
[INFO] [stderr]    Compiling darling v0.21.3
[INFO] [stderr]    Compiling dsl_auto_type v0.2.0
[INFO] [stderr]     Checking serde v1.0.228
[INFO] [stderr]     Checking zstd v0.13.3
[INFO] [stderr]     Checking icu_provider v2.1.1
[INFO] [stderr]     Checking serde_urlencoded v0.7.1
[INFO] [stderr]     Checking serde-xml-rs v0.8.2
[INFO] [stderr]     Checking multimap v0.10.1
[INFO] [stderr]     Checking chrono v0.4.43
[INFO] [stderr]     Checking serde_yaml v0.9.34+deprecated
[INFO] [stderr]     Checking clap v4.5.58
[INFO] [stderr]     Checking icu_properties v2.1.2
[INFO] [stderr]     Checking icu_normalizer v2.1.1
[INFO] [stderr]     Checking idna_adapter v1.2.1
[INFO] [stderr]     Checking idna v1.1.0
[INFO] [stderr]     Checking tokio-util v0.7.18
[INFO] [stderr]     Checking tokio-tungstenite v0.28.0
[INFO] [stderr]     Checking tokio-stream v0.1.18
[INFO] [stderr]     Checking url v2.5.8
[INFO] [stderr]     Checking h2 v0.4.13
[INFO] [stderr]     Checking tower v0.5.3
[INFO] [stderr]     Checking tokio-test v0.4.5
[INFO] [stderr]     Checking tower-http v0.6.8
[INFO] [stderr]     Checking diesel v2.3.6
[INFO] [stderr]     Checking hyper v1.8.1
[INFO] [stderr]     Checking hyper-util v0.1.20
[INFO] [stderr]     Checking salvo_core v0.89.1
[INFO] [stderr]     Checking rustls-webpki v0.103.9
[INFO] [stderr]     Checking salvo_extra v0.89.1
[INFO] [stderr]     Checking salvo-cors v0.89.1
[INFO] [stderr]     Checking salvo v0.89.1
[INFO] [stderr]     Checking tokio-rustls v0.26.4
[INFO] [stderr]     Checking rustls-platform-verifier v0.6.2
[INFO] [stderr]     Checking hyper-rustls v0.27.7
[INFO] [stderr]     Checking reqwest v0.13.2
[INFO] [stderr]     Checking matrix-bridge-wechat v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/config/mod.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `GroupInfo` and `UserInfo`
[INFO] [stdout]   --> src/wechat/service.rs:14:13
[INFO] [stdout]    |
[INFO] [stdout] 14 | use super::{UserInfo, GroupInfo};
[INFO] [stdout]    |             ^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> src/bridge/portal.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/bridge/portal.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `error`
[INFO] [stdout]  --> src/bridge/portal.rs:4:34
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tracing::{info, debug, warn, error};
[INFO] [stdout]   |                                  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::wechat::ChatType`
[INFO] [stdout]  --> src/bridge/portal.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::wechat::ChatType;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> src/util/retry/handler.rs:3:22
[INFO] [stdout]   |
[INFO] [stdout] 3 | use tracing::{debug, warn};
[INFO] [stdout]   |                      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `error`
[INFO] [stdout]  --> src/util/retry/reconnection.rs:4:34
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tracing::{info, warn, debug, error};
[INFO] [stdout]   |                                  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> src/util/perf/queue.rs:5:22
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing::{debug, warn};
[INFO] [stdout]   |                      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `error`
[INFO] [stdout]  --> src/matrix/event_handler.rs:4:34
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tracing::{debug, info, warn, error};
[INFO] [stdout]   |                                  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `types::*`
[INFO] [stdout]   --> src/matrix/mod.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub use types::*;
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/config/mod.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `GroupInfo` and `UserInfo`
[INFO] [stdout]   --> src/wechat/service.rs:14:13
[INFO] [stdout]    |
[INFO] [stdout] 14 | use super::{UserInfo, GroupInfo};
[INFO] [stdout]    |             ^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> src/bridge/portal.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/bridge/portal.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `error`
[INFO] [stdout]  --> src/bridge/portal.rs:4:34
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tracing::{info, debug, warn, error};
[INFO] [stdout]   |                                  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::wechat::ChatType`
[INFO] [stdout]  --> src/bridge/portal.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::wechat::ChatType;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> src/util/retry/handler.rs:3:22
[INFO] [stdout]   |
[INFO] [stdout] 3 | use tracing::{debug, warn};
[INFO] [stdout]   |                      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `error`
[INFO] [stdout]  --> src/util/retry/reconnection.rs:4:34
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tracing::{info, warn, debug, error};
[INFO] [stdout]   |                                  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> src/util/perf/queue.rs:5:22
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing::{debug, warn};
[INFO] [stdout]   |                      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `error`
[INFO] [stdout]  --> src/matrix/event_handler.rs:4:34
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tracing::{debug, info, warn, error};
[INFO] [stdout]   |                                  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `types::*`
[INFO] [stdout]   --> src/matrix/mod.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub use types::*;
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Backoff`
[INFO] [stdout]  --> src/util/retry/handler.rs:5:22
[INFO] [stdout]   |
[INFO] [stdout] 5 | use super::backoff::{Backoff, BackoffConfig, ExponentialBackoff};
[INFO] [stdout]   |                      ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Backoff`
[INFO] [stdout]  --> src/util/retry/handler.rs:5:22
[INFO] [stdout]   |
[INFO] [stdout] 5 | use super::backoff::{Backoff, BackoffConfig, ExponentialBackoff};
[INFO] [stdout]   |                      ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `displayname`
[INFO] [stdout]    --> src/config/bridge.rs:234:13
[INFO] [stdout]     |
[INFO] [stdout] 234 |         let displayname = if !name.is_empty() {
[INFO] [stdout]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_displayname`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `displayname`
[INFO] [stdout]    --> src/config/bridge.rs:234:13
[INFO] [stdout]     |
[INFO] [stdout] 234 |         let displayname = if !name.is_empty() {
[INFO] [stdout]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_displayname`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]    --> src/database/message.rs:101:13
[INFO] [stdout]     |
[INFO] [stdout] 101 |         let key = PortalKey::new(&room_mxid, &sender_id);
[INFO] [stdout]     |             ^^^ help: if this is intentional, prefix it with an underscore: `_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]    --> src/database/message.rs:101:13
[INFO] [stdout]     |
[INFO] [stdout] 101 |         let key = PortalKey::new(&room_mxid, &sender_id);
[INFO] [stdout]     |             ^^^ help: if this is intentional, prefix it with an underscore: `_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `receiver`
[INFO] [stdout]    --> src/bridge/wechat_bridge.rs:244:13
[INFO] [stdout]     |
[INFO] [stdout] 244 |         let receiver = event.from.id.clone();
[INFO] [stdout]     |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_receiver`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `puppet`
[INFO] [stdout]    --> src/bridge/wechat_bridge.rs:288:13
[INFO] [stdout]     |
[INFO] [stdout] 288 |         let puppet = self.get_puppet_by_uin(sender_id).await?;
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_puppet`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `reply_content`
[INFO] [stdout]    --> src/bridge/wechat_bridge.rs:318:21
[INFO] [stdout]     |
[INFO] [stdout] 318 |                 let reply_content = serde_json::json!({
[INFO] [stdout]     |                     ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_reply_content`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `puppet`
[INFO] [stdout]    --> src/bridge/wechat_bridge.rs:356:13
[INFO] [stdout]     |
[INFO] [stdout] 356 |         let puppet = self.get_puppet_by_uin(sender_id).await?;
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_puppet`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `puppet`
[INFO] [stdout]    --> src/bridge/wechat_bridge.rs:441:13
[INFO] [stdout]     |
[INFO] [stdout] 441 |         let puppet = self.get_puppet_by_uin(sender_id).await?;
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_puppet`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `desc`
[INFO] [stdout]    --> src/bridge/wechat_bridge.rs:800:13
[INFO] [stdout]     |
[INFO] [stdout] 800 |         let desc = data.get("desc").and_then(|v| v.as_str()).unwrap_or("");
[INFO] [stdout]     |             ^^^^ help: if this is intentional, prefix it with an underscore: `_desc`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `receiver`
[INFO] [stdout]    --> src/bridge/wechat_bridge.rs:244:13
[INFO] [stdout]     |
[INFO] [stdout] 244 |         let receiver = event.from.id.clone();
[INFO] [stdout]     |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_receiver`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `puppet`
[INFO] [stdout]    --> src/bridge/wechat_bridge.rs:288:13
[INFO] [stdout]     |
[INFO] [stdout] 288 |         let puppet = self.get_puppet_by_uin(sender_id).await?;
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_puppet`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `reply_content`
[INFO] [stdout]    --> src/bridge/wechat_bridge.rs:318:21
[INFO] [stdout]     |
[INFO] [stdout] 318 |                 let reply_content = serde_json::json!({
[INFO] [stdout]     |                     ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_reply_content`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `puppet`
[INFO] [stdout]    --> src/bridge/wechat_bridge.rs:356:13
[INFO] [stdout]     |
[INFO] [stdout] 356 |         let puppet = self.get_puppet_by_uin(sender_id).await?;
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_puppet`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room`
[INFO] [stdout]    --> src/matrix/event_handler.rs:396:45
[INFO] [stdout]     |
[INFO] [stdout] 396 | ...                   if let Some(room) = user.management_room() {
[INFO] [stdout]     |                                   ^^^^ help: if this is intentional, prefix it with an underscore: `_room`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `puppet`
[INFO] [stdout]    --> src/bridge/wechat_bridge.rs:441:13
[INFO] [stdout]     |
[INFO] [stdout] 441 |         let puppet = self.get_puppet_by_uin(sender_id).await?;
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_puppet`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bot_mxid`
[INFO] [stdout]    --> src/bridge/user.rs:139:9
[INFO] [stdout]     |
[INFO] [stdout] 139 |         bot_mxid: &str,
[INFO] [stdout]     |         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bot_mxid`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `desc`
[INFO] [stdout]    --> src/bridge/wechat_bridge.rs:800:13
[INFO] [stdout]     |
[INFO] [stdout] 800 |         let desc = data.get("desc").and_then(|v| v.as_str()).unwrap_or("");
[INFO] [stdout]     |             ^^^^ help: if this is intentional, prefix it with an underscore: `_desc`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room_id`
[INFO] [stdout]    --> src/matrix/event_handler.rs:891:26
[INFO] [stdout]     |
[INFO] [stdout] 891 |                 let Some(room_id) = &event.room_id else {
[INFO] [stdout]     |                          ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_room_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room_id`
[INFO] [stdout]    --> src/matrix/event_handler.rs:602:33
[INFO] [stdout]     |
[INFO] [stdout] 602 |                     if let Some(room_id) = &event.room_id {
[INFO] [stdout]     |                                 ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_room_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room_id`
[INFO] [stdout]    --> src/matrix/event_handler.rs:664:33
[INFO] [stdout]     |
[INFO] [stdout] 664 |                     if let Some(room_id) = &event.room_id {
[INFO] [stdout]     |                                 ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_room_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room_id`
[INFO] [stdout]    --> src/matrix/event_handler.rs:731:33
[INFO] [stdout]     |
[INFO] [stdout] 731 |                     if let Some(room_id) = &event.room_id {
[INFO] [stdout]     |                                 ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_room_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room_id`
[INFO] [stdout]    --> src/matrix/event_handler.rs:797:33
[INFO] [stdout]     |
[INFO] [stdout] 797 |                     if let Some(room_id) = &event.room_id {
[INFO] [stdout]     |                                 ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_room_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room_id`
[INFO] [stdout]    --> src/matrix/event_handler.rs:857:33
[INFO] [stdout]     |
[INFO] [stdout] 857 |                     if let Some(room_id) = &event.room_id {
[INFO] [stdout]     |                                 ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_room_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `uin`
[INFO] [stdout]    --> src/bridge/portal.rs:249:14
[INFO] [stdout]     |
[INFO] [stdout] 249 |         for (uin, puppet_mxid, displayname) in puppet_mxids {
[INFO] [stdout]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_uin`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room`
[INFO] [stdout]    --> src/matrix/event_handler.rs:396:45
[INFO] [stdout]     |
[INFO] [stdout] 396 | ...                   if let Some(room) = user.management_room() {
[INFO] [stdout]     |                                   ^^^^ help: if this is intentional, prefix it with an underscore: `_room`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bot_mxid`
[INFO] [stdout]    --> src/bridge/user.rs:139:9
[INFO] [stdout]     |
[INFO] [stdout] 139 |         bot_mxid: &str,
[INFO] [stdout]     |         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bot_mxid`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room_id`
[INFO] [stdout]    --> src/matrix/event_handler.rs:891:26
[INFO] [stdout]     |
[INFO] [stdout] 891 |                 let Some(room_id) = &event.room_id else {
[INFO] [stdout]     |                          ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_room_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room_id`
[INFO] [stdout]    --> src/matrix/event_handler.rs:602:33
[INFO] [stdout]     |
[INFO] [stdout] 602 |                     if let Some(room_id) = &event.room_id {
[INFO] [stdout]     |                                 ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_room_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room_id`
[INFO] [stdout]    --> src/matrix/event_handler.rs:664:33
[INFO] [stdout]     |
[INFO] [stdout] 664 |                     if let Some(room_id) = &event.room_id {
[INFO] [stdout]     |                                 ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_room_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room_id`
[INFO] [stdout]    --> src/matrix/event_handler.rs:731:33
[INFO] [stdout]     |
[INFO] [stdout] 731 |                     if let Some(room_id) = &event.room_id {
[INFO] [stdout]     |                                 ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_room_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room_id`
[INFO] [stdout]    --> src/matrix/event_handler.rs:797:33
[INFO] [stdout]     |
[INFO] [stdout] 797 |                     if let Some(room_id) = &event.room_id {
[INFO] [stdout]     |                                 ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_room_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room_id`
[INFO] [stdout]    --> src/matrix/event_handler.rs:857:33
[INFO] [stdout]     |
[INFO] [stdout] 857 |                     if let Some(room_id) = &event.room_id {
[INFO] [stdout]     |                                 ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_room_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `uin`
[INFO] [stdout]    --> src/bridge/portal.rs:249:14
[INFO] [stdout]     |
[INFO] [stdout] 249 |         for (uin, puppet_mxid, displayname) in puppet_mxids {
[INFO] [stdout]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_uin`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `max_permits`
[INFO] [stdout]    --> src/util/perf/semaphore.rs:240:65
[INFO] [stdout]     |
[INFO] [stdout] 240 |     pub fn new(name: impl Into<String>, initial_permits: usize, max_permits: usize) -> Self {
[INFO] [stdout]     |                                                                 ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_max_permits`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `max_permits`
[INFO] [stdout]    --> src/util/perf/semaphore.rs:240:65
[INFO] [stdout]     |
[INFO] [stdout] 240 |     pub fn new(name: impl Into<String>, initial_permits: usize, max_permits: usize) -> Self {
[INFO] [stdout]     |                                                                 ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_max_permits`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `event_type`
[INFO] [stdout]   --> src/crypto/machine.rs:88:9
[INFO] [stdout]    |
[INFO] [stdout] 88 |         event_type: &str,
[INFO] [stdout]    |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_event_type`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `session`
[INFO] [stdout]    --> src/crypto/machine.rs:169:30
[INFO] [stdout]     |
[INFO] [stdout] 169 |     fn encrypt_megolm(&self, session: &MegolmSession, plaintext: &str) -> CryptoResult<String> {
[INFO] [stdout]     |                              ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_session`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `session`
[INFO] [stdout]    --> src/crypto/machine.rs:180:30
[INFO] [stdout]     |
[INFO] [stdout] 180 |     fn decrypt_megolm(&self, session: &MegolmSession, ciphertext: &str) -> CryptoResult<String> {
[INFO] [stdout]     |                              ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_session`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `addr` is never read
[INFO] [stdout]   --> src/wechat/service.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | struct Connection {
[INFO] [stdout]    |        ---------- field in this struct
[INFO] [stdout] 20 |     addr: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Connection` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `handle_json_message` is never used
[INFO] [stdout]    --> src/wechat/service.rs:101:14
[INFO] [stdout]     |
[INFO] [stdout]  38 | impl WechatService {
[INFO] [stdout]     | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 101 |     async fn handle_json_message(&self, json: &str) {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `users_by_uin` and `puppets_by_mxid` are never read
[INFO] [stdout]   --> src/bridge/wechat_bridge.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct WechatBridge {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 26 |     users_by_uin: RwLock<HashMap<String, Arc<BridgeUser>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     puppets_by_mxid: RwLock<HashMap<String, Arc<BridgePuppet>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `event_type`
[INFO] [stdout]   --> src/crypto/machine.rs:88:9
[INFO] [stdout]    |
[INFO] [stdout] 88 |         event_type: &str,
[INFO] [stdout]    |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_event_type`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `session`
[INFO] [stdout]    --> src/crypto/machine.rs:169:30
[INFO] [stdout]     |
[INFO] [stdout] 169 |     fn encrypt_megolm(&self, session: &MegolmSession, plaintext: &str) -> CryptoResult<String> {
[INFO] [stdout]     |                              ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_session`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `session`
[INFO] [stdout]    --> src/crypto/machine.rs:180:30
[INFO] [stdout]     |
[INFO] [stdout] 180 |     fn decrypt_megolm(&self, session: &MegolmSession, ciphertext: &str) -> CryptoResult<String> {
[INFO] [stdout]     |                              ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_session`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `addr` is never read
[INFO] [stdout]   --> src/wechat/service.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | struct Connection {
[INFO] [stdout]    |        ---------- field in this struct
[INFO] [stdout] 20 |     addr: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Connection` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `handle_json_message` is never used
[INFO] [stdout]    --> src/wechat/service.rs:101:14
[INFO] [stdout]     |
[INFO] [stdout]  38 | impl WechatService {
[INFO] [stdout]     | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 101 |     async fn handle_json_message(&self, json: &str) {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `users_by_uin` and `puppets_by_mxid` are never read
[INFO] [stdout]   --> src/bridge/wechat_bridge.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct WechatBridge {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 26 |     users_by_uin: RwLock<HashMap<String, Arc<BridgeUser>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     puppets_by_mxid: RwLock<HashMap<String, Arc<BridgePuppet>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]    --> tests/integration_tests.rs:127:9
[INFO] [stdout]     |
[INFO] [stdout] 127 |     use std::time::Duration;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Backoff`
[INFO] [stdout]   --> tests/integration_tests.rs:61:80
[INFO] [stdout]    |
[INFO] [stdout] 61 |     use matrix_bridge_wechat::util::retry::{BackoffConfig, ExponentialBackoff, Backoff};
[INFO] [stdout]    |                                                                                ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `init_test_logger` is never used
[INFO] [stdout]  --> tests/common/mod.rs:1:8
[INFO] [stdout]   |
[INFO] [stdout] 1 | pub fn init_test_logger() {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/config/mod.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `GroupInfo` and `UserInfo`
[INFO] [stdout]   --> src/wechat/service.rs:14:13
[INFO] [stdout]    |
[INFO] [stdout] 14 | use super::{UserInfo, GroupInfo};
[INFO] [stdout]    |             ^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> src/bridge/portal.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/bridge/portal.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `error`
[INFO] [stdout]  --> src/bridge/portal.rs:4:34
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tracing::{info, debug, warn, error};
[INFO] [stdout]   |                                  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::wechat::ChatType`
[INFO] [stdout]  --> src/bridge/portal.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::wechat::ChatType;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `user::BridgeUser`
[INFO] [stdout]  --> src/bridge/mod.rs:8:9
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use user::BridgeUser;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `portal::BridgePortal`
[INFO] [stdout]  --> src/bridge/mod.rs:9:9
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub use portal::BridgePortal;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `puppet::BridgePuppet`
[INFO] [stdout]   --> src/bridge/mod.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub use puppet::BridgePuppet;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `command::CommandProcessor`
[INFO] [stdout]   --> src/bridge/mod.rs:11:9
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub use command::CommandProcessor;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> src/util/retry/handler.rs:3:22
[INFO] [stdout]   |
[INFO] [stdout] 3 | use tracing::{debug, warn};
[INFO] [stdout]   |                      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `error`
[INFO] [stdout]  --> src/util/retry/reconnection.rs:4:34
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tracing::{info, warn, debug, error};
[INFO] [stdout]   |                                  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `backoff::*`
[INFO] [stdout]  --> src/util/retry/mod.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use backoff::*;
[INFO] [stdout]   |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `handler::*`
[INFO] [stdout]  --> src/util/retry/mod.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub use handler::*;
[INFO] [stdout]   |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `reconnection::*`
[INFO] [stdout]  --> src/util/retry/mod.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use reconnection::*;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> src/util/perf/queue.rs:5:22
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing::{debug, warn};
[INFO] [stdout]   |                      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `queue::*`
[INFO] [stdout]  --> src/util/perf/mod.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use queue::*;
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `cache::*`
[INFO] [stdout]  --> src/util/perf/mod.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub use cache::*;
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `semaphore::*`
[INFO] [stdout]  --> src/util/perf/mod.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use semaphore::*;
[INFO] [stdout]   |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `contact::*`
[INFO] [stdout]  --> src/util/mod.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use contact::*;
[INFO] [stdout]   |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `retry::*`
[INFO] [stdout]  --> src/util/mod.rs:8:9
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use retry::*;
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `perf::*`
[INFO] [stdout]  --> src/util/mod.rs:9:9
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub use perf::*;
[INFO] [stdout]   |         ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `error`
[INFO] [stdout]  --> src/matrix/event_handler.rs:4:34
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tracing::{debug, info, warn, error};
[INFO] [stdout]   |                                  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `event_handler::*`
[INFO] [stdout]  --> src/matrix/mod.rs:8:9
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use event_handler::*;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `types::*`
[INFO] [stdout]  --> src/matrix/mod.rs:9:9
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub use types::*;
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `types::*`
[INFO] [stdout]   --> src/matrix/mod.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub use types::*;
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `store::*`
[INFO] [stdout]  --> src/crypto/mod.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use store::*;
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `machine::*`
[INFO] [stdout]  --> src/crypto/mod.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub use machine::*;
[INFO] [stdout]   |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `types::*`
[INFO] [stdout]  --> src/crypto/mod.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use types::*;
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/config/mod.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `GroupInfo` and `UserInfo`
[INFO] [stdout]   --> src/wechat/service.rs:14:13
[INFO] [stdout]    |
[INFO] [stdout] 14 | use super::{UserInfo, GroupInfo};
[INFO] [stdout]    |             ^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> src/bridge/portal.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/bridge/portal.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `error`
[INFO] [stdout]  --> src/bridge/portal.rs:4:34
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tracing::{info, debug, warn, error};
[INFO] [stdout]   |                                  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::wechat::ChatType`
[INFO] [stdout]  --> src/bridge/portal.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::wechat::ChatType;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `user::BridgeUser`
[INFO] [stdout]  --> src/bridge/mod.rs:8:9
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use user::BridgeUser;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `portal::BridgePortal`
[INFO] [stdout]  --> src/bridge/mod.rs:9:9
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub use portal::BridgePortal;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `puppet::BridgePuppet`
[INFO] [stdout]   --> src/bridge/mod.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub use puppet::BridgePuppet;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `command::CommandProcessor`
[INFO] [stdout]   --> src/bridge/mod.rs:11:9
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub use command::CommandProcessor;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> src/util/retry/handler.rs:3:22
[INFO] [stdout]   |
[INFO] [stdout] 3 | use tracing::{debug, warn};
[INFO] [stdout]   |                      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `error`
[INFO] [stdout]  --> src/util/retry/reconnection.rs:4:34
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tracing::{info, warn, debug, error};
[INFO] [stdout]   |                                  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `backoff::*`
[INFO] [stdout]  --> src/util/retry/mod.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use backoff::*;
[INFO] [stdout]   |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `handler::*`
[INFO] [stdout]  --> src/util/retry/mod.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub use handler::*;
[INFO] [stdout]   |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `reconnection::*`
[INFO] [stdout]  --> src/util/retry/mod.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use reconnection::*;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> src/util/perf/queue.rs:5:22
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing::{debug, warn};
[INFO] [stdout]   |                      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `queue::*`
[INFO] [stdout]  --> src/util/perf/mod.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use queue::*;
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `cache::*`
[INFO] [stdout]  --> src/util/perf/mod.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub use cache::*;
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `semaphore::*`
[INFO] [stdout]  --> src/util/perf/mod.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use semaphore::*;
[INFO] [stdout]   |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `contact::*`
[INFO] [stdout]  --> src/util/mod.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use contact::*;
[INFO] [stdout]   |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `retry::*`
[INFO] [stdout]  --> src/util/mod.rs:8:9
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use retry::*;
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `perf::*`
[INFO] [stdout]  --> src/util/mod.rs:9:9
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub use perf::*;
[INFO] [stdout]   |         ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `error`
[INFO] [stdout]  --> src/matrix/event_handler.rs:4:34
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tracing::{debug, info, warn, error};
[INFO] [stdout]   |                                  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `event_handler::*`
[INFO] [stdout]  --> src/matrix/mod.rs:8:9
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use event_handler::*;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `types::*`
[INFO] [stdout]  --> src/matrix/mod.rs:9:9
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub use types::*;
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `types::*`
[INFO] [stdout]   --> src/matrix/mod.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub use types::*;
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `store::*`
[INFO] [stdout]  --> src/crypto/mod.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use store::*;
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `machine::*`
[INFO] [stdout]  --> src/crypto/mod.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub use machine::*;
[INFO] [stdout]   |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `types::*`
[INFO] [stdout]  --> src/crypto/mod.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use types::*;
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Backoff`
[INFO] [stdout]  --> src/util/retry/handler.rs:5:22
[INFO] [stdout]   |
[INFO] [stdout] 5 | use super::backoff::{Backoff, BackoffConfig, ExponentialBackoff};
[INFO] [stdout]   |                      ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `displayname`
[INFO] [stdout]    --> src/config/bridge.rs:234:13
[INFO] [stdout]     |
[INFO] [stdout] 234 |         let displayname = if !name.is_empty() {
[INFO] [stdout]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_displayname`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Backoff`
[INFO] [stdout]  --> src/util/retry/handler.rs:5:22
[INFO] [stdout]   |
[INFO] [stdout] 5 | use super::backoff::{Backoff, BackoffConfig, ExponentialBackoff};
[INFO] [stdout]   |                      ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `displayname`
[INFO] [stdout]    --> src/config/bridge.rs:234:13
[INFO] [stdout]     |
[INFO] [stdout] 234 |         let displayname = if !name.is_empty() {
[INFO] [stdout]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_displayname`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]    --> src/database/message.rs:101:13
[INFO] [stdout]     |
[INFO] [stdout] 101 |         let key = PortalKey::new(&room_mxid, &sender_id);
[INFO] [stdout]     |             ^^^ help: if this is intentional, prefix it with an underscore: `_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]    --> src/database/message.rs:101:13
[INFO] [stdout]     |
[INFO] [stdout] 101 |         let key = PortalKey::new(&room_mxid, &sender_id);
[INFO] [stdout]     |             ^^^ help: if this is intentional, prefix it with an underscore: `_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `receiver`
[INFO] [stdout]    --> src/bridge/wechat_bridge.rs:244:13
[INFO] [stdout]     |
[INFO] [stdout] 244 |         let receiver = event.from.id.clone();
[INFO] [stdout]     |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_receiver`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `puppet`
[INFO] [stdout]    --> src/bridge/wechat_bridge.rs:288:13
[INFO] [stdout]     |
[INFO] [stdout] 288 |         let puppet = self.get_puppet_by_uin(sender_id).await?;
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_puppet`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `reply_content`
[INFO] [stdout]    --> src/bridge/wechat_bridge.rs:318:21
[INFO] [stdout]     |
[INFO] [stdout] 318 |                 let reply_content = serde_json::json!({
[INFO] [stdout]     |                     ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_reply_content`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `puppet`
[INFO] [stdout]    --> src/bridge/wechat_bridge.rs:356:13
[INFO] [stdout]     |
[INFO] [stdout] 356 |         let puppet = self.get_puppet_by_uin(sender_id).await?;
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_puppet`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `puppet`
[INFO] [stdout]    --> src/bridge/wechat_bridge.rs:441:13
[INFO] [stdout]     |
[INFO] [stdout] 441 |         let puppet = self.get_puppet_by_uin(sender_id).await?;
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_puppet`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `desc`
[INFO] [stdout]    --> src/bridge/wechat_bridge.rs:800:13
[INFO] [stdout]     |
[INFO] [stdout] 800 |         let desc = data.get("desc").and_then(|v| v.as_str()).unwrap_or("");
[INFO] [stdout]     |             ^^^^ help: if this is intentional, prefix it with an underscore: `_desc`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room`
[INFO] [stdout]    --> src/matrix/event_handler.rs:396:45
[INFO] [stdout]     |
[INFO] [stdout] 396 | ...                   if let Some(room) = user.management_room() {
[INFO] [stdout]     |                                   ^^^^ help: if this is intentional, prefix it with an underscore: `_room`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bot_mxid`
[INFO] [stdout]    --> src/bridge/user.rs:139:9
[INFO] [stdout]     |
[INFO] [stdout] 139 |         bot_mxid: &str,
[INFO] [stdout]     |         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bot_mxid`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room_id`
[INFO] [stdout]    --> src/matrix/event_handler.rs:891:26
[INFO] [stdout]     |
[INFO] [stdout] 891 |                 let Some(room_id) = &event.room_id else {
[INFO] [stdout]     |                          ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_room_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room_id`
[INFO] [stdout]    --> src/matrix/event_handler.rs:602:33
[INFO] [stdout]     |
[INFO] [stdout] 602 |                     if let Some(room_id) = &event.room_id {
[INFO] [stdout]     |                                 ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_room_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room_id`
[INFO] [stdout]    --> src/matrix/event_handler.rs:664:33
[INFO] [stdout]     |
[INFO] [stdout] 664 |                     if let Some(room_id) = &event.room_id {
[INFO] [stdout]     |                                 ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_room_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room_id`
[INFO] [stdout]    --> src/matrix/event_handler.rs:731:33
[INFO] [stdout]     |
[INFO] [stdout] 731 |                     if let Some(room_id) = &event.room_id {
[INFO] [stdout]     |                                 ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_room_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room_id`
[INFO] [stdout]    --> src/matrix/event_handler.rs:797:33
[INFO] [stdout]     |
[INFO] [stdout] 797 |                     if let Some(room_id) = &event.room_id {
[INFO] [stdout]     |                                 ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_room_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room_id`
[INFO] [stdout]    --> src/matrix/event_handler.rs:857:33
[INFO] [stdout]     |
[INFO] [stdout] 857 |                     if let Some(room_id) = &event.room_id {
[INFO] [stdout]     |                                 ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_room_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `uin`
[INFO] [stdout]    --> src/bridge/portal.rs:249:14
[INFO] [stdout]     |
[INFO] [stdout] 249 |         for (uin, puppet_mxid, displayname) in puppet_mxids {
[INFO] [stdout]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_uin`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `receiver`
[INFO] [stdout]    --> src/bridge/wechat_bridge.rs:244:13
[INFO] [stdout]     |
[INFO] [stdout] 244 |         let receiver = event.from.id.clone();
[INFO] [stdout]     |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_receiver`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `puppet`
[INFO] [stdout]    --> src/bridge/wechat_bridge.rs:288:13
[INFO] [stdout]     |
[INFO] [stdout] 288 |         let puppet = self.get_puppet_by_uin(sender_id).await?;
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_puppet`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `reply_content`
[INFO] [stdout]    --> src/bridge/wechat_bridge.rs:318:21
[INFO] [stdout]     |
[INFO] [stdout] 318 |                 let reply_content = serde_json::json!({
[INFO] [stdout]     |                     ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_reply_content`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `puppet`
[INFO] [stdout]    --> src/bridge/wechat_bridge.rs:356:13
[INFO] [stdout]     |
[INFO] [stdout] 356 |         let puppet = self.get_puppet_by_uin(sender_id).await?;
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_puppet`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `puppet`
[INFO] [stdout]    --> src/bridge/wechat_bridge.rs:441:13
[INFO] [stdout]     |
[INFO] [stdout] 441 |         let puppet = self.get_puppet_by_uin(sender_id).await?;
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_puppet`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `desc`
[INFO] [stdout]    --> src/bridge/wechat_bridge.rs:800:13
[INFO] [stdout]     |
[INFO] [stdout] 800 |         let desc = data.get("desc").and_then(|v| v.as_str()).unwrap_or("");
[INFO] [stdout]     |             ^^^^ help: if this is intentional, prefix it with an underscore: `_desc`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `max_permits`
[INFO] [stdout]    --> src/util/perf/semaphore.rs:240:65
[INFO] [stdout]     |
[INFO] [stdout] 240 |     pub fn new(name: impl Into<String>, initial_permits: usize, max_permits: usize) -> Self {
[INFO] [stdout]     |                                                                 ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_max_permits`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room`
[INFO] [stdout]    --> src/matrix/event_handler.rs:396:45
[INFO] [stdout]     |
[INFO] [stdout] 396 | ...                   if let Some(room) = user.management_room() {
[INFO] [stdout]     |                                   ^^^^ help: if this is intentional, prefix it with an underscore: `_room`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bot_mxid`
[INFO] [stdout]    --> src/bridge/user.rs:139:9
[INFO] [stdout]     |
[INFO] [stdout] 139 |         bot_mxid: &str,
[INFO] [stdout]     |         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bot_mxid`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room_id`
[INFO] [stdout]    --> src/matrix/event_handler.rs:891:26
[INFO] [stdout]     |
[INFO] [stdout] 891 |                 let Some(room_id) = &event.room_id else {
[INFO] [stdout]     |                          ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_room_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room_id`
[INFO] [stdout]    --> src/matrix/event_handler.rs:602:33
[INFO] [stdout]     |
[INFO] [stdout] 602 |                     if let Some(room_id) = &event.room_id {
[INFO] [stdout]     |                                 ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_room_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room_id`
[INFO] [stdout]    --> src/matrix/event_handler.rs:664:33
[INFO] [stdout]     |
[INFO] [stdout] 664 |                     if let Some(room_id) = &event.room_id {
[INFO] [stdout]     |                                 ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_room_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room_id`
[INFO] [stdout]    --> src/matrix/event_handler.rs:731:33
[INFO] [stdout]     |
[INFO] [stdout] 731 |                     if let Some(room_id) = &event.room_id {
[INFO] [stdout]     |                                 ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_room_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room_id`
[INFO] [stdout]    --> src/matrix/event_handler.rs:797:33
[INFO] [stdout]     |
[INFO] [stdout] 797 |                     if let Some(room_id) = &event.room_id {
[INFO] [stdout]     |                                 ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_room_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `room_id`
[INFO] [stdout]    --> src/matrix/event_handler.rs:857:33
[INFO] [stdout]     |
[INFO] [stdout] 857 |                     if let Some(room_id) = &event.room_id {
[INFO] [stdout]     |                                 ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_room_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `uin`
[INFO] [stdout]    --> src/bridge/portal.rs:249:14
[INFO] [stdout]     |
[INFO] [stdout] 249 |         for (uin, puppet_mxid, displayname) in puppet_mxids {
[INFO] [stdout]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_uin`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `max_permits`
[INFO] [stdout]    --> src/util/perf/semaphore.rs:240:65
[INFO] [stdout]     |
[INFO] [stdout] 240 |     pub fn new(name: impl Into<String>, initial_permits: usize, max_permits: usize) -> Self {
[INFO] [stdout]     |                                                                 ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_max_permits`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `event_type`
[INFO] [stdout]   --> src/crypto/machine.rs:88:9
[INFO] [stdout]    |
[INFO] [stdout] 88 |         event_type: &str,
[INFO] [stdout]    |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_event_type`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `session`
[INFO] [stdout]    --> src/crypto/machine.rs:169:30
[INFO] [stdout]     |
[INFO] [stdout] 169 |     fn encrypt_megolm(&self, session: &MegolmSession, plaintext: &str) -> CryptoResult<String> {
[INFO] [stdout]     |                              ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_session`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `session`
[INFO] [stdout]    --> src/crypto/machine.rs:180:30
[INFO] [stdout]     |
[INFO] [stdout] 180 |     fn decrypt_megolm(&self, session: &MegolmSession, ciphertext: &str) -> CryptoResult<String> {
[INFO] [stdout]     |                              ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_session`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `software`, `status_endpoint`, `message_send_checkpoint_endpoint`, `async_media`, `websocket`, and `ping_interval_seconds` are never read
[INFO] [stdout]   --> src/config/mod.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct HomeserverConfig {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 14 |     pub software: String,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 15 |     pub status_endpoint: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 16 |     pub message_send_checkpoint_endpoint: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 17 |     #[serde(default)]
[INFO] [stdout] 18 |     pub async_media: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 19 |     #[serde(default)]
[INFO] [stdout] 20 |     pub websocket: bool,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 21 |     #[serde(default)]
[INFO] [stdout] 22 |     pub ping_interval_seconds: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `HomeserverConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `max_conn_idle_time` and `max_conn_lifetime` are never read
[INFO] [stdout]   --> src/config/mod.rs:38:9
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub struct DatabaseConfig {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 38 |     pub max_conn_idle_time: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 39 |     pub max_conn_lifetime: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DatabaseConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `displayname` and `avatar` are never read
[INFO] [stdout]   --> src/config/mod.rs:57:9
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub struct BotConfig {
[INFO] [stdout]    |            --------- fields in this struct
[INFO] [stdout] 56 |     pub username: String,
[INFO] [stdout] 57 |     pub displayname: String,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 58 |     pub avatar: String,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `BotConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `address`, `id`, `ephemeral_events`, and `async_transactions` are never read
[INFO] [stdout]   --> src/config/mod.rs:69:9
[INFO] [stdout]    |
[INFO] [stdout] 68 | pub struct AppServiceConfig {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] 69 |     pub address: String,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub id: String,
[INFO] [stdout]    |         ^^
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub ephemeral_events: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 77 |     #[serde(default)]
[INFO] [stdout] 78 |     pub async_transactions: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AppServiceConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `type`, `format`, `filename`, `max_size`, `max_backups`, and `compress` are never read
[INFO] [stdout]   --> src/config/mod.rs:85:9
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub struct LoggingWriterConfig {
[INFO] [stdout]    |            ------------------- fields in this struct
[INFO] [stdout] 85 |     pub r#type: String,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 86 |     pub format: String,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 87 |     #[serde(skip_serializing_if = "Option::is_none")]
[INFO] [stdout] 88 |     pub filename: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 89 |     #[serde(skip_serializing_if = "Option::is_none")]
[INFO] [stdout] 90 |     pub max_size: Option<u64>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 91 |     #[serde(skip_serializing_if = "Option::is_none")]
[INFO] [stdout] 92 |     pub max_backups: Option<u64>,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 93 |     #[serde(skip_serializing_if = "Option::is_none")]
[INFO] [stdout] 94 |     pub compress: Option<bool>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `LoggingWriterConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `min_level` and `writers` are never read
[INFO] [stdout]    --> src/config/mod.rs:99:9
[INFO] [stdout]     |
[INFO] [stdout]  98 | pub struct LoggingConfig {
[INFO] [stdout]     |            ------------- fields in this struct
[INFO] [stdout]  99 |     pub min_level: String,
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout] 100 |     pub writers: Vec<LoggingWriterConfig>,
[INFO] [stdout]     |         ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `LoggingConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `logging` is never read
[INFO] [stdout]    --> src/config/mod.rs:108:9
[INFO] [stdout]     |
[INFO] [stdout] 104 | pub struct Config {
[INFO] [stdout]     |            ------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub logging: LoggingConfig,
[INFO] [stdout]     |         ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Config` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `load_from_bytes` and `format_username` are never used
[INFO] [stdout]    --> src/config/mod.rs:119:12
[INFO] [stdout]     |
[INFO] [stdout] 111 | impl Config {
[INFO] [stdout]     | ----------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 119 |     pub fn load_from_bytes(bytes: &[u8]) -> Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub fn format_username(&self, username: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NAME_QUALITY_NAME` is never used
[INFO] [stdout]  --> src/config/bridge.rs:5:11
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub const NAME_QUALITY_NAME: i8 = 2;
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NAME_QUALITY_UIN` is never used
[INFO] [stdout]  --> src/config/bridge.rs:6:11
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub const NAME_QUALITY_UIN: i8 = 1;
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DoublePuppetConfig` is never constructed
[INFO] [stdout]  --> src/config/bridge.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct DoublePuppetConfig {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `allow`, `appservice`, `require`, `allow_key_sharing`, and `plaintext_mentions` are never read
[INFO] [stdout]   --> src/config/bridge.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct EncryptionConfig {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] 20 |     #[serde(default)]
[INFO] [stdout] 21 |     pub allow: bool,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 25 |     pub appservice: bool,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 26 |     #[serde(default)]
[INFO] [stdout] 27 |     pub require: bool,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 28 |     #[serde(default)]
[INFO] [stdout] 29 |     pub allow_key_sharing: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 30 |     #[serde(default)]
[INFO] [stdout] 31 |     pub plaintext_mentions: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `EncryptionConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `error_after` and `deadline` are never read
[INFO] [stdout]   --> src/config/bridge.rs:36:9
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub struct MessageHandlingTimeout {
[INFO] [stdout]    |            ---------------------- fields in this struct
[INFO] [stdout] 36 |     pub error_after: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 37 |     pub deadline: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MessageHandlingTimeout` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `error_after_duration` and `deadline_duration` are never used
[INFO] [stdout]   --> src/config/bridge.rs:41:12
[INFO] [stdout]    |
[INFO] [stdout] 40 | impl MessageHandlingTimeout {
[INFO] [stdout]    | --------------------------- methods in this implementation
[INFO] [stdout] 41 |     pub fn error_after_duration(&self) -> Option<Duration> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn deadline_duration(&self) -> Option<Duration> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_duration` is never used
[INFO] [stdout]   --> src/config/bridge.rs:52:4
[INFO] [stdout]    |
[INFO] [stdout] 52 | fn parse_duration(s: &str) -> Result<Duration, anyhow::Error> {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `welcome`, `welcome_connected`, `welcome_unconnected`, and `additional_help` are never read
[INFO] [stdout]   --> src/config/bridge.rs:73:9
[INFO] [stdout]    |
[INFO] [stdout] 71 | pub struct ManagementRoomTexts {
[INFO] [stdout]    |            ------------------- fields in this struct
[INFO] [stdout] 72 |     #[serde(default = "default_welcome")]
[INFO] [stdout] 73 |     pub welcome: String,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 74 |     #[serde(default = "default_welcome_connected")]
[INFO] [stdout] 75 |     pub welcome_connected: String,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 76 |     #[serde(default = "default_welcome_unconnected")]
[INFO] [stdout] 77 |     pub welcome_unconnected: String,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 78 |     #[serde(default)]
[INFO] [stdout] 79 |     pub additional_help: String,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ManagementRoomTexts` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]    --> src/config/bridge.rs:115:9
[INFO] [stdout]     |
[INFO] [stdout] 113 | pub struct BridgeConfig {
[INFO] [stdout]     |            ------------ fields in this struct
[INFO] [stdout] 114 |     #[serde(default)]
[INFO] [stdout] 115 |     pub hs_proxy: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     pub displayname_template: String,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub personal_filtering_spaces: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub message_status_events: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 130 |     #[serde(default = "default_message_error_notices")]
[INFO] [stdout] 131 |     pub message_error_notices: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 132 |     #[serde(default = "default_portal_message_buffer")]
[INFO] [stdout] 133 |     pub portal_message_buffer: usize,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 136 |     pub allow_redaction: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub user_avatar_sync: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 142 |     pub sync_direct_chat_list: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 143 |     #[serde(default)]
[INFO] [stdout] 144 |     pub default_bridge_presence: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 145 |     #[serde(default)]
[INFO] [stdout] 146 |     pub send_presence_on_typing: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 149 |     pub double_puppet_server_map: HashMap<String, String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 150 |     #[serde(default)]
[INFO] [stdout] 151 |     pub double_puppet_allow_discovery: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 152 |     #[serde(default)]
[INFO] [stdout] 153 |     pub login_shared_secret_map: HashMap<String, String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 156 |     pub private_chat_portal_meta: String,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 157 |     #[serde(default)]
[INFO] [stdout] 158 |     pub parallel_member_sync: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 159 |     #[serde(default)]
[INFO] [stdout] 160 |     pub resend_bridge_info: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 161 |     #[serde(default)]
[INFO] [stdout] 162 |     pub mute_bridging: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] 163 |     #[serde(default)]
[INFO] [stdout] 164 |     pub allow_user_invite: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 165 |     #[serde(default = "default_federate_rooms")]
[INFO] [stdout] 166 |     pub federate_rooms: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 169 |     pub message_handling_timeout: MessageHandlingTimeout,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 172 |     pub disable_bridge_alerts: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 178 |     pub management_room_text: ManagementRoomTexts,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `BridgeConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_permission` and `format_displayname` are never used
[INFO] [stdout]    --> src/config/bridge.rs:215:12
[INFO] [stdout]     |
[INFO] [stdout] 214 | impl BridgeConfig {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] 215 |     pub fn get_permission(&self, mxid: &str) -> PermissionLevel {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 233 |     pub fn format_displayname(&self, uin: &str, name: &str, remark: &str) -> (String, i8) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/database/mod.rs:69:12
[INFO] [stdout]     |
[INFO] [stdout]  31 | impl Database {
[INFO] [stdout]     | ------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  69 |     pub fn is_sqlite(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 115 |     pub async fn get_user_by_uin(&self, uin: &str) -> Result<Option<User>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 225 |     pub async fn get_puppet_by_custom_mxid(&self, mxid: &str) -> Result<Option<Puppet>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 262 |     pub async fn get_message_by_id(&self, key: &PortalKey, msg_id: &str) -> Result<Option<Message>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 305 |     pub async fn get_last_message(&self, key: &PortalKey) -> Result<Option<Message>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 327 |     pub async fn update_message_mxid(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 356 |     pub async fn delete_message(&self, key: &PortalKey, msg_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `get_by_uin_sqlite` and `get_by_uin_postgres` are never used
[INFO] [stdout]   --> src/database/user.rs:84:9
[INFO] [stdout]    |
[INFO] [stdout] 81 | impl UserQuery {
[INFO] [stdout]    | -------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 84 |         get_by_uin_sqlite,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 93 |         get_by_uin_postgres,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this warning originates in the macro `impl_user_query_for_conn` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `get_by_custom_mxid_sqlite` and `get_by_custom_mxid_postgres` are never used
[INFO] [stdout]    --> src/database/puppet.rs:129:9
[INFO] [stdout]     |
[INFO] [stdout] 126 | impl PuppetQuery {
[INFO] [stdout]     | ---------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 129 |         get_by_custom_mxid_sqlite,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 138 |         get_by_custom_mxid_postgres,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this warning originates in the macro `impl_puppet_query_for_conn` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `MessageErrorType` is never used
[INFO] [stdout]   --> src/database/message.rs:12:10
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum MessageErrorType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `MessageType` is never used
[INFO] [stdout]   --> src/database/message.rs:35:10
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub enum MessageType {
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]    --> src/database/message.rs:218:9
[INFO] [stdout]     |
[INFO] [stdout] 216 | impl MessageQuery {
[INFO] [stdout]     | ----------------- associated functions in this implementation
[INFO] [stdout] 217 |     impl_message_query_for_conn!(
[INFO] [stdout] 218 |         get_by_id_sqlite,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 221 |         get_last_sqlite,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 222 |         insert_sqlite,
[INFO] [stdout] 223 |         update_mxid_sqlite,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 224 |         delete_sqlite,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 229 |         get_by_id_postgres,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 232 |         get_last_postgres,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 233 |         insert_postgres,
[INFO] [stdout] 234 |         update_mxid_postgres,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 235 |         delete_postgres,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this warning originates in the macro `impl_message_query_for_conn` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `http_status` is never read
[INFO] [stdout]    --> src/wechat/protocol.rs:235:9
[INFO] [stdout]     |
[INFO] [stdout] 233 | pub struct ErrorResponse {
[INFO] [stdout]     |            ------------- field in this struct
[INFO] [stdout] 234 |     #[serde(skip)]
[INFO] [stdout] 235 |     pub http_status: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ErrorResponse` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `request`, `as_request`, and `as_response` are never used
[INFO] [stdout]    --> src/wechat/protocol.rs:259:12
[INFO] [stdout]     |
[INFO] [stdout] 258 | impl Message {
[INFO] [stdout]     | ------------ associated items in this implementation
[INFO] [stdout] 259 |     pub fn request(id: i64, mxid: &str, request: &Request) -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 268 |     pub fn as_request(&self) -> Option<Request> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 272 |     pub fn as_response(&self) -> Option<Response> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/wechat/protocol.rs:296:12
[INFO] [stdout]     |
[INFO] [stdout] 295 | impl Response {
[INFO] [stdout]     | ------------- methods in this implementation
[INFO] [stdout] 296 |     pub fn is_success(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 300 |     pub fn as_bool(&self) -> Option<bool> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 304 |     pub fn as_user_info(&self) -> Option<UserInfo> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 308 |     pub fn as_group_info(&self) -> Option<GroupInfo> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 312 |     pub fn as_user_list(&self) -> Option<Vec<UserInfo>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 316 |     pub fn as_group_list(&self) -> Option<Vec<GroupInfo>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 320 |     pub fn as_string_list(&self) -> Option<Vec<String>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 324 |     pub fn as_string(&self) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BlobData` is never constructed
[INFO] [stdout]   --> src/wechat/types.rs:30:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub struct BlobData {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LocationData` is never constructed
[INFO] [stdout]   --> src/wechat/types.rs:39:12
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub struct LocationData {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AppData` is never constructed
[INFO] [stdout]   --> src/wechat/types.rs:49:12
[INFO] [stdout]    |
[INFO] [stdout] 49 | pub struct AppData {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `addr` is never read
[INFO] [stdout]   --> src/wechat/service.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | struct Connection {
[INFO] [stdout]    |        ---------- field in this struct
[INFO] [stdout] 20 |     addr: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Connection` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `handle_json_message` is never used
[INFO] [stdout]    --> src/wechat/service.rs:101:14
[INFO] [stdout]     |
[INFO] [stdout]  38 | impl WechatService {
[INFO] [stdout]     | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 101 |     async fn handle_json_message(&self, json: &str) {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `GroupMember` is never constructed
[INFO] [stdout]  --> src/wechat/client.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct GroupMember {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/wechat/client.rs:27:12
[INFO] [stdout]     |
[INFO] [stdout]  22 | impl WechatClient {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  27 |     pub fn mxid(&self) -> &str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     pub async fn get_user_info(&self, wxid: &str) -> Result<UserInfo> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 128 |     pub async fn get_group_info(&self, group_id: &str) -> Result<GroupInfo> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 145 |     pub async fn get_group_members(&self, group_id: &str) -> Result<Vec<GroupMember>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 162 |     pub async fn get_group_member_nickname(&self, group_id: &str, member_id: &str) -> Result<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 426 |     pub async fn set_nickname(&self, nickname: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 439 |     pub async fn set_avatar(&self, avatar_data: &[u8]) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 453 |     pub async fn get_qrcode(&self) -> Result<Vec<u8>> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 472 |     pub async fn accept_friend(&self, v3: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 485 |     pub async fn create_group(&self, user_ids: &[&str], name: &str) -> Result<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 504 |     pub async fn set_group_name(&self, group_id: &str, name: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 517 |     pub async fn invite_group_member(&self, group_id: &str, user_ids: &[&str]) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 530 |     pub async fn remove_group_member(&self, group_id: &str, user_ids: &[&str]) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 543 |     pub async fn quit_group(&self, group_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 556 |     pub async fn refresh_contacts(&self) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 569 |     pub async fn sync_messages(&self) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `users_by_uin` and `puppets_by_mxid` are never read
[INFO] [stdout]   --> src/bridge/wechat_bridge.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct WechatBridge {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 26 |     users_by_uin: RwLock<HashMap<String, Arc<BridgeUser>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     puppets_by_mxid: RwLock<HashMap<String, Arc<BridgePuppet>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `format_username` is never used
[INFO] [stdout]    --> src/bridge/wechat_bridge.rs:232:12
[INFO] [stdout]     |
[INFO] [stdout]  33 | impl WechatBridge {
[INFO] [stdout]     | ----------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 232 |     pub fn format_username(&self, username: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/bridge/user.rs:19:12
[INFO] [stdout]     |
[INFO] [stdout]  18 | impl BridgeUser {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout]  19 |     pub fn new(mxid: String, db: Database) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  29 |     pub fn with_config(mut self, config: Arc<Config>) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  45 |     pub fn from_db_with_config(user: DbUser, db: Database, config: Arc<Config>) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  56 |     pub fn uid(&self) -> Option<crate::util::UID> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  68 |     pub fn space_room(&self) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  80 |     pub async fn set_uin(&mut self, uin: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     pub async fn set_management_room(&mut self, room_id: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  94 |     pub async fn set_space_room(&mut self, room_id: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 167 |     pub async fn send_management_notice(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 181 |     pub async fn sync_direct_chats(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 195 |     pub async fn sync_groups(
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/bridge/portal.rs:18:12
[INFO] [stdout]     |
[INFO] [stdout]  17 | impl BridgePortal {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout]  18 |     pub fn new(key: PortalKey, db: Database) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  50 |     pub fn mxid(&self) -> Option<&str> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  54 |     pub fn name(&self) -> &str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  58 |     pub fn encrypted(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  62 |     pub fn is_private(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  66 |     pub fn is_group(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  70 |     pub async fn set_mxid(&mut self, mxid: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  76 |     pub async fn set_name(&mut self, name: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  88 |     pub async fn save(&self) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     pub async fn update_matrix_room(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 237 |     pub async fn sync_participants(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 292 |     pub async fn delete(&self) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/bridge/puppet.rs:19:12
[INFO] [stdout]     |
[INFO] [stdout]  18 | impl BridgePuppet {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout]  19 |     pub fn new(uid: UID, db: Database) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  29 |     pub fn with_config(mut self, config: Arc<BridgeConfig>) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  34 |     pub fn with_homeserver(mut self, homeserver: String) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  50 |     pub fn from_db_with_config(puppet: DbPuppet, db: Database, config: Arc<BridgeConfig>) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  61 |     pub fn uin(&self) -> &str {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  65 |     pub fn displayname(&self) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  69 |     pub fn avatar(&self) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  73 |     pub fn custom_mxid(&self) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     pub fn access_token(&self) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  81 |     pub fn mxid(&self, domain: &str, user_prefix: &str) -> String {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  88 |     pub fn is_custom_puppet(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  92 |     pub fn get_custom_client(&self, homeserver: &str) -> Option<MatrixClient> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub async fn set_displayname(&mut self, name: &str, quality: i16) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub async fn set_avatar(&mut self, avatar: &str, avatar_url: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 122 |     pub async fn clear_custom_mxid(&mut self) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     pub async fn sync(
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 172 |     pub async fn register(&self, client: &MatrixClient) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub async fn save(&self) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `NeedsLogin` is never constructed
[INFO] [stdout]   --> src/bridge/command.rs:94:5
[INFO] [stdout]    |
[INFO] [stdout] 91 | pub enum CommandResult {
[INFO] [stdout]    |          ------------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 94 |     NeedsLogin,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CommandResult` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `HTML_TAG_REGEX` is never used
[INFO] [stdout]  --> src/formatter/mod.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub static HTML_TAG_REGEX: Lazy<Regex> = Lazy::new(|| Regex::new(r"<[^>]*>").unwrap());
[INFO] [stdout]   |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `strip_html` is never used
[INFO] [stdout]   --> src/formatter/mod.rs:10:8
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub fn strip_html(html: &str) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `html_to_plain` is never used
[INFO] [stdout]   --> src/formatter/mod.rs:14:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub fn html_to_plain(html: &str) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `matrix_to_wechat` is never used
[INFO] [stdout]   --> src/formatter/mod.rs:30:8
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub fn matrix_to_wechat(text: &str) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `UNICODE_TO_WECHAT` is never used
[INFO] [stdout]    --> src/formatter/emoji.rs:137:8
[INFO] [stdout]     |
[INFO] [stdout] 137 | static UNICODE_TO_WECHAT: Lazy<HashMap<&'static str, &'static str>> = Lazy::new(|| {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `unicode_to_wechat` is never used
[INFO] [stdout]    --> src/formatter/emoji.rs:153:8
[INFO] [stdout]     |
[INFO] [stdout] 153 | pub fn unicode_to_wechat(text: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `event_type`
[INFO] [stdout]   --> src/crypto/machine.rs:88:9
[INFO] [stdout]    |
[INFO] [stdout] 88 |         event_type: &str,
[INFO] [stdout]    |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_event_type`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `matrix_to_wechat` is never used
[INFO] [stdout]  --> src/formatter/matrix_to_wechat.rs:1:8
[INFO] [stdout]   |
[INFO] [stdout] 1 | pub fn matrix_to_wechat(text: &str) -> String {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wechat_to_matrix` is never used
[INFO] [stdout]  --> src/formatter/wechat_to_matrix.rs:1:8
[INFO] [stdout]   |
[INFO] [stdout] 1 | pub fn wechat_to_matrix(text: &str) -> String {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ContactInfo` is never constructed
[INFO] [stdout]  --> src/util/contact.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct ContactInfo {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/util/contact.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | impl ContactInfo {
[INFO] [stdout]    | ---------------- associated function in this implementation
[INFO] [stdout] 11 |     pub fn new(uin: impl Into<String>, name: impl Into<String>, remark: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BackoffConfig` is never constructed
[INFO] [stdout]  --> src/util/retry/backoff.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct BackoffConfig {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ExponentialBackoff` is never constructed
[INFO] [stdout]   --> src/util/retry/backoff.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct ExponentialBackoff {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `next_delay`, `add_jitter`, `reset`, `retry_count`, and `is_exhausted` are never used
[INFO] [stdout]   --> src/util/retry/backoff.rs:32:12
[INFO] [stdout]    |
[INFO] [stdout] 31 | impl ExponentialBackoff {
[INFO] [stdout]    | ----------------------- associated items in this implementation
[INFO] [stdout] 32 |     pub fn new(config: BackoffConfig) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub fn next_delay(&mut self) -> Option<Duration> {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     fn add_jitter(&self, delay: f64) -> f64 {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub fn reset(&mut self) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub fn retry_count(&self) -> u32 {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub fn is_exhausted(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rand_factor` is never used
[INFO] [stdout]   --> src/util/retry/backoff.rs:78:4
[INFO] [stdout]    |
[INFO] [stdout] 78 | fn rand_factor() -> f64 {
[INFO] [stdout]    |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `BackoffStrategy` is never used
[INFO] [stdout]   --> src/util/retry/backoff.rs:88:10
[INFO] [stdout]    |
[INFO] [stdout] 88 | pub enum BackoffStrategy {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `create_backoff` is never used
[INFO] [stdout]   --> src/util/retry/backoff.rs:96:12
[INFO] [stdout]    |
[INFO] [stdout] 95 | impl BackoffStrategy {
[INFO] [stdout]    | -------------------- method in this implementation
[INFO] [stdout] 96 |     pub fn create_backoff(&self, config: BackoffConfig) -> Box<dyn Backoff + Send + Sync> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `Backoff` is never used
[INFO] [stdout]    --> src/util/retry/backoff.rs:106:11
[INFO] [stdout]     |
[INFO] [stdout] 106 | pub trait Backoff {
[INFO] [stdout]     |           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LinearBackoff` is never constructed
[INFO] [stdout]    --> src/util/retry/backoff.rs:148:12
[INFO] [stdout]     |
[INFO] [stdout] 148 | pub struct LinearBackoff {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> src/util/retry/backoff.rs:155:12
[INFO] [stdout]     |
[INFO] [stdout] 154 | impl LinearBackoff {
[INFO] [stdout]     | ------------------ associated function in this implementation
[INFO] [stdout] 155 |     pub fn new(config: BackoffConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FixedBackoff` is never constructed
[INFO] [stdout]    --> src/util/retry/backoff.rs:195:12
[INFO] [stdout]     |
[INFO] [stdout] 195 | pub struct FixedBackoff {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> src/util/retry/backoff.rs:201:12
[INFO] [stdout]     |
[INFO] [stdout] 200 | impl FixedBackoff {
[INFO] [stdout]     | ----------------- associated function in this implementation
[INFO] [stdout] 201 |     pub fn new(config: BackoffConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ImmediateBackoff` is never constructed
[INFO] [stdout]    --> src/util/retry/backoff.rs:233:12
[INFO] [stdout]     |
[INFO] [stdout] 233 | pub struct ImmediateBackoff {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> src/util/retry/backoff.rs:239:12
[INFO] [stdout]     |
[INFO] [stdout] 238 | impl ImmediateBackoff {
[INFO] [stdout]     | --------------------- associated function in this implementation
[INFO] [stdout] 239 |     pub fn new(config: BackoffConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RetryHandler` is never constructed
[INFO] [stdout]  --> src/util/retry/handler.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct RetryHandler {
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `default_retry`, and `execute` are never used
[INFO] [stdout]   --> src/util/retry/handler.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | impl RetryHandler {
[INFO] [stdout]    | ----------------- associated items in this implementation
[INFO] [stdout] 13 |     pub fn new(config: BackoffConfig) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |     pub fn default_retry() -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     pub async fn execute<F, Fut, T, E>(&mut self, mut f: F) -> Result<T, E>
[INFO] [stdout]    |                  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `IsRetryable` is never used
[INFO] [stdout]   --> src/util/retry/handler.rs:50:11
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub trait IsRetryable {
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `with_retry` is never used
[INFO] [stdout]   --> src/util/retry/handler.rs:82:14
[INFO] [stdout]    |
[INFO] [stdout] 82 | pub async fn with_retry<F, Fut, T, E>(f: F) -> Result<T, E>
[INFO] [stdout]    |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `with_retry_config` is never used
[INFO] [stdout]   --> src/util/retry/handler.rs:91:14
[INFO] [stdout]    |
[INFO] [stdout] 91 | pub async fn with_retry_config<F, Fut, T, E>(config: BackoffConfig, f: F) -> Result<T, E>
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `RetryResult` is never used
[INFO] [stdout]    --> src/util/retry/handler.rs:101:10
[INFO] [stdout]     |
[INFO] [stdout] 101 | pub enum RetryResult<T> {
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RetryPolicy` is never constructed
[INFO] [stdout]    --> src/util/retry/handler.rs:107:12
[INFO] [stdout]     |
[INFO] [stdout] 107 | pub struct RetryPolicy {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `with_initial_delay`, `with_max_delay`, `with_multiplier`, and `into_config` are never used
[INFO] [stdout]    --> src/util/retry/handler.rs:126:12
[INFO] [stdout]     |
[INFO] [stdout] 125 | impl RetryPolicy {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] 126 |     pub fn new(max_retries: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 133 |     pub fn with_initial_delay(mut self, delay: Duration) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub fn with_max_delay(mut self, delay: Duration) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub fn with_multiplier(mut self, multiplier: f64) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 148 |     pub fn into_config(self) -> BackoffConfig {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ConnectionState` is never used
[INFO] [stdout]  --> src/util/retry/reconnection.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub enum ConnectionState {
[INFO] [stdout]   |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ReconnectionManager` is never constructed
[INFO] [stdout]   --> src/util/retry/reconnection.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct ReconnectionManager {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/util/retry/reconnection.rs:24:12
[INFO] [stdout]     |
[INFO] [stdout]  23 | impl ReconnectionManager {
[INFO] [stdout]     | ------------------------ associated items in this implementation
[INFO] [stdout]  24 |     pub fn new(config: BackoffConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  32 |     pub fn default_manager() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  42 |     pub async fn state(&self) -> ConnectionState {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  46 |     pub async fn set_state(&self, state: ConnectionState) {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  54 |     pub async fn is_connected(&self) -> bool {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  58 |     pub async fn wait_for_reconnect_delay(&self) -> bool {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  84 |     pub async fn on_connected(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub async fn on_disconnected(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub async fn on_connecting(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 100 |     pub async fn on_reconnecting(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub async fn on_failed(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub async fn stop(&self) {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub async fn reset(&self) {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     pub async fn retry_count(&self) -> u32 {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ReconnectEvent` is never used
[INFO] [stdout]    --> src/util/retry/reconnection.rs:124:10
[INFO] [stdout]     |
[INFO] [stdout] 124 | pub enum ReconnectEvent {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ReconnectEventEmitter` is never constructed
[INFO] [stdout]    --> src/util/retry/reconnection.rs:132:12
[INFO] [stdout]     |
[INFO] [stdout] 132 | pub struct ReconnectEventEmitter {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `emit` are never used
[INFO] [stdout]    --> src/util/retry/reconnection.rs:137:12
[INFO] [stdout]     |
[INFO] [stdout] 136 | impl ReconnectEventEmitter {
[INFO] [stdout]     | -------------------------- associated items in this implementation
[INFO] [stdout] 137 |     pub fn new(tx: mpsc::Sender<ReconnectEvent>) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     pub async fn emit(&self, event: ReconnectEvent) {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ReconnectEventReceiver` is never constructed
[INFO] [stdout]    --> src/util/retry/reconnection.rs:148:12
[INFO] [stdout]     |
[INFO] [stdout] 148 | pub struct ReconnectEventReceiver {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `recv` are never used
[INFO] [stdout]    --> src/util/retry/reconnection.rs:153:12
[INFO] [stdout]     |
[INFO] [stdout] 152 | impl ReconnectEventReceiver {
[INFO] [stdout]     | --------------------------- associated items in this implementation
[INFO] [stdout] 153 |     pub fn new(rx: mpsc::Receiver<ReconnectEvent>) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 157 |     pub async fn recv(&mut self) -> Option<ReconnectEvent> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `session`
[INFO] [stdout]    --> src/crypto/machine.rs:169:30
[INFO] [stdout]     |
[INFO] [stdout] 169 |     fn encrypt_megolm(&self, session: &MegolmSession, plaintext: &str) -> CryptoResult<String> {
[INFO] [stdout]     |                              ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_session`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_reconnect_channel` is never used
[INFO] [stdout]    --> src/util/retry/reconnection.rs:162:8
[INFO] [stdout]     |
[INFO] [stdout] 162 | pub fn create_reconnect_channel() -> (ReconnectEventEmitter, ReconnectEventReceiver) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConnectionGuard` is never constructed
[INFO] [stdout]    --> src/util/retry/reconnection.rs:167:12
[INFO] [stdout]     |
[INFO] [stdout] 167 | pub struct ConnectionGuard {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `protect` are never used
[INFO] [stdout]    --> src/util/retry/reconnection.rs:172:12
[INFO] [stdout]     |
[INFO] [stdout] 171 | impl ConnectionGuard {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout] 172 |     pub fn new(manager: ReconnectionManager) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     pub async fn protect<F, Fut, T, E>(&self, f: F) -> Result<T, E>
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `QueueMessage` is never constructed
[INFO] [stdout]  --> src/util/perf/queue.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct QueueMessage<T> {
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `with_priority`, `with_max_retries`, `increment_retry`, and `can_retry` are never used
[INFO] [stdout]   --> src/util/perf/queue.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl<T> QueueMessage<T> {
[INFO] [stdout]    | ----------------------- associated items in this implementation
[INFO] [stdout] 18 |     pub fn new(id: impl Into<String>, data: T) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn with_priority(mut self, priority: u8) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 34 |     pub fn with_max_retries(mut self, max_retries: u32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     pub fn increment_retry(&mut self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub fn can_retry(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MessageQueue` is never constructed
[INFO] [stdout]   --> src/util/perf/queue.rs:53:12
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub struct MessageQueue<T> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/util/perf/queue.rs:61:12
[INFO] [stdout]     |
[INFO] [stdout]  60 | impl<T> MessageQueue<T> {
[INFO] [stdout]     | ----------------------- associated items in this implementation
[INFO] [stdout]  61 |     pub fn new(capacity: usize, max_concurrency: usize) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  70 |     pub async fn push(&self, message: QueueMessage<T>) -> Result<(), QueueError> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  84 |     pub async fn push_front(&self, message: QueueMessage<T>) -> Result<(), QueueError> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub async fn pop(&self) -> Option<QueueMessage<T>> {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub async fn wait_for_message(&self) -> QueueMessage<T> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 115 |     pub async fn len(&self) -> usize {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 119 |     pub async fn is_empty(&self) -> bool {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 123 |     pub async fn clear(&self) {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     pub fn concurrency_semaphore(&self) -> Arc<Semaphore> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     pub async fn acquire_concurrency(&self) -> Option<tokio::sync::SemaphorePermit<'_>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `QueueError` is never used
[INFO] [stdout]    --> src/util/perf/queue.rs:148:10
[INFO] [stdout]     |
[INFO] [stdout] 148 | pub enum QueueError {
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PriorityQueue` is never constructed
[INFO] [stdout]    --> src/util/perf/queue.rs:162:12
[INFO] [stdout]     |
[INFO] [stdout] 162 | pub struct PriorityQueue<T> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `push`, `pop`, `wait_for_message`, `len`, and `is_empty` are never used
[INFO] [stdout]    --> src/util/perf/queue.rs:171:12
[INFO] [stdout]     |
[INFO] [stdout] 170 | impl<T> PriorityQueue<T> {
[INFO] [stdout]     | ------------------------ associated items in this implementation
[INFO] [stdout] 171 |     pub fn new(capacity: usize) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 181 |     pub async fn push(&self, message: QueueMessage<T>) -> Result<(), QueueError> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub async fn pop(&self) -> Option<QueueMessage<T>> {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 219 |     pub async fn wait_for_message(&self) -> QueueMessage<T> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 228 |     pub async fn len(&self) -> usize {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 235 |     pub async fn is_empty(&self) -> bool {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `session`
[INFO] [stdout]    --> src/crypto/machine.rs:180:30
[INFO] [stdout]     |
[INFO] [stdout] 180 |     fn decrypt_megolm(&self, session: &MegolmSession, ciphertext: &str) -> CryptoResult<String> {
[INFO] [stdout]     |                              ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_session`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DelayedQueue` is never constructed
[INFO] [stdout]    --> src/util/perf/queue.rs:255:12
[INFO] [stdout]     |
[INFO] [stdout] 255 | pub struct DelayedQueue<T> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `push_after`, `pop_ready`, `wait_for_ready`, and `len` are never used
[INFO] [stdout]    --> src/util/perf/queue.rs:261:12
[INFO] [stdout]     |
[INFO] [stdout] 260 | impl<T> DelayedQueue<T> {
[INFO] [stdout]     | ----------------------- associated items in this implementation
[INFO] [stdout] 261 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 268 |     pub async fn push_after(&self, delay: Duration, message: QueueMessage<T>) {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 278 |     pub async fn pop_ready(&self) -> Option<QueueMessage<T>> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 291 |     pub async fn wait_for_ready(&self) -> QueueMessage<T> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 313 |     pub async fn len(&self) -> usize {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CacheEntry` is never constructed
[INFO] [stdout]  --> src/util/perf/cache.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct CacheEntry<V> {
[INFO] [stdout]   |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `is_expired`, `hit`, and `age` are never used
[INFO] [stdout]   --> src/util/perf/cache.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | impl<V> CacheEntry<V> {
[INFO] [stdout]    | --------------------- associated items in this implementation
[INFO] [stdout] 17 |     pub fn new(value: V, ttl: Option<Duration>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub fn is_expired(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn hit(&mut self) {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 35 |     pub fn age(&self) -> Duration {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Cache` is never constructed
[INFO] [stdout]   --> src/util/perf/cache.rs:40:12
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub struct Cache<K, V> {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/util/perf/cache.rs:51:12
[INFO] [stdout]     |
[INFO] [stdout]  46 | / impl<K, V> Cache<K, V>
[INFO] [stdout]  47 | | where
[INFO] [stdout]  48 | |     K: Eq + Hash + Clone + std::fmt::Debug,
[INFO] [stdout]  49 | |     V: Clone,
[INFO] [stdout]     | |_____________- associated items in this implementation
[INFO] [stdout]  50 |   {
[INFO] [stdout]  51 |       pub fn new(max_size: usize) -> Self {
[INFO] [stdout]     |              ^^^
[INFO] [stdout] ...
[INFO] [stdout]  59 |       pub fn with_ttl(max_size: usize, ttl: Duration) -> Self {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  67 |       pub async fn get(&self, key: &K) -> Option<V> {
[INFO] [stdout]     |                    ^^^
[INFO] [stdout] ...
[INFO] [stdout]  82 |       pub async fn get_entry(&self, key: &K) -> Option<CacheEntry<V>> {
[INFO] [stdout]     |                    ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |       pub async fn insert(&self, key: K, value: V) {
[INFO] [stdout]     |                    ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |       pub async fn insert_with_ttl(&self, key: K, value: V, ttl: Option<Duration>) {
[INFO] [stdout]     |                    ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |       fn evict_oldest(&self, inner: &mut HashMap<K, CacheEntry<V>>) {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 123 |       pub async fn remove(&self, key: &K) -> Option<V> {
[INFO] [stdout]     |                    ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 128 |       pub async fn contains(&self, key: &K) -> bool {
[INFO] [stdout]     |                    ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 133 |       pub async fn clear(&self) {
[INFO] [stdout]     |                    ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 137 |       pub async fn len(&self) -> usize {
[INFO] [stdout]     |                    ^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |       pub async fn is_empty(&self) -> bool {
[INFO] [stdout]     |                    ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 145 |       pub async fn cleanup_expired(&self) {
[INFO] [stdout]     |                    ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 153 |       pub async fn stats(&self) -> CacheStats {
[INFO] [stdout]     |                    ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CacheStats` is never constructed
[INFO] [stdout]    --> src/util/perf/cache.rs:178:12
[INFO] [stdout]     |
[INFO] [stdout] 178 | pub struct CacheStats {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LruCache` is never constructed
[INFO] [stdout]    --> src/util/perf/cache.rs:184:12
[INFO] [stdout]     |
[INFO] [stdout] 184 | pub struct LruCache<K, V> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/util/perf/cache.rs:194:12
[INFO] [stdout]     |
[INFO] [stdout] 189 | / impl<K, V> LruCache<K, V>
[INFO] [stdout] 190 | | where
[INFO] [stdout] 191 | |     K: Eq + Hash + Clone,
[INFO] [stdout] 192 | |     V: Clone,
[INFO] [stdout]     | |_____________- associated items in this implementation
[INFO] [stdout] 193 |   {
[INFO] [stdout] 194 |       pub fn new(capacity: usize) -> Self {
[INFO] [stdout]     |              ^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |       pub fn with_ttl(capacity: usize, ttl: Duration) -> Self {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 212 |       pub async fn get(&self, key: &K) -> Option<V>
[INFO] [stdout]     |                    ^^^
[INFO] [stdout] ...
[INFO] [stdout] 230 |       pub async fn insert(&self, key: K, value: V) {
[INFO] [stdout]     |                    ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 235 |       pub async fn insert_with_ttl(&self, key: K, value: V, ttl: Option<Duration>) {
[INFO] [stdout]     |                    ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 240 |       pub async fn remove(&self, key: &K) -> Option<V>
[INFO] [stdout]     |                    ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 247 |       pub async fn contains(&self, key: &K) -> bool
[INFO] [stdout]     |                    ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 255 |       pub async fn clear(&self) {
[INFO] [stdout]     |                    ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 259 |       pub async fn len(&self) -> usize {
[INFO] [stdout]     |                    ^^^
[INFO] [stdout] ...
[INFO] [stdout] 263 |       pub async fn is_empty(&self) -> bool {
[INFO] [stdout]     |                    ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `ToOwned` is never used
[INFO] [stdout]    --> src/util/perf/cache.rs:277:11
[INFO] [stdout]     |
[INFO] [stdout] 277 | pub trait ToOwned {
[INFO] [stdout]     |           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LruCache` is never constructed
[INFO] [stdout]    --> src/util/perf/cache.rs:293:16
[INFO] [stdout]     |
[INFO] [stdout] 293 |     pub struct LruCache<K, V> {
[INFO] [stdout]     |                ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/util/perf/cache.rs:300:16
[INFO] [stdout]     |
[INFO] [stdout] 299 |     impl<K: Eq + Hash + Clone, V> LruCache<K, V> {
[INFO] [stdout]     |     -------------------------------------------- associated items in this implementation
[INFO] [stdout] 300 |         pub fn new(capacity: std::num::NonZeroUsize) -> Self {
[INFO] [stdout]     |                ^^^
[INFO] [stdout] ...
[INFO] [stdout] 308 |         pub fn get_mut<Q>(&mut self, key: &Q) -> Option<&mut V>
[INFO] [stdout]     |                ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 322 |         pub fn put(&mut self, key: K, value: V) {
[INFO] [stdout]     |                ^^^
[INFO] [stdout] ...
[INFO] [stdout] 336 |         pub fn pop<Q>(&mut self, key: &Q) -> Option<(K, V)>
[INFO] [stdout]     |                ^^^
[INFO] [stdout] ...
[INFO] [stdout] 350 |         pub fn contains<Q>(&self, key: &Q) -> bool
[INFO] [stdout]     |                ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 358 |         pub fn clear(&mut self) {
[INFO] [stdout]     |                ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 363 |         pub fn len(&self) -> usize {
[INFO] [stdout]     |                ^^^
[INFO] [stdout] ...
[INFO] [stdout] 367 |         pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |                ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConcurrencyLimiter` is never constructed
[INFO] [stdout]  --> src/util/perf/semaphore.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct ConcurrencyLimiter {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/util/perf/semaphore.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | impl ConcurrencyLimiter {
[INFO] [stdout]    | ----------------------- associated items in this implementation
[INFO] [stdout] 13 |     pub fn new(name: impl Into<String>, max_permits: usize) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub async fn acquire(&self) -> SemaphorePermit<'_> {
[INFO] [stdout]    |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 26 |     pub async fn try_acquire(&self) -> Option<SemaphorePermit<'_>> {
[INFO] [stdout]    |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     pub async fn acquire_timeout(&self, timeout: Duration) -> Option<SemaphorePermit<'_>> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub fn available_permits(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub fn max_permits(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 49 |     pub fn name(&self) -> &str {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MultiLimiter` is never constructed
[INFO] [stdout]   --> src/util/perf/semaphore.rs:64:12
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub struct MultiLimiter {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `acquire_all` are never used
[INFO] [stdout]   --> src/util/perf/semaphore.rs:69:12
[INFO] [stdout]    |
[INFO] [stdout] 68 | impl MultiLimiter {
[INFO] [stdout]    | ----------------- associated items in this implementation
[INFO] [stdout] 69 |     pub fn new(limiters: Vec<ConcurrencyLimiter>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub async fn acquire_all(&self) -> Vec<SemaphorePermit<'_>> {
[INFO] [stdout]    |                  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RateLimiter` is never constructed
[INFO] [stdout]   --> src/util/perf/semaphore.rs:82:12
[INFO] [stdout]    |
[INFO] [stdout] 82 | pub struct RateLimiter {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/util/perf/semaphore.rs:90:12
[INFO] [stdout]     |
[INFO] [stdout]  89 | impl RateLimiter {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  90 |     pub fn new(name: impl Into<String>, max_permits: u32, refill_rate: Duration) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  99 |     pub async fn try_acquire(&self) -> bool {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 109 |     pub async fn acquire(&self) {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 119 |     pub async fn acquire_timeout(&self, timeout: Duration) -> bool {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     async fn refill(&self) {
[INFO] [stdout]     |              ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 140 |     pub async fn available(&self) -> u32 {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub fn name(&self) -> &str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TokenBucket` is never constructed
[INFO] [stdout]    --> src/util/perf/semaphore.rs:160:12
[INFO] [stdout]     |
[INFO] [stdout] 160 | pub struct TokenBucket {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `try_consume`, `consume`, `refill`, `available`, and `name` are never used
[INFO] [stdout]    --> src/util/perf/semaphore.rs:169:12
[INFO] [stdout]     |
[INFO] [stdout] 168 | impl TokenBucket {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] 169 |     pub fn new(name: impl Into<String>, max_tokens: f64, refill_per_second: f64) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 179 |     pub async fn try_consume(&self, tokens: f64) -> bool {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     pub async fn consume(&self, tokens: f64) {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     async fn refill(&self) {
[INFO] [stdout]     |              ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 210 |     pub async fn available(&self) -> f64 {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 215 |     pub fn name(&self) -> &str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AdaptiveLimiter` is never constructed
[INFO] [stdout]    --> src/util/perf/semaphore.rs:232:12
[INFO] [stdout]     |
[INFO] [stdout] 232 | pub struct AdaptiveLimiter {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `acquire`, `report_success`, `report_failure`, `adjust`, and `name` are never used
[INFO] [stdout]    --> src/util/perf/semaphore.rs:240:12
[INFO] [stdout]     |
[INFO] [stdout] 239 | impl AdaptiveLimiter {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout] 240 |     pub fn new(name: impl Into<String>, initial_permits: usize, max_permits: usize) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 249 |     pub async fn acquire(&self) -> SemaphorePermit<'_> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 253 |     pub async fn report_success(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 258 |     pub async fn report_failure(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 263 |     pub async fn adjust(&self) {
[INFO] [stdout]     |                  ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 282 |     pub fn name(&self) -> &str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `as_token`, `bot_mxid`, `bot_client`, and `homeserver` are never read
[INFO] [stdout]   --> src/matrix/appservice.rs:13:9
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct AppService {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 13 |     pub as_token: String,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 14 |     pub hs_token: String,
[INFO] [stdout] 15 |     pub bot_mxid: String,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 16 |     pub bot_client: Arc<MatrixClient>,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 17 |     pub homeserver: String,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `start` is never used
[INFO] [stdout]   --> src/matrix/appservice.rs:46:18
[INFO] [stdout]    |
[INFO] [stdout] 26 | impl AppService {
[INFO] [stdout]    | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub async fn start(self: Arc<Self>, addr: impl Into<String> + 'static) -> anyhow::Result<()> {
[INFO] [stdout]    |                  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TransactionHandler` is never constructed
[INFO] [stdout]   --> src/matrix/appservice.rs:66:8
[INFO] [stdout]    |
[INFO] [stdout] 66 | struct TransactionHandler {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `handle` and `verify_auth` are never used
[INFO] [stdout]    --> src/matrix/appservice.rs:72:14
[INFO] [stdout]     |
[INFO] [stdout]  71 | impl TransactionHandler {
[INFO] [stdout]     | ----------------------- methods in this implementation
[INFO] [stdout]  72 |     async fn handle(&self, req: &mut Request, res: &mut Response, depot: &mut Depot) {
[INFO] [stdout]     |              ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 100 |     fn verify_auth(&self, auth: &Option<String>) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UserHandler` is never constructed
[INFO] [stdout]    --> src/matrix/appservice.rs:110:8
[INFO] [stdout]     |
[INFO] [stdout] 110 | struct UserHandler {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `handle` and `verify_auth` are never used
[INFO] [stdout]    --> src/matrix/appservice.rs:116:14
[INFO] [stdout]     |
[INFO] [stdout] 115 | impl UserHandler {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] 116 |     async fn handle(&self, req: &mut Request, res: &mut Response, depot: &mut Depot) {
[INFO] [stdout]     |              ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 133 |     fn verify_auth(&self, auth: &Option<String>) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RoomHandler` is never constructed
[INFO] [stdout]    --> src/matrix/appservice.rs:143:8
[INFO] [stdout]     |
[INFO] [stdout] 143 | struct RoomHandler {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `handle` and `verify_auth` are never used
[INFO] [stdout]    --> src/matrix/appservice.rs:149:14
[INFO] [stdout]     |
[INFO] [stdout] 148 | impl RoomHandler {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] 149 |     async fn handle(&self, req: &mut Request, res: &mut Response, depot: &mut Depot) {
[INFO] [stdout]     |              ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 162 |     fn verify_auth(&self, auth: &Option<String>) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `format_mxid` is never used
[INFO] [stdout]    --> src/matrix/appservice.rs:172:8
[INFO] [stdout]     |
[INFO] [stdout] 172 | pub fn format_mxid(localpart: &str, domain: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_mxid` is never used
[INFO] [stdout]    --> src/matrix/appservice.rs:176:8
[INFO] [stdout]     |
[INFO] [stdout] 176 | pub fn parse_mxid(mxid: &str) -> Option<(String, String)> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_mxid` is never used
[INFO] [stdout]    --> src/matrix/appservice.rs:188:8
[INFO] [stdout]     |
[INFO] [stdout] 188 | pub fn is_mxid(mxid: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `localpart` is never used
[INFO] [stdout]    --> src/matrix/appservice.rs:192:8
[INFO] [stdout]     |
[INFO] [stdout] 192 | pub fn localpart(mxid: &str) -> Option<String> {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `server_name` is never used
[INFO] [stdout]    --> src/matrix/appservice.rs:196:8
[INFO] [stdout]     |
[INFO] [stdout] 196 | pub fn server_name(mxid: &str) -> Option<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `make_wechat_user_mxid` is never used
[INFO] [stdout]    --> src/matrix/appservice.rs:200:8
[INFO] [stdout]     |
[INFO] [stdout] 200 | pub fn make_wechat_user_mxid(prefix: &str, uin: &str, domain: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `make_wechat_room_mxid` is never used
[INFO] [stdout]    --> src/matrix/appservice.rs:204:8
[INFO] [stdout]     |
[INFO] [stdout] 204 | pub fn make_wechat_room_mxid(prefix: &str, chat_id: &str, domain: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/matrix/client.rs:73:18
[INFO] [stdout]     |
[INFO] [stdout]  18 | impl MatrixClient {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  73 |     pub async fn get_user_id(&self) -> Result<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  95 |     pub async fn send_text(&self, room_id: &str, text: impl Into<String>) -> Result<String> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     pub async fn send_emote(&self, room_id: &str, text: impl Into<String>) -> Result<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 156 |     pub async fn set_room_topic(&self, room_id: &str, topic: &str) -> Result<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 161 |     pub async fn set_room_avatar(&self, room_id: &str, url: &str) -> Result<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 178 |     pub async fn invite_user(&self, room_id: &str, user_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 185 |     pub async fn kick_user(&self, room_id: &str, user_id: &str, reason: Option<&str>) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 195 |     pub async fn set_membership(&self, room_id: &str, user_id: &str, content: &RoomMemberContent) -> Result<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 205 |     pub async fn get_joined_members(&self, room_id: &str) -> Result<JoinedMembersResponse> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 210 |     pub async fn get_room_state(&self, room_id: &str, event_type: &str, state_key: &str) -> Result<serde_json::Value> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 218 |     pub async fn set_displayname(&self, user_id: &str, displayname: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 225 |     pub async fn set_avatar_url(&self, user_id: &str, avatar_url: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 232 |     pub async fn get_profile(&self, user_id: &str) -> Result<ProfileResponse> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 295 |     pub async fn get_room_alias(&self, alias: &str) -> Result<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 304 |     pub async fn set_room_alias(&self, room_id: &str, alias: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 311 |     pub async fn sync(&self, since: Option<&str>, timeout_ms: u64) -> Result<serde_json::Value> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 320 |     pub async fn get_event(&self, room_id: &str, event_id: &str) -> Result<RoomEvent> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 325 |     pub async fn set_presence(&self, presence: &str, status_msg: Option<&str>) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 336 |     pub async fn set_typing(&self, room_id: &str, typing: bool, timeout: Option<u32>) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 349 |     pub async fn send_read_receipt(&self, room_id: &str, event_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MatrixClientBuilder` is never constructed
[INFO] [stdout]    --> src/matrix/client.rs:357:12
[INFO] [stdout]     |
[INFO] [stdout] 357 | pub struct MatrixClientBuilder {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `user_id`, and `build` are never used
[INFO] [stdout]    --> src/matrix/client.rs:364:12
[INFO] [stdout]     |
[INFO] [stdout] 363 | impl MatrixClientBuilder {
[INFO] [stdout]     | ------------------------ associated items in this implementation
[INFO] [stdout] 364 |     pub fn new(homeserver: impl Into<String>, access_token: impl Into<String>) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 372 |     pub fn user_id(mut self, user_id: impl Into<String>) -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 377 |     pub fn build(self) -> MatrixClient {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `ensure_bot_client` is never used
[INFO] [stdout]    --> src/matrix/client.rs:386:8
[INFO] [stdout]     |
[INFO] [stdout] 386 | pub fn ensure_bot_client(homeserver: &str, token: &str, bot_mxid: &str) -> Arc<MatrixClient> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EphemeralEvent` is never constructed
[INFO] [stdout]   --> src/matrix/types.rs:26:12
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub struct EphemeralEvent {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ToDeviceEvent` is never constructed
[INFO] [stdout]   --> src/matrix/types.rs:36:12
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub struct ToDeviceEvent {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EphemeralData` is never constructed
[INFO] [stdout]   --> src/matrix/types.rs:51:12
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub struct EphemeralData {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ToDeviceData` is never constructed
[INFO] [stdout]   --> src/matrix/types.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub struct ToDeviceData {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `text`, `image`, `file`, `video`, and `audio` are never used
[INFO] [stdout]    --> src/matrix/types.rs:77:12
[INFO] [stdout]     |
[INFO] [stdout]  76 | impl EventContent {
[INFO] [stdout]     | ----------------- associated functions in this implementation
[INFO] [stdout]  77 |     pub fn text(body: impl Into<String>) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub fn image(body: impl Into<String>, url: impl Into<String>) -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 121 |     pub fn file(body: impl Into<String>, url: impl Into<String>) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub fn video(body: impl Into<String>, url: impl Into<String>) -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub fn audio(body: impl Into<String>, url: impl Into<String>) -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RoomMemberContent` is never constructed
[INFO] [stdout]    --> src/matrix/types.rs:156:12
[INFO] [stdout]     |
[INFO] [stdout] 156 | pub struct RoomMemberContent {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `join`, `join_with`, `leave`, and `invite` are never used
[INFO] [stdout]    --> src/matrix/types.rs:165:12
[INFO] [stdout]     |
[INFO] [stdout] 164 | impl RoomMemberContent {
[INFO] [stdout]     | ---------------------- associated functions in this implementation
[INFO] [stdout] 165 |     pub fn join() -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 173 |     pub fn join_with(displayname: impl Into<String>, avatar_url: impl Into<String>) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 181 |     pub fn leave() -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 189 |     pub fn invite() -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RoomCreateContent` is never constructed
[INFO] [stdout]    --> src/matrix/types.rs:199:12
[INFO] [stdout]     |
[INFO] [stdout] 199 | pub struct RoomCreateContent {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_room_version` is never used
[INFO] [stdout]    --> src/matrix/types.rs:205:4
[INFO] [stdout]     |
[INFO] [stdout] 205 | fn default_room_version() -> String {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RoomTopicContent` is never constructed
[INFO] [stdout]    --> src/matrix/types.rs:215:12
[INFO] [stdout]     |
[INFO] [stdout] 215 | pub struct RoomTopicContent {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RoomAvatarContent` is never constructed
[INFO] [stdout]    --> src/matrix/types.rs:220:12
[INFO] [stdout]     |
[INFO] [stdout] 220 | pub struct RoomAvatarContent {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `public` is never used
[INFO] [stdout]    --> src/matrix/types.rs:321:12
[INFO] [stdout]     |
[INFO] [stdout] 304 | impl CreateRoomRequest {
[INFO] [stdout]     | ---------------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 321 |     pub fn public(name: impl Into<String>) -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `JoinedMembersResponse` is never constructed
[INFO] [stdout]    --> src/matrix/types.rs:349:12
[INFO] [stdout]     |
[INFO] [stdout] 349 | pub struct JoinedMembersResponse {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `JoinedMember` is never constructed
[INFO] [stdout]    --> src/matrix/types.rs:354:12
[INFO] [stdout]     |
[INFO] [stdout] 354 | pub struct JoinedMember {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProfileResponse` is never constructed
[INFO] [stdout]    --> src/matrix/types.rs:361:12
[INFO] [stdout]     |
[INFO] [stdout] 361 | pub struct ProfileResponse {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `with_event_age_limit` is never used
[INFO] [stdout]   --> src/matrix/event_handler.rs:22:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl MatrixEventHandler {
[INFO] [stdout]    | ----------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub fn with_event_age_limit(mut self, limit: Duration) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MatrixEventProcessor` is never constructed
[INFO] [stdout]    --> src/matrix/event_handler.rs:924:12
[INFO] [stdout]     |
[INFO] [stdout] 924 | pub struct MatrixEventProcessor {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `MatrixEventHandlerTrait` is never used
[INFO] [stdout]    --> src/matrix/event_handler.rs:930:11
[INFO] [stdout]     |
[INFO] [stdout] 930 | pub trait MatrixEventHandlerTrait {
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `with_age_limit`, `process_event`, and `is_event_too_old` are never used
[INFO] [stdout]    --> src/matrix/event_handler.rs:935:12
[INFO] [stdout]     |
[INFO] [stdout] 934 | impl MatrixEventProcessor {
[INFO] [stdout]     | ------------------------- associated items in this implementation
[INFO] [stdout] 935 |     pub fn new(handler: Arc<dyn MatrixEventHandlerTrait + Send + Sync>) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 942 |     pub fn with_age_limit(mut self, limit_ms: u64) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 947 |     pub async fn process_event(&self, event: RoomEvent) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 956 |     fn is_event_too_old(&self, event: &RoomEvent) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_router` is never used
[INFO] [stdout]   --> src/web/mod.rs:39:8
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub fn create_router() -> Router {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `CryptoStore` is never used
[INFO] [stdout]   --> src/crypto/store.rs:11:11
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub trait CryptoStore: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AccountInfo` is never constructed
[INFO] [stdout]   --> src/crypto/store.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub struct AccountInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MemoryCryptoStore` is never constructed
[INFO] [stdout]   --> src/crypto/store.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub struct MemoryCryptoStore {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MemoryCryptoStoreInner` is never constructed
[INFO] [stdout]   --> src/crypto/store.rs:62:8
[INFO] [stdout]    |
[INFO] [stdout] 62 | struct MemoryCryptoStoreInner {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/crypto/store.rs:74:12
[INFO] [stdout]    |
[INFO] [stdout] 73 | impl MemoryCryptoStore {
[INFO] [stdout]    | ---------------------- associated function in this implementation
[INFO] [stdout] 74 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CryptoMachine` is never constructed
[INFO] [stdout]  --> src/crypto/machine.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct CryptoMachine {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/crypto/machine.rs:16:18
[INFO] [stdout]     |
[INFO] [stdout]  15 | impl CryptoMachine {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout]  16 |     pub async fn new(user_id: String, device_id: String, store: Arc<dyn CryptoStore>) -> CryptoResult<Self> {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout]  31 |     pub async fn new_with_memory_store(user_id: String, device_id: String) -> CryptoResult<Self> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  36 |     async fn create_account(&self) -> CryptoResult<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  51 |     fn generate_pickle() -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  57 |     fn generate_identity_keys() -> std::collections::HashMap<String, String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  68 |     pub async fn get_account(&self) -> CryptoResult<Option<AccountInfo>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  72 |     pub async fn get_device_keys(&self) -> CryptoResult<DeviceKeys> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub async fn encrypt_for_room(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub async fn decrypt_room_event(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 136 |     async fn create_outbound_session(&self, room_id: &str) -> CryptoResult<MegolmSession> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 169 |     fn encrypt_megolm(&self, session: &MegolmSession, plaintext: &str) -> CryptoResult<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 180 |     fn decrypt_megolm(&self, session: &MegolmSession, ciphertext: &str) -> CryptoResult<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 195 |     async fn get_curve25519_key(&self) -> CryptoResult<String> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 204 |     pub async fn share_room_key(&self, room_id: &str, devices: &[(String, String)]) -> CryptoResult<Vec<serde_json::Value>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 244 |     pub async fn is_room_encrypted(&self, room_id: &str) -> bool {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 250 |     pub async fn verify_device(&self, user_id: &str, device_id: &str) -> CryptoResult<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 256 |     pub async fn unverify_device(&self, user_id: &str, device_id: &str) -> CryptoResult<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 262 |     pub async fn is_device_verified(&self, user_id: &str, device_id: &str) -> CryptoResult<bool> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rand_byte` is never used
[INFO] [stdout]    --> src/crypto/machine.rs:267:4
[INFO] [stdout]     |
[INFO] [stdout] 267 | fn rand_byte() -> u8 {
[INFO] [stdout]     |    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `OlmSession` is never constructed
[INFO] [stdout]  --> src/crypto/types.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct OlmSession {
[INFO] [stdout]   |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MegolmSession` is never constructed
[INFO] [stdout]   --> src/crypto/types.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct MegolmSession {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CrossSigningKey` is never constructed
[INFO] [stdout]   --> src/crypto/types.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct CrossSigningKey {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DeviceKey` is never constructed
[INFO] [stdout]   --> src/crypto/types.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct DeviceKey {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DeviceKeys` is never constructed
[INFO] [stdout]   --> src/crypto/types.rs:42:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct DeviceKeys {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RoomKey` is never constructed
[INFO] [stdout]   --> src/crypto/types.rs:52:12
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct RoomKey {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `GossipRequest` is never constructed
[INFO] [stdout]   --> src/crypto/types.rs:60:12
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub struct GossipRequest {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CryptoSessionInfo` is never constructed
[INFO] [stdout]   --> src/crypto/types.rs:70:12
[INFO] [stdout]    |
[INFO] [stdout] 70 | pub struct CryptoSessionInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `ed25519_key`, and `curve25519_key` are never used
[INFO] [stdout]   --> src/crypto/types.rs:78:12
[INFO] [stdout]    |
[INFO] [stdout] 77 | impl DeviceKeys {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 78 |     pub fn new(user_id: String, device_id: String) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 92 |     pub fn ed25519_key(&self) -> Option<&str> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 98 |     pub fn curve25519_key(&self) -> Option<&str> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `BridgeError` is never used
[INFO] [stdout]  --> src/error.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum BridgeError {
[INFO] [stdout]   |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `MatrixError` is never used
[INFO] [stdout]   --> src/error.rs:64:10
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub enum MatrixError {
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `WeChatError` is never used
[INFO] [stdout]   --> src/error.rs:97:10
[INFO] [stdout]    |
[INFO] [stdout] 97 | pub enum WeChatError {
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CryptoError` is never used
[INFO] [stdout]    --> src/error.rs:139:10
[INFO] [stdout]     |
[INFO] [stdout] 139 | pub enum CryptoError {
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `Result` is never used
[INFO] [stdout]    --> src/error.rs:201:10
[INFO] [stdout]     |
[INFO] [stdout] 201 | pub type Result<T> = std::result::Result<T, BridgeError>;
[INFO] [stdout]     |          ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `MatrixResult` is never used
[INFO] [stdout]    --> src/error.rs:202:10
[INFO] [stdout]     |
[INFO] [stdout] 202 | pub type MatrixResult<T> = std::result::Result<T, MatrixError>;
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `WeChatResult` is never used
[INFO] [stdout]    --> src/error.rs:203:10
[INFO] [stdout]     |
[INFO] [stdout] 203 | pub type WeChatResult<T> = std::result::Result<T, WeChatError>;
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `CryptoResult` is never used
[INFO] [stdout]    --> src/error.rs:204:10
[INFO] [stdout]     |
[INFO] [stdout] 204 | pub type CryptoResult<T> = std::result::Result<T, CryptoError>;
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `METRICS` is never used
[INFO] [stdout]  --> src/metrics.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub static METRICS: Lazy<Metrics> = Lazy::new(Metrics::new);
[INFO] [stdout]   |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Counter` is never constructed
[INFO] [stdout]   --> src/metrics.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct Counter {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/metrics.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | impl Counter {
[INFO] [stdout]    | ------------ associated items in this implementation
[INFO] [stdout] 16 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     pub fn with_labels(labels: HashMap<String, String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub async fn inc(&self) {
[INFO] [stdout]    |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub async fn inc_by(&self, delta: u64) {
[INFO] [stdout]    |                  ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     pub async fn dec(&self) {
[INFO] [stdout]    |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     pub async fn get(&self) -> u64 {
[INFO] [stdout]    |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub fn labels(&self) -> &HashMap<String, String> {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Gauge` is never constructed
[INFO] [stdout]   --> src/metrics.rs:52:12
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct Gauge {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/metrics.rs:67:12
[INFO] [stdout]     |
[INFO] [stdout]  66 | impl Gauge {
[INFO] [stdout]     | ---------- associated items in this implementation
[INFO] [stdout]  67 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  71 |     pub fn with_labels(labels: HashMap<String, String>) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  78 |     pub async fn set(&self, value: f64) {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout]  82 |     pub async fn inc(&self) {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     pub async fn dec(&self) {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout]  92 |     pub async fn add(&self, delta: f64) {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub async fn sub(&self, delta: f64) {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub async fn get(&self) -> f64 {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn labels(&self) -> &HashMap<String, String> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Histogram` is never constructed
[INFO] [stdout]    --> src/metrics.rs:112:12
[INFO] [stdout]     |
[INFO] [stdout] 112 | pub struct Histogram {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/metrics.rs:121:12
[INFO] [stdout]     |
[INFO] [stdout] 120 | impl Histogram {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] 121 |     pub fn new(buckets: Vec<f64>) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub fn with_labels(buckets: Vec<f64>, labels: HashMap<String, String>) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub fn default_buckets() -> Vec<f64> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub async fn observe(&self, value: f64) {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub async fn get_counts(&self) -> Vec<u64> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 167 |     pub async fn get_sum(&self) -> f64 {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 171 |     pub async fn get_count(&self) -> u64 {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 175 |     pub fn labels(&self) -> &HashMap<String, String> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HistogramTimer` is never constructed
[INFO] [stdout]    --> src/metrics.rs:180:12
[INFO] [stdout]     |
[INFO] [stdout] 180 | pub struct HistogramTimer {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `observe_duration` are never used
[INFO] [stdout]    --> src/metrics.rs:186:12
[INFO] [stdout]     |
[INFO] [stdout] 185 | impl HistogramTimer {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 186 |     pub fn new(histogram: Histogram) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 193 |     pub async fn observe_duration(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Metrics` is never constructed
[INFO] [stdout]    --> src/metrics.rs:210:12
[INFO] [stdout]     |
[INFO] [stdout] 210 | pub struct Metrics {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `to_prometheus` are never used
[INFO] [stdout]    --> src/metrics.rs:241:12
[INFO] [stdout]     |
[INFO] [stdout] 240 | impl Metrics {
[INFO] [stdout]     | ------------ associated items in this implementation
[INFO] [stdout] 241 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 273 |     pub async fn to_prometheus(&self) -> String {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `metrics` is never used
[INFO] [stdout]    --> src/metrics.rs:350:8
[INFO] [stdout]     |
[INFO] [stdout] 350 | pub fn metrics() -> &'static Metrics {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `software`, `status_endpoint`, `message_send_checkpoint_endpoint`, `async_media`, `websocket`, and `ping_interval_seconds` are never read
[INFO] [stdout]   --> src/config/mod.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct HomeserverConfig {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 14 |     pub software: String,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 15 |     pub status_endpoint: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 16 |     pub message_send_checkpoint_endpoint: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 17 |     #[serde(default)]
[INFO] [stdout] 18 |     pub async_media: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 19 |     #[serde(default)]
[INFO] [stdout] 20 |     pub websocket: bool,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 21 |     #[serde(default)]
[INFO] [stdout] 22 |     pub ping_interval_seconds: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `HomeserverConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `max_conn_idle_time` and `max_conn_lifetime` are never read
[INFO] [stdout]   --> src/config/mod.rs:38:9
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub struct DatabaseConfig {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 38 |     pub max_conn_idle_time: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 39 |     pub max_conn_lifetime: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DatabaseConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `displayname` and `avatar` are never read
[INFO] [stdout]   --> src/config/mod.rs:57:9
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub struct BotConfig {
[INFO] [stdout]    |            --------- fields in this struct
[INFO] [stdout] 56 |     pub username: String,
[INFO] [stdout] 57 |     pub displayname: String,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 58 |     pub avatar: String,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `BotConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `address`, `id`, `ephemeral_events`, and `async_transactions` are never read
[INFO] [stdout]   --> src/config/mod.rs:69:9
[INFO] [stdout]    |
[INFO] [stdout] 68 | pub struct AppServiceConfig {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] 69 |     pub address: String,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub id: String,
[INFO] [stdout]    |         ^^
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub ephemeral_events: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 77 |     #[serde(default)]
[INFO] [stdout] 78 |     pub async_transactions: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AppServiceConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `type`, `format`, `filename`, `max_size`, `max_backups`, and `compress` are never read
[INFO] [stdout]   --> src/config/mod.rs:85:9
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub struct LoggingWriterConfig {
[INFO] [stdout]    |            ------------------- fields in this struct
[INFO] [stdout] 85 |     pub r#type: String,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 86 |     pub format: String,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 87 |     #[serde(skip_serializing_if = "Option::is_none")]
[INFO] [stdout] 88 |     pub filename: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 89 |     #[serde(skip_serializing_if = "Option::is_none")]
[INFO] [stdout] 90 |     pub max_size: Option<u64>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 91 |     #[serde(skip_serializing_if = "Option::is_none")]
[INFO] [stdout] 92 |     pub max_backups: Option<u64>,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 93 |     #[serde(skip_serializing_if = "Option::is_none")]
[INFO] [stdout] 94 |     pub compress: Option<bool>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `LoggingWriterConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `min_level` and `writers` are never read
[INFO] [stdout]    --> src/config/mod.rs:99:9
[INFO] [stdout]     |
[INFO] [stdout]  98 | pub struct LoggingConfig {
[INFO] [stdout]     |            ------------- fields in this struct
[INFO] [stdout]  99 |     pub min_level: String,
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout] 100 |     pub writers: Vec<LoggingWriterConfig>,
[INFO] [stdout]     |         ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `LoggingConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `logging` is never read
[INFO] [stdout]    --> src/config/mod.rs:108:9
[INFO] [stdout]     |
[INFO] [stdout] 104 | pub struct Config {
[INFO] [stdout]     |            ------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub logging: LoggingConfig,
[INFO] [stdout]     |         ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Config` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `load_from_bytes` and `format_username` are never used
[INFO] [stdout]    --> src/config/mod.rs:119:12
[INFO] [stdout]     |
[INFO] [stdout] 111 | impl Config {
[INFO] [stdout]     | ----------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 119 |     pub fn load_from_bytes(bytes: &[u8]) -> Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub fn format_username(&self, username: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NAME_QUALITY_NAME` is never used
[INFO] [stdout]  --> src/config/bridge.rs:5:11
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub const NAME_QUALITY_NAME: i8 = 2;
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NAME_QUALITY_UIN` is never used
[INFO] [stdout]  --> src/config/bridge.rs:6:11
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub const NAME_QUALITY_UIN: i8 = 1;
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DoublePuppetConfig` is never constructed
[INFO] [stdout]  --> src/config/bridge.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct DoublePuppetConfig {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `allow`, `appservice`, `require`, `allow_key_sharing`, and `plaintext_mentions` are never read
[INFO] [stdout]   --> src/config/bridge.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct EncryptionConfig {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] 20 |     #[serde(default)]
[INFO] [stdout] 21 |     pub allow: bool,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 25 |     pub appservice: bool,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 26 |     #[serde(default)]
[INFO] [stdout] 27 |     pub require: bool,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 28 |     #[serde(default)]
[INFO] [stdout] 29 |     pub allow_key_sharing: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 30 |     #[serde(default)]
[INFO] [stdout] 31 |     pub plaintext_mentions: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `EncryptionConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `error_after` and `deadline` are never read
[INFO] [stdout]   --> src/config/bridge.rs:36:9
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub struct MessageHandlingTimeout {
[INFO] [stdout]    |            ---------------------- fields in this struct
[INFO] [stdout] 36 |     pub error_after: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 37 |     pub deadline: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MessageHandlingTimeout` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `error_after_duration` and `deadline_duration` are never used
[INFO] [stdout]   --> src/config/bridge.rs:41:12
[INFO] [stdout]    |
[INFO] [stdout] 40 | impl MessageHandlingTimeout {
[INFO] [stdout]    | --------------------------- methods in this implementation
[INFO] [stdout] 41 |     pub fn error_after_duration(&self) -> Option<Duration> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn deadline_duration(&self) -> Option<Duration> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_duration` is never used
[INFO] [stdout]   --> src/config/bridge.rs:52:4
[INFO] [stdout]    |
[INFO] [stdout] 52 | fn parse_duration(s: &str) -> Result<Duration, anyhow::Error> {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `welcome`, `welcome_connected`, `welcome_unconnected`, and `additional_help` are never read
[INFO] [stdout]   --> src/config/bridge.rs:73:9
[INFO] [stdout]    |
[INFO] [stdout] 71 | pub struct ManagementRoomTexts {
[INFO] [stdout]    |            ------------------- fields in this struct
[INFO] [stdout] 72 |     #[serde(default = "default_welcome")]
[INFO] [stdout] 73 |     pub welcome: String,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 74 |     #[serde(default = "default_welcome_connected")]
[INFO] [stdout] 75 |     pub welcome_connected: String,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 76 |     #[serde(default = "default_welcome_unconnected")]
[INFO] [stdout] 77 |     pub welcome_unconnected: String,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 78 |     #[serde(default)]
[INFO] [stdout] 79 |     pub additional_help: String,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ManagementRoomTexts` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]    --> src/config/bridge.rs:115:9
[INFO] [stdout]     |
[INFO] [stdout] 113 | pub struct BridgeConfig {
[INFO] [stdout]     |            ------------ fields in this struct
[INFO] [stdout] 114 |     #[serde(default)]
[INFO] [stdout] 115 |     pub hs_proxy: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     pub displayname_template: String,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub personal_filtering_spaces: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub message_status_events: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 130 |     #[serde(default = "default_message_error_notices")]
[INFO] [stdout] 131 |     pub message_error_notices: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 132 |     #[serde(default = "default_portal_message_buffer")]
[INFO] [stdout] 133 |     pub portal_message_buffer: usize,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 136 |     pub allow_redaction: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub user_avatar_sync: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 142 |     pub sync_direct_chat_list: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 143 |     #[serde(default)]
[INFO] [stdout] 144 |     pub default_bridge_presence: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 145 |     #[serde(default)]
[INFO] [stdout] 146 |     pub send_presence_on_typing: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 149 |     pub double_puppet_server_map: HashMap<String, String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 150 |     #[serde(default)]
[INFO] [stdout] 151 |     pub double_puppet_allow_discovery: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 152 |     #[serde(default)]
[INFO] [stdout] 153 |     pub login_shared_secret_map: HashMap<String, String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 156 |     pub private_chat_portal_meta: String,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 157 |     #[serde(default)]
[INFO] [stdout] 158 |     pub parallel_member_sync: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 159 |     #[serde(default)]
[INFO] [stdout] 160 |     pub resend_bridge_info: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 161 |     #[serde(default)]
[INFO] [stdout] 162 |     pub mute_bridging: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] 163 |     #[serde(default)]
[INFO] [stdout] 164 |     pub allow_user_invite: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 165 |     #[serde(default = "default_federate_rooms")]
[INFO] [stdout] 166 |     pub federate_rooms: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 169 |     pub message_handling_timeout: MessageHandlingTimeout,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 172 |     pub disable_bridge_alerts: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 178 |     pub management_room_text: ManagementRoomTexts,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `BridgeConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_permission` and `format_displayname` are never used
[INFO] [stdout]    --> src/config/bridge.rs:215:12
[INFO] [stdout]     |
[INFO] [stdout] 214 | impl BridgeConfig {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] 215 |     pub fn get_permission(&self, mxid: &str) -> PermissionLevel {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 233 |     pub fn format_displayname(&self, uin: &str, name: &str, remark: &str) -> (String, i8) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/database/mod.rs:69:12
[INFO] [stdout]     |
[INFO] [stdout]  31 | impl Database {
[INFO] [stdout]     | ------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  69 |     pub fn is_sqlite(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 115 |     pub async fn get_user_by_uin(&self, uin: &str) -> Result<Option<User>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 225 |     pub async fn get_puppet_by_custom_mxid(&self, mxid: &str) -> Result<Option<Puppet>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 262 |     pub async fn get_message_by_id(&self, key: &PortalKey, msg_id: &str) -> Result<Option<Message>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 305 |     pub async fn get_last_message(&self, key: &PortalKey) -> Result<Option<Message>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 327 |     pub async fn update_message_mxid(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 356 |     pub async fn delete_message(&self, key: &PortalKey, msg_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `get_by_uin_sqlite` and `get_by_uin_postgres` are never used
[INFO] [stdout]   --> src/database/user.rs:84:9
[INFO] [stdout]    |
[INFO] [stdout] 81 | impl UserQuery {
[INFO] [stdout]    | -------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 84 |         get_by_uin_sqlite,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 93 |         get_by_uin_postgres,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this warning originates in the macro `impl_user_query_for_conn` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `get_by_custom_mxid_sqlite` and `get_by_custom_mxid_postgres` are never used
[INFO] [stdout]    --> src/database/puppet.rs:129:9
[INFO] [stdout]     |
[INFO] [stdout] 126 | impl PuppetQuery {
[INFO] [stdout]     | ---------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 129 |         get_by_custom_mxid_sqlite,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 138 |         get_by_custom_mxid_postgres,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this warning originates in the macro `impl_puppet_query_for_conn` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `MessageErrorType` is never used
[INFO] [stdout]   --> src/database/message.rs:12:10
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum MessageErrorType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `MessageType` is never used
[INFO] [stdout]   --> src/database/message.rs:35:10
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub enum MessageType {
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]    --> src/database/message.rs:218:9
[INFO] [stdout]     |
[INFO] [stdout] 216 | impl MessageQuery {
[INFO] [stdout]     | ----------------- associated functions in this implementation
[INFO] [stdout] 217 |     impl_message_query_for_conn!(
[INFO] [stdout] 218 |         get_by_id_sqlite,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 221 |         get_last_sqlite,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 222 |         insert_sqlite,
[INFO] [stdout] 223 |         update_mxid_sqlite,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 224 |         delete_sqlite,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 229 |         get_by_id_postgres,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 232 |         get_last_postgres,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 233 |         insert_postgres,
[INFO] [stdout] 234 |         update_mxid_postgres,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 235 |         delete_postgres,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this warning originates in the macro `impl_message_query_for_conn` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `http_status` is never read
[INFO] [stdout]    --> src/wechat/protocol.rs:235:9
[INFO] [stdout]     |
[INFO] [stdout] 233 | pub struct ErrorResponse {
[INFO] [stdout]     |            ------------- field in this struct
[INFO] [stdout] 234 |     #[serde(skip)]
[INFO] [stdout] 235 |     pub http_status: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ErrorResponse` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `request`, `as_request`, and `as_response` are never used
[INFO] [stdout]    --> src/wechat/protocol.rs:259:12
[INFO] [stdout]     |
[INFO] [stdout] 258 | impl Message {
[INFO] [stdout]     | ------------ associated items in this implementation
[INFO] [stdout] 259 |     pub fn request(id: i64, mxid: &str, request: &Request) -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 268 |     pub fn as_request(&self) -> Option<Request> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 272 |     pub fn as_response(&self) -> Option<Response> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/wechat/protocol.rs:296:12
[INFO] [stdout]     |
[INFO] [stdout] 295 | impl Response {
[INFO] [stdout]     | ------------- methods in this implementation
[INFO] [stdout] 296 |     pub fn is_success(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 300 |     pub fn as_bool(&self) -> Option<bool> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 304 |     pub fn as_user_info(&self) -> Option<UserInfo> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 308 |     pub fn as_group_info(&self) -> Option<GroupInfo> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 312 |     pub fn as_user_list(&self) -> Option<Vec<UserInfo>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 316 |     pub fn as_group_list(&self) -> Option<Vec<GroupInfo>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 320 |     pub fn as_string_list(&self) -> Option<Vec<String>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 324 |     pub fn as_string(&self) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BlobData` is never constructed
[INFO] [stdout]   --> src/wechat/types.rs:30:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub struct BlobData {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LocationData` is never constructed
[INFO] [stdout]   --> src/wechat/types.rs:39:12
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub struct LocationData {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AppData` is never constructed
[INFO] [stdout]   --> src/wechat/types.rs:49:12
[INFO] [stdout]    |
[INFO] [stdout] 49 | pub struct AppData {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `addr` is never read
[INFO] [stdout]   --> src/wechat/service.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | struct Connection {
[INFO] [stdout]    |        ---------- field in this struct
[INFO] [stdout] 20 |     addr: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Connection` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `handle_json_message` is never used
[INFO] [stdout]    --> src/wechat/service.rs:101:14
[INFO] [stdout]     |
[INFO] [stdout]  38 | impl WechatService {
[INFO] [stdout]     | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 101 |     async fn handle_json_message(&self, json: &str) {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `GroupMember` is never constructed
[INFO] [stdout]  --> src/wechat/client.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct GroupMember {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/wechat/client.rs:27:12
[INFO] [stdout]     |
[INFO] [stdout]  22 | impl WechatClient {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  27 |     pub fn mxid(&self) -> &str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     pub async fn get_user_info(&self, wxid: &str) -> Result<UserInfo> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 128 |     pub async fn get_group_info(&self, group_id: &str) -> Result<GroupInfo> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 145 |     pub async fn get_group_members(&self, group_id: &str) -> Result<Vec<GroupMember>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 162 |     pub async fn get_group_member_nickname(&self, group_id: &str, member_id: &str) -> Result<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 426 |     pub async fn set_nickname(&self, nickname: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 439 |     pub async fn set_avatar(&self, avatar_data: &[u8]) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 453 |     pub async fn get_qrcode(&self) -> Result<Vec<u8>> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 472 |     pub async fn accept_friend(&self, v3: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 485 |     pub async fn create_group(&self, user_ids: &[&str], name: &str) -> Result<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 504 |     pub async fn set_group_name(&self, group_id: &str, name: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 517 |     pub async fn invite_group_member(&self, group_id: &str, user_ids: &[&str]) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 530 |     pub async fn remove_group_member(&self, group_id: &str, user_ids: &[&str]) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 543 |     pub async fn quit_group(&self, group_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 556 |     pub async fn refresh_contacts(&self) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 569 |     pub async fn sync_messages(&self) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `users_by_uin` and `puppets_by_mxid` are never read
[INFO] [stdout]   --> src/bridge/wechat_bridge.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct WechatBridge {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 26 |     users_by_uin: RwLock<HashMap<String, Arc<BridgeUser>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     puppets_by_mxid: RwLock<HashMap<String, Arc<BridgePuppet>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `format_username` is never used
[INFO] [stdout]    --> src/bridge/wechat_bridge.rs:232:12
[INFO] [stdout]     |
[INFO] [stdout]  33 | impl WechatBridge {
[INFO] [stdout]     | ----------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 232 |     pub fn format_username(&self, username: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/bridge/user.rs:19:12
[INFO] [stdout]     |
[INFO] [stdout]  18 | impl BridgeUser {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout]  19 |     pub fn new(mxid: String, db: Database) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  29 |     pub fn with_config(mut self, config: Arc<Config>) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  45 |     pub fn from_db_with_config(user: DbUser, db: Database, config: Arc<Config>) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  56 |     pub fn uid(&self) -> Option<crate::util::UID> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  68 |     pub fn space_room(&self) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  80 |     pub async fn set_uin(&mut self, uin: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     pub async fn set_management_room(&mut self, room_id: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  94 |     pub async fn set_space_room(&mut self, room_id: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 167 |     pub async fn send_management_notice(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 181 |     pub async fn sync_direct_chats(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 195 |     pub async fn sync_groups(
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/bridge/portal.rs:18:12
[INFO] [stdout]     |
[INFO] [stdout]  17 | impl BridgePortal {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout]  18 |     pub fn new(key: PortalKey, db: Database) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  50 |     pub fn mxid(&self) -> Option<&str> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  54 |     pub fn name(&self) -> &str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  58 |     pub fn encrypted(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  62 |     pub fn is_private(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  66 |     pub fn is_group(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  70 |     pub async fn set_mxid(&mut self, mxid: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  76 |     pub async fn set_name(&mut self, name: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  88 |     pub async fn save(&self) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     pub async fn update_matrix_room(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 237 |     pub async fn sync_participants(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 292 |     pub async fn delete(&self) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/bridge/puppet.rs:19:12
[INFO] [stdout]     |
[INFO] [stdout]  18 | impl BridgePuppet {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout]  19 |     pub fn new(uid: UID, db: Database) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  29 |     pub fn with_config(mut self, config: Arc<BridgeConfig>) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  34 |     pub fn with_homeserver(mut self, homeserver: String) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  50 |     pub fn from_db_with_config(puppet: DbPuppet, db: Database, config: Arc<BridgeConfig>) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  61 |     pub fn uin(&self) -> &str {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  65 |     pub fn displayname(&self) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  69 |     pub fn avatar(&self) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  73 |     pub fn custom_mxid(&self) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     pub fn access_token(&self) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  81 |     pub fn mxid(&self, domain: &str, user_prefix: &str) -> String {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  88 |     pub fn is_custom_puppet(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  92 |     pub fn get_custom_client(&self, homeserver: &str) -> Option<MatrixClient> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub async fn set_displayname(&mut self, name: &str, quality: i16) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub async fn set_avatar(&mut self, avatar: &str, avatar_url: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 122 |     pub async fn clear_custom_mxid(&mut self) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     pub async fn sync(
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 172 |     pub async fn register(&self, client: &MatrixClient) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub async fn save(&self) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `NeedsLogin` is never constructed
[INFO] [stdout]   --> src/bridge/command.rs:94:5
[INFO] [stdout]    |
[INFO] [stdout] 91 | pub enum CommandResult {
[INFO] [stdout]    |          ------------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 94 |     NeedsLogin,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CommandResult` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `HTML_TAG_REGEX` is never used
[INFO] [stdout]  --> src/formatter/mod.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub static HTML_TAG_REGEX: Lazy<Regex> = Lazy::new(|| Regex::new(r"<[^>]*>").unwrap());
[INFO] [stdout]   |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `strip_html` is never used
[INFO] [stdout]   --> src/formatter/mod.rs:10:8
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub fn strip_html(html: &str) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `html_to_plain` is never used
[INFO] [stdout]   --> src/formatter/mod.rs:14:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub fn html_to_plain(html: &str) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `matrix_to_wechat` is never used
[INFO] [stdout]   --> src/formatter/mod.rs:30:8
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub fn matrix_to_wechat(text: &str) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `UNICODE_TO_WECHAT` is never used
[INFO] [stdout]    --> src/formatter/emoji.rs:137:8
[INFO] [stdout]     |
[INFO] [stdout] 137 | static UNICODE_TO_WECHAT: Lazy<HashMap<&'static str, &'static str>> = Lazy::new(|| {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `unicode_to_wechat` is never used
[INFO] [stdout]    --> src/formatter/emoji.rs:153:8
[INFO] [stdout]     |
[INFO] [stdout] 153 | pub fn unicode_to_wechat(text: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `matrix_to_wechat` is never used
[INFO] [stdout]  --> src/formatter/matrix_to_wechat.rs:1:8
[INFO] [stdout]   |
[INFO] [stdout] 1 | pub fn matrix_to_wechat(text: &str) -> String {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wechat_to_matrix` is never used
[INFO] [stdout]  --> src/formatter/wechat_to_matrix.rs:1:8
[INFO] [stdout]   |
[INFO] [stdout] 1 | pub fn wechat_to_matrix(text: &str) -> String {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ContactInfo` is never constructed
[INFO] [stdout]  --> src/util/contact.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct ContactInfo {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/util/contact.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | impl ContactInfo {
[INFO] [stdout]    | ---------------- associated function in this implementation
[INFO] [stdout] 11 |     pub fn new(uin: impl Into<String>, name: impl Into<String>, remark: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BackoffConfig` is never constructed
[INFO] [stdout]  --> src/util/retry/backoff.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct BackoffConfig {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ExponentialBackoff` is never constructed
[INFO] [stdout]   --> src/util/retry/backoff.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct ExponentialBackoff {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `next_delay`, `add_jitter`, `reset`, `retry_count`, and `is_exhausted` are never used
[INFO] [stdout]   --> src/util/retry/backoff.rs:32:12
[INFO] [stdout]    |
[INFO] [stdout] 31 | impl ExponentialBackoff {
[INFO] [stdout]    | ----------------------- associated items in this implementation
[INFO] [stdout] 32 |     pub fn new(config: BackoffConfig) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub fn next_delay(&mut self) -> Option<Duration> {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     fn add_jitter(&self, delay: f64) -> f64 {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub fn reset(&mut self) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub fn retry_count(&self) -> u32 {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub fn is_exhausted(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rand_factor` is never used
[INFO] [stdout]   --> src/util/retry/backoff.rs:78:4
[INFO] [stdout]    |
[INFO] [stdout] 78 | fn rand_factor() -> f64 {
[INFO] [stdout]    |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `BackoffStrategy` is never used
[INFO] [stdout]   --> src/util/retry/backoff.rs:88:10
[INFO] [stdout]    |
[INFO] [stdout] 88 | pub enum BackoffStrategy {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `create_backoff` is never used
[INFO] [stdout]   --> src/util/retry/backoff.rs:96:12
[INFO] [stdout]    |
[INFO] [stdout] 95 | impl BackoffStrategy {
[INFO] [stdout]    | -------------------- method in this implementation
[INFO] [stdout] 96 |     pub fn create_backoff(&self, config: BackoffConfig) -> Box<dyn Backoff + Send + Sync> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `Backoff` is never used
[INFO] [stdout]    --> src/util/retry/backoff.rs:106:11
[INFO] [stdout]     |
[INFO] [stdout] 106 | pub trait Backoff {
[INFO] [stdout]     |           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LinearBackoff` is never constructed
[INFO] [stdout]    --> src/util/retry/backoff.rs:148:12
[INFO] [stdout]     |
[INFO] [stdout] 148 | pub struct LinearBackoff {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> src/util/retry/backoff.rs:155:12
[INFO] [stdout]     |
[INFO] [stdout] 154 | impl LinearBackoff {
[INFO] [stdout]     | ------------------ associated function in this implementation
[INFO] [stdout] 155 |     pub fn new(config: BackoffConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FixedBackoff` is never constructed
[INFO] [stdout]    --> src/util/retry/backoff.rs:195:12
[INFO] [stdout]     |
[INFO] [stdout] 195 | pub struct FixedBackoff {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> src/util/retry/backoff.rs:201:12
[INFO] [stdout]     |
[INFO] [stdout] 200 | impl FixedBackoff {
[INFO] [stdout]     | ----------------- associated function in this implementation
[INFO] [stdout] 201 |     pub fn new(config: BackoffConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ImmediateBackoff` is never constructed
[INFO] [stdout]    --> src/util/retry/backoff.rs:233:12
[INFO] [stdout]     |
[INFO] [stdout] 233 | pub struct ImmediateBackoff {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> src/util/retry/backoff.rs:239:12
[INFO] [stdout]     |
[INFO] [stdout] 238 | impl ImmediateBackoff {
[INFO] [stdout]     | --------------------- associated function in this implementation
[INFO] [stdout] 239 |     pub fn new(config: BackoffConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RetryHandler` is never constructed
[INFO] [stdout]  --> src/util/retry/handler.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct RetryHandler {
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `default_retry`, and `execute` are never used
[INFO] [stdout]   --> src/util/retry/handler.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | impl RetryHandler {
[INFO] [stdout]    | ----------------- associated items in this implementation
[INFO] [stdout] 13 |     pub fn new(config: BackoffConfig) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |     pub fn default_retry() -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     pub async fn execute<F, Fut, T, E>(&mut self, mut f: F) -> Result<T, E>
[INFO] [stdout]    |                  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `IsRetryable` is never used
[INFO] [stdout]   --> src/util/retry/handler.rs:50:11
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub trait IsRetryable {
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `with_retry` is never used
[INFO] [stdout]   --> src/util/retry/handler.rs:82:14
[INFO] [stdout]    |
[INFO] [stdout] 82 | pub async fn with_retry<F, Fut, T, E>(f: F) -> Result<T, E>
[INFO] [stdout]    |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `with_retry_config` is never used
[INFO] [stdout]   --> src/util/retry/handler.rs:91:14
[INFO] [stdout]    |
[INFO] [stdout] 91 | pub async fn with_retry_config<F, Fut, T, E>(config: BackoffConfig, f: F) -> Result<T, E>
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `RetryResult` is never used
[INFO] [stdout]    --> src/util/retry/handler.rs:101:10
[INFO] [stdout]     |
[INFO] [stdout] 101 | pub enum RetryResult<T> {
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RetryPolicy` is never constructed
[INFO] [stdout]    --> src/util/retry/handler.rs:107:12
[INFO] [stdout]     |
[INFO] [stdout] 107 | pub struct RetryPolicy {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `with_initial_delay`, `with_max_delay`, `with_multiplier`, and `into_config` are never used
[INFO] [stdout]    --> src/util/retry/handler.rs:126:12
[INFO] [stdout]     |
[INFO] [stdout] 125 | impl RetryPolicy {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] 126 |     pub fn new(max_retries: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 133 |     pub fn with_initial_delay(mut self, delay: Duration) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub fn with_max_delay(mut self, delay: Duration) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub fn with_multiplier(mut self, multiplier: f64) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 148 |     pub fn into_config(self) -> BackoffConfig {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ConnectionState` is never used
[INFO] [stdout]  --> src/util/retry/reconnection.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub enum ConnectionState {
[INFO] [stdout]   |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ReconnectionManager` is never constructed
[INFO] [stdout]   --> src/util/retry/reconnection.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct ReconnectionManager {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/util/retry/reconnection.rs:24:12
[INFO] [stdout]     |
[INFO] [stdout]  23 | impl ReconnectionManager {
[INFO] [stdout]     | ------------------------ associated items in this implementation
[INFO] [stdout]  24 |     pub fn new(config: BackoffConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  32 |     pub fn default_manager() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  42 |     pub async fn state(&self) -> ConnectionState {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  46 |     pub async fn set_state(&self, state: ConnectionState) {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  54 |     pub async fn is_connected(&self) -> bool {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  58 |     pub async fn wait_for_reconnect_delay(&self) -> bool {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  84 |     pub async fn on_connected(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub async fn on_disconnected(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub async fn on_connecting(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 100 |     pub async fn on_reconnecting(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub async fn on_failed(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub async fn stop(&self) {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub async fn reset(&self) {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     pub async fn retry_count(&self) -> u32 {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ReconnectEvent` is never used
[INFO] [stdout]    --> src/util/retry/reconnection.rs:124:10
[INFO] [stdout]     |
[INFO] [stdout] 124 | pub enum ReconnectEvent {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ReconnectEventEmitter` is never constructed
[INFO] [stdout]    --> src/util/retry/reconnection.rs:132:12
[INFO] [stdout]     |
[INFO] [stdout] 132 | pub struct ReconnectEventEmitter {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `emit` are never used
[INFO] [stdout]    --> src/util/retry/reconnection.rs:137:12
[INFO] [stdout]     |
[INFO] [stdout] 136 | impl ReconnectEventEmitter {
[INFO] [stdout]     | -------------------------- associated items in this implementation
[INFO] [stdout] 137 |     pub fn new(tx: mpsc::Sender<ReconnectEvent>) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     pub async fn emit(&self, event: ReconnectEvent) {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ReconnectEventReceiver` is never constructed
[INFO] [stdout]    --> src/util/retry/reconnection.rs:148:12
[INFO] [stdout]     |
[INFO] [stdout] 148 | pub struct ReconnectEventReceiver {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `recv` are never used
[INFO] [stdout]    --> src/util/retry/reconnection.rs:153:12
[INFO] [stdout]     |
[INFO] [stdout] 152 | impl ReconnectEventReceiver {
[INFO] [stdout]     | --------------------------- associated items in this implementation
[INFO] [stdout] 153 |     pub fn new(rx: mpsc::Receiver<ReconnectEvent>) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 157 |     pub async fn recv(&mut self) -> Option<ReconnectEvent> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_reconnect_channel` is never used
[INFO] [stdout]    --> src/util/retry/reconnection.rs:162:8
[INFO] [stdout]     |
[INFO] [stdout] 162 | pub fn create_reconnect_channel() -> (ReconnectEventEmitter, ReconnectEventReceiver) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConnectionGuard` is never constructed
[INFO] [stdout]    --> src/util/retry/reconnection.rs:167:12
[INFO] [stdout]     |
[INFO] [stdout] 167 | pub struct ConnectionGuard {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `protect` are never used
[INFO] [stdout]    --> src/util/retry/reconnection.rs:172:12
[INFO] [stdout]     |
[INFO] [stdout] 171 | impl ConnectionGuard {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout] 172 |     pub fn new(manager: ReconnectionManager) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     pub async fn protect<F, Fut, T, E>(&self, f: F) -> Result<T, E>
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `QueueMessage` is never constructed
[INFO] [stdout]  --> src/util/perf/queue.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct QueueMessage<T> {
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `with_priority`, `with_max_retries`, `increment_retry`, and `can_retry` are never used
[INFO] [stdout]   --> src/util/perf/queue.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl<T> QueueMessage<T> {
[INFO] [stdout]    | ----------------------- associated items in this implementation
[INFO] [stdout] 18 |     pub fn new(id: impl Into<String>, data: T) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn with_priority(mut self, priority: u8) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 34 |     pub fn with_max_retries(mut self, max_retries: u32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     pub fn increment_retry(&mut self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub fn can_retry(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MessageQueue` is never constructed
[INFO] [stdout]   --> src/util/perf/queue.rs:53:12
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub struct MessageQueue<T> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/util/perf/queue.rs:61:12
[INFO] [stdout]     |
[INFO] [stdout]  60 | impl<T> MessageQueue<T> {
[INFO] [stdout]     | ----------------------- associated items in this implementation
[INFO] [stdout]  61 |     pub fn new(capacity: usize, max_concurrency: usize) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  70 |     pub async fn push(&self, message: QueueMessage<T>) -> Result<(), QueueError> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  84 |     pub async fn push_front(&self, message: QueueMessage<T>) -> Result<(), QueueError> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub async fn pop(&self) -> Option<QueueMessage<T>> {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub async fn wait_for_message(&self) -> QueueMessage<T> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 115 |     pub async fn len(&self) -> usize {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 119 |     pub async fn is_empty(&self) -> bool {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 123 |     pub async fn clear(&self) {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     pub fn concurrency_semaphore(&self) -> Arc<Semaphore> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     pub async fn acquire_concurrency(&self) -> Option<tokio::sync::SemaphorePermit<'_>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `QueueError` is never used
[INFO] [stdout]    --> src/util/perf/queue.rs:148:10
[INFO] [stdout]     |
[INFO] [stdout] 148 | pub enum QueueError {
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PriorityQueue` is never constructed
[INFO] [stdout]    --> src/util/perf/queue.rs:162:12
[INFO] [stdout]     |
[INFO] [stdout] 162 | pub struct PriorityQueue<T> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `push`, `pop`, `wait_for_message`, `len`, and `is_empty` are never used
[INFO] [stdout]    --> src/util/perf/queue.rs:171:12
[INFO] [stdout]     |
[INFO] [stdout] 170 | impl<T> PriorityQueue<T> {
[INFO] [stdout]     | ------------------------ associated items in this implementation
[INFO] [stdout] 171 |     pub fn new(capacity: usize) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 181 |     pub async fn push(&self, message: QueueMessage<T>) -> Result<(), QueueError> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub async fn pop(&self) -> Option<QueueMessage<T>> {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 219 |     pub async fn wait_for_message(&self) -> QueueMessage<T> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 228 |     pub async fn len(&self) -> usize {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 235 |     pub async fn is_empty(&self) -> bool {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DelayedQueue` is never constructed
[INFO] [stdout]    --> src/util/perf/queue.rs:255:12
[INFO] [stdout]     |
[INFO] [stdout] 255 | pub struct DelayedQueue<T> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `push_after`, `pop_ready`, `wait_for_ready`, and `len` are never used
[INFO] [stdout]    --> src/util/perf/queue.rs:261:12
[INFO] [stdout]     |
[INFO] [stdout] 260 | impl<T> DelayedQueue<T> {
[INFO] [stdout]     | ----------------------- associated items in this implementation
[INFO] [stdout] 261 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 268 |     pub async fn push_after(&self, delay: Duration, message: QueueMessage<T>) {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 278 |     pub async fn pop_ready(&self) -> Option<QueueMessage<T>> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 291 |     pub async fn wait_for_ready(&self) -> QueueMessage<T> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 313 |     pub async fn len(&self) -> usize {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CacheEntry` is never constructed
[INFO] [stdout]  --> src/util/perf/cache.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct CacheEntry<V> {
[INFO] [stdout]   |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `is_expired`, `hit`, and `age` are never used
[INFO] [stdout]   --> src/util/perf/cache.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | impl<V> CacheEntry<V> {
[INFO] [stdout]    | --------------------- associated items in this implementation
[INFO] [stdout] 17 |     pub fn new(value: V, ttl: Option<Duration>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub fn is_expired(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn hit(&mut self) {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 35 |     pub fn age(&self) -> Duration {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Cache` is never constructed
[INFO] [stdout]   --> src/util/perf/cache.rs:40:12
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub struct Cache<K, V> {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/util/perf/cache.rs:51:12
[INFO] [stdout]     |
[INFO] [stdout]  46 | / impl<K, V> Cache<K, V>
[INFO] [stdout]  47 | | where
[INFO] [stdout]  48 | |     K: Eq + Hash + Clone + std::fmt::Debug,
[INFO] [stdout]  49 | |     V: Clone,
[INFO] [stdout]     | |_____________- associated items in this implementation
[INFO] [stdout]  50 |   {
[INFO] [stdout]  51 |       pub fn new(max_size: usize) -> Self {
[INFO] [stdout]     |              ^^^
[INFO] [stdout] ...
[INFO] [stdout]  59 |       pub fn with_ttl(max_size: usize, ttl: Duration) -> Self {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  67 |       pub async fn get(&self, key: &K) -> Option<V> {
[INFO] [stdout]     |                    ^^^
[INFO] [stdout] ...
[INFO] [stdout]  82 |       pub async fn get_entry(&self, key: &K) -> Option<CacheEntry<V>> {
[INFO] [stdout]     |                    ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |       pub async fn insert(&self, key: K, value: V) {
[INFO] [stdout]     |                    ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |       pub async fn insert_with_ttl(&self, key: K, value: V, ttl: Option<Duration>) {
[INFO] [stdout]     |                    ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |       fn evict_oldest(&self, inner: &mut HashMap<K, CacheEntry<V>>) {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 123 |       pub async fn remove(&self, key: &K) -> Option<V> {
[INFO] [stdout]     |                    ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 128 |       pub async fn contains(&self, key: &K) -> bool {
[INFO] [stdout]     |                    ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 133 |       pub async fn clear(&self) {
[INFO] [stdout]     |                    ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 137 |       pub async fn len(&self) -> usize {
[INFO] [stdout]     |                    ^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |       pub async fn is_empty(&self) -> bool {
[INFO] [stdout]     |                    ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 145 |       pub async fn cleanup_expired(&self) {
[INFO] [stdout]     |                    ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 153 |       pub async fn stats(&self) -> CacheStats {
[INFO] [stdout]     |                    ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CacheStats` is never constructed
[INFO] [stdout]    --> src/util/perf/cache.rs:178:12
[INFO] [stdout]     |
[INFO] [stdout] 178 | pub struct CacheStats {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LruCache` is never constructed
[INFO] [stdout]    --> src/util/perf/cache.rs:184:12
[INFO] [stdout]     |
[INFO] [stdout] 184 | pub struct LruCache<K, V> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/util/perf/cache.rs:194:12
[INFO] [stdout]     |
[INFO] [stdout] 189 | / impl<K, V> LruCache<K, V>
[INFO] [stdout] 190 | | where
[INFO] [stdout] 191 | |     K: Eq + Hash + Clone,
[INFO] [stdout] 192 | |     V: Clone,
[INFO] [stdout]     | |_____________- associated items in this implementation
[INFO] [stdout] 193 |   {
[INFO] [stdout] 194 |       pub fn new(capacity: usize) -> Self {
[INFO] [stdout]     |              ^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |       pub fn with_ttl(capacity: usize, ttl: Duration) -> Self {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 212 |       pub async fn get(&self, key: &K) -> Option<V>
[INFO] [stdout]     |                    ^^^
[INFO] [stdout] ...
[INFO] [stdout] 230 |       pub async fn insert(&self, key: K, value: V) {
[INFO] [stdout]     |                    ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 235 |       pub async fn insert_with_ttl(&self, key: K, value: V, ttl: Option<Duration>) {
[INFO] [stdout]     |                    ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 240 |       pub async fn remove(&self, key: &K) -> Option<V>
[INFO] [stdout]     |                    ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 247 |       pub async fn contains(&self, key: &K) -> bool
[INFO] [stdout]     |                    ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 255 |       pub async fn clear(&self) {
[INFO] [stdout]     |                    ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 259 |       pub async fn len(&self) -> usize {
[INFO] [stdout]     |                    ^^^
[INFO] [stdout] ...
[INFO] [stdout] 263 |       pub async fn is_empty(&self) -> bool {
[INFO] [stdout]     |                    ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `ToOwned` is never used
[INFO] [stdout]    --> src/util/perf/cache.rs:277:11
[INFO] [stdout]     |
[INFO] [stdout] 277 | pub trait ToOwned {
[INFO] [stdout]     |           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LruCache` is never constructed
[INFO] [stdout]    --> src/util/perf/cache.rs:293:16
[INFO] [stdout]     |
[INFO] [stdout] 293 |     pub struct LruCache<K, V> {
[INFO] [stdout]     |                ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/util/perf/cache.rs:300:16
[INFO] [stdout]     |
[INFO] [stdout] 299 |     impl<K: Eq + Hash + Clone, V> LruCache<K, V> {
[INFO] [stdout]     |     -------------------------------------------- associated items in this implementation
[INFO] [stdout] 300 |         pub fn new(capacity: std::num::NonZeroUsize) -> Self {
[INFO] [stdout]     |                ^^^
[INFO] [stdout] ...
[INFO] [stdout] 308 |         pub fn get_mut<Q>(&mut self, key: &Q) -> Option<&mut V>
[INFO] [stdout]     |                ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 322 |         pub fn put(&mut self, key: K, value: V) {
[INFO] [stdout]     |                ^^^
[INFO] [stdout] ...
[INFO] [stdout] 336 |         pub fn pop<Q>(&mut self, key: &Q) -> Option<(K, V)>
[INFO] [stdout]     |                ^^^
[INFO] [stdout] ...
[INFO] [stdout] 350 |         pub fn contains<Q>(&self, key: &Q) -> bool
[INFO] [stdout]     |                ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 358 |         pub fn clear(&mut self) {
[INFO] [stdout]     |                ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 363 |         pub fn len(&self) -> usize {
[INFO] [stdout]     |                ^^^
[INFO] [stdout] ...
[INFO] [stdout] 367 |         pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |                ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConcurrencyLimiter` is never constructed
[INFO] [stdout]  --> src/util/perf/semaphore.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct ConcurrencyLimiter {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/util/perf/semaphore.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | impl ConcurrencyLimiter {
[INFO] [stdout]    | ----------------------- associated items in this implementation
[INFO] [stdout] 13 |     pub fn new(name: impl Into<String>, max_permits: usize) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub async fn acquire(&self) -> SemaphorePermit<'_> {
[INFO] [stdout]    |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 26 |     pub async fn try_acquire(&self) -> Option<SemaphorePermit<'_>> {
[INFO] [stdout]    |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     pub async fn acquire_timeout(&self, timeout: Duration) -> Option<SemaphorePermit<'_>> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub fn available_permits(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub fn max_permits(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 49 |     pub fn name(&self) -> &str {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MultiLimiter` is never constructed
[INFO] [stdout]   --> src/util/perf/semaphore.rs:64:12
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub struct MultiLimiter {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `acquire_all` are never used
[INFO] [stdout]   --> src/util/perf/semaphore.rs:69:12
[INFO] [stdout]    |
[INFO] [stdout] 68 | impl MultiLimiter {
[INFO] [stdout]    | ----------------- associated items in this implementation
[INFO] [stdout] 69 |     pub fn new(limiters: Vec<ConcurrencyLimiter>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub async fn acquire_all(&self) -> Vec<SemaphorePermit<'_>> {
[INFO] [stdout]    |                  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RateLimiter` is never constructed
[INFO] [stdout]   --> src/util/perf/semaphore.rs:82:12
[INFO] [stdout]    |
[INFO] [stdout] 82 | pub struct RateLimiter {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/util/perf/semaphore.rs:90:12
[INFO] [stdout]     |
[INFO] [stdout]  89 | impl RateLimiter {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  90 |     pub fn new(name: impl Into<String>, max_permits: u32, refill_rate: Duration) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  99 |     pub async fn try_acquire(&self) -> bool {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 109 |     pub async fn acquire(&self) {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 119 |     pub async fn acquire_timeout(&self, timeout: Duration) -> bool {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     async fn refill(&self) {
[INFO] [stdout]     |              ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 140 |     pub async fn available(&self) -> u32 {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub fn name(&self) -> &str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TokenBucket` is never constructed
[INFO] [stdout]    --> src/util/perf/semaphore.rs:160:12
[INFO] [stdout]     |
[INFO] [stdout] 160 | pub struct TokenBucket {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `try_consume`, `consume`, `refill`, `available`, and `name` are never used
[INFO] [stdout]    --> src/util/perf/semaphore.rs:169:12
[INFO] [stdout]     |
[INFO] [stdout] 168 | impl TokenBucket {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] 169 |     pub fn new(name: impl Into<String>, max_tokens: f64, refill_per_second: f64) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 179 |     pub async fn try_consume(&self, tokens: f64) -> bool {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     pub async fn consume(&self, tokens: f64) {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     async fn refill(&self) {
[INFO] [stdout]     |              ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 210 |     pub async fn available(&self) -> f64 {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 215 |     pub fn name(&self) -> &str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AdaptiveLimiter` is never constructed
[INFO] [stdout]    --> src/util/perf/semaphore.rs:232:12
[INFO] [stdout]     |
[INFO] [stdout] 232 | pub struct AdaptiveLimiter {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `acquire`, `report_success`, `report_failure`, `adjust`, and `name` are never used
[INFO] [stdout]    --> src/util/perf/semaphore.rs:240:12
[INFO] [stdout]     |
[INFO] [stdout] 239 | impl AdaptiveLimiter {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout] 240 |     pub fn new(name: impl Into<String>, initial_permits: usize, max_permits: usize) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 249 |     pub async fn acquire(&self) -> SemaphorePermit<'_> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 253 |     pub async fn report_success(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 258 |     pub async fn report_failure(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 263 |     pub async fn adjust(&self) {
[INFO] [stdout]     |                  ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 282 |     pub fn name(&self) -> &str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `as_token`, `bot_mxid`, `bot_client`, and `homeserver` are never read
[INFO] [stdout]   --> src/matrix/appservice.rs:13:9
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct AppService {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 13 |     pub as_token: String,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 14 |     pub hs_token: String,
[INFO] [stdout] 15 |     pub bot_mxid: String,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 16 |     pub bot_client: Arc<MatrixClient>,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 17 |     pub homeserver: String,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `start` is never used
[INFO] [stdout]   --> src/matrix/appservice.rs:46:18
[INFO] [stdout]    |
[INFO] [stdout] 26 | impl AppService {
[INFO] [stdout]    | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub async fn start(self: Arc<Self>, addr: impl Into<String> + 'static) -> anyhow::Result<()> {
[INFO] [stdout]    |                  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TransactionHandler` is never constructed
[INFO] [stdout]   --> src/matrix/appservice.rs:66:8
[INFO] [stdout]    |
[INFO] [stdout] 66 | struct TransactionHandler {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `handle` and `verify_auth` are never used
[INFO] [stdout]    --> src/matrix/appservice.rs:72:14
[INFO] [stdout]     |
[INFO] [stdout]  71 | impl TransactionHandler {
[INFO] [stdout]     | ----------------------- methods in this implementation
[INFO] [stdout]  72 |     async fn handle(&self, req: &mut Request, res: &mut Response, depot: &mut Depot) {
[INFO] [stdout]     |              ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 100 |     fn verify_auth(&self, auth: &Option<String>) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UserHandler` is never constructed
[INFO] [stdout]    --> src/matrix/appservice.rs:110:8
[INFO] [stdout]     |
[INFO] [stdout] 110 | struct UserHandler {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `handle` and `verify_auth` are never used
[INFO] [stdout]    --> src/matrix/appservice.rs:116:14
[INFO] [stdout]     |
[INFO] [stdout] 115 | impl UserHandler {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] 116 |     async fn handle(&self, req: &mut Request, res: &mut Response, depot: &mut Depot) {
[INFO] [stdout]     |              ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 133 |     fn verify_auth(&self, auth: &Option<String>) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RoomHandler` is never constructed
[INFO] [stdout]    --> src/matrix/appservice.rs:143:8
[INFO] [stdout]     |
[INFO] [stdout] 143 | struct RoomHandler {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `handle` and `verify_auth` are never used
[INFO] [stdout]    --> src/matrix/appservice.rs:149:14
[INFO] [stdout]     |
[INFO] [stdout] 148 | impl RoomHandler {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] 149 |     async fn handle(&self, req: &mut Request, res: &mut Response, depot: &mut Depot) {
[INFO] [stdout]     |              ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 162 |     fn verify_auth(&self, auth: &Option<String>) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `format_mxid` is never used
[INFO] [stdout]    --> src/matrix/appservice.rs:172:8
[INFO] [stdout]     |
[INFO] [stdout] 172 | pub fn format_mxid(localpart: &str, domain: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_mxid` is never used
[INFO] [stdout]    --> src/matrix/appservice.rs:176:8
[INFO] [stdout]     |
[INFO] [stdout] 176 | pub fn parse_mxid(mxid: &str) -> Option<(String, String)> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_mxid` is never used
[INFO] [stdout]    --> src/matrix/appservice.rs:188:8
[INFO] [stdout]     |
[INFO] [stdout] 188 | pub fn is_mxid(mxid: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `localpart` is never used
[INFO] [stdout]    --> src/matrix/appservice.rs:192:8
[INFO] [stdout]     |
[INFO] [stdout] 192 | pub fn localpart(mxid: &str) -> Option<String> {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `server_name` is never used
[INFO] [stdout]    --> src/matrix/appservice.rs:196:8
[INFO] [stdout]     |
[INFO] [stdout] 196 | pub fn server_name(mxid: &str) -> Option<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `make_wechat_user_mxid` is never used
[INFO] [stdout]    --> src/matrix/appservice.rs:200:8
[INFO] [stdout]     |
[INFO] [stdout] 200 | pub fn make_wechat_user_mxid(prefix: &str, uin: &str, domain: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `make_wechat_room_mxid` is never used
[INFO] [stdout]    --> src/matrix/appservice.rs:204:8
[INFO] [stdout]     |
[INFO] [stdout] 204 | pub fn make_wechat_room_mxid(prefix: &str, chat_id: &str, domain: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/matrix/client.rs:73:18
[INFO] [stdout]     |
[INFO] [stdout]  18 | impl MatrixClient {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  73 |     pub async fn get_user_id(&self) -> Result<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  95 |     pub async fn send_text(&self, room_id: &str, text: impl Into<String>) -> Result<String> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     pub async fn send_emote(&self, room_id: &str, text: impl Into<String>) -> Result<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 156 |     pub async fn set_room_topic(&self, room_id: &str, topic: &str) -> Result<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 161 |     pub async fn set_room_avatar(&self, room_id: &str, url: &str) -> Result<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 178 |     pub async fn invite_user(&self, room_id: &str, user_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 185 |     pub async fn kick_user(&self, room_id: &str, user_id: &str, reason: Option<&str>) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 195 |     pub async fn set_membership(&self, room_id: &str, user_id: &str, content: &RoomMemberContent) -> Result<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 205 |     pub async fn get_joined_members(&self, room_id: &str) -> Result<JoinedMembersResponse> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 210 |     pub async fn get_room_state(&self, room_id: &str, event_type: &str, state_key: &str) -> Result<serde_json::Value> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 218 |     pub async fn set_displayname(&self, user_id: &str, displayname: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 225 |     pub async fn set_avatar_url(&self, user_id: &str, avatar_url: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 232 |     pub async fn get_profile(&self, user_id: &str) -> Result<ProfileResponse> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 295 |     pub async fn get_room_alias(&self, alias: &str) -> Result<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 304 |     pub async fn set_room_alias(&self, room_id: &str, alias: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 311 |     pub async fn sync(&self, since: Option<&str>, timeout_ms: u64) -> Result<serde_json::Value> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 320 |     pub async fn get_event(&self, room_id: &str, event_id: &str) -> Result<RoomEvent> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 325 |     pub async fn set_presence(&self, presence: &str, status_msg: Option<&str>) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 336 |     pub async fn set_typing(&self, room_id: &str, typing: bool, timeout: Option<u32>) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 349 |     pub async fn send_read_receipt(&self, room_id: &str, event_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MatrixClientBuilder` is never constructed
[INFO] [stdout]    --> src/matrix/client.rs:357:12
[INFO] [stdout]     |
[INFO] [stdout] 357 | pub struct MatrixClientBuilder {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `user_id`, and `build` are never used
[INFO] [stdout]    --> src/matrix/client.rs:364:12
[INFO] [stdout]     |
[INFO] [stdout] 363 | impl MatrixClientBuilder {
[INFO] [stdout]     | ------------------------ associated items in this implementation
[INFO] [stdout] 364 |     pub fn new(homeserver: impl Into<String>, access_token: impl Into<String>) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 372 |     pub fn user_id(mut self, user_id: impl Into<String>) -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 377 |     pub fn build(self) -> MatrixClient {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `ensure_bot_client` is never used
[INFO] [stdout]    --> src/matrix/client.rs:386:8
[INFO] [stdout]     |
[INFO] [stdout] 386 | pub fn ensure_bot_client(homeserver: &str, token: &str, bot_mxid: &str) -> Arc<MatrixClient> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EphemeralEvent` is never constructed
[INFO] [stdout]   --> src/matrix/types.rs:26:12
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub struct EphemeralEvent {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ToDeviceEvent` is never constructed
[INFO] [stdout]   --> src/matrix/types.rs:36:12
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub struct ToDeviceEvent {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EphemeralData` is never constructed
[INFO] [stdout]   --> src/matrix/types.rs:51:12
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub struct EphemeralData {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ToDeviceData` is never constructed
[INFO] [stdout]   --> src/matrix/types.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub struct ToDeviceData {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `text`, `image`, `file`, `video`, and `audio` are never used
[INFO] [stdout]    --> src/matrix/types.rs:77:12
[INFO] [stdout]     |
[INFO] [stdout]  76 | impl EventContent {
[INFO] [stdout]     | ----------------- associated functions in this implementation
[INFO] [stdout]  77 |     pub fn text(body: impl Into<String>) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub fn image(body: impl Into<String>, url: impl Into<String>) -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 121 |     pub fn file(body: impl Into<String>, url: impl Into<String>) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub fn video(body: impl Into<String>, url: impl Into<String>) -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub fn audio(body: impl Into<String>, url: impl Into<String>) -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RoomMemberContent` is never constructed
[INFO] [stdout]    --> src/matrix/types.rs:156:12
[INFO] [stdout]     |
[INFO] [stdout] 156 | pub struct RoomMemberContent {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `join`, `join_with`, `leave`, and `invite` are never used
[INFO] [stdout]    --> src/matrix/types.rs:165:12
[INFO] [stdout]     |
[INFO] [stdout] 164 | impl RoomMemberContent {
[INFO] [stdout]     | ---------------------- associated functions in this implementation
[INFO] [stdout] 165 |     pub fn join() -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 173 |     pub fn join_with(displayname: impl Into<String>, avatar_url: impl Into<String>) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 181 |     pub fn leave() -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 189 |     pub fn invite() -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RoomCreateContent` is never constructed
[INFO] [stdout]    --> src/matrix/types.rs:199:12
[INFO] [stdout]     |
[INFO] [stdout] 199 | pub struct RoomCreateContent {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_room_version` is never used
[INFO] [stdout]    --> src/matrix/types.rs:205:4
[INFO] [stdout]     |
[INFO] [stdout] 205 | fn default_room_version() -> String {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RoomTopicContent` is never constructed
[INFO] [stdout]    --> src/matrix/types.rs:215:12
[INFO] [stdout]     |
[INFO] [stdout] 215 | pub struct RoomTopicContent {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RoomAvatarContent` is never constructed
[INFO] [stdout]    --> src/matrix/types.rs:220:12
[INFO] [stdout]     |
[INFO] [stdout] 220 | pub struct RoomAvatarContent {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `public` is never used
[INFO] [stdout]    --> src/matrix/types.rs:321:12
[INFO] [stdout]     |
[INFO] [stdout] 304 | impl CreateRoomRequest {
[INFO] [stdout]     | ---------------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 321 |     pub fn public(name: impl Into<String>) -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `JoinedMembersResponse` is never constructed
[INFO] [stdout]    --> src/matrix/types.rs:349:12
[INFO] [stdout]     |
[INFO] [stdout] 349 | pub struct JoinedMembersResponse {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `JoinedMember` is never constructed
[INFO] [stdout]    --> src/matrix/types.rs:354:12
[INFO] [stdout]     |
[INFO] [stdout] 354 | pub struct JoinedMember {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProfileResponse` is never constructed
[INFO] [stdout]    --> src/matrix/types.rs:361:12
[INFO] [stdout]     |
[INFO] [stdout] 361 | pub struct ProfileResponse {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `with_event_age_limit` is never used
[INFO] [stdout]   --> src/matrix/event_handler.rs:22:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl MatrixEventHandler {
[INFO] [stdout]    | ----------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub fn with_event_age_limit(mut self, limit: Duration) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MatrixEventProcessor` is never constructed
[INFO] [stdout]    --> src/matrix/event_handler.rs:924:12
[INFO] [stdout]     |
[INFO] [stdout] 924 | pub struct MatrixEventProcessor {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `MatrixEventHandlerTrait` is never used
[INFO] [stdout]    --> src/matrix/event_handler.rs:930:11
[INFO] [stdout]     |
[INFO] [stdout] 930 | pub trait MatrixEventHandlerTrait {
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `with_age_limit`, `process_event`, and `is_event_too_old` are never used
[INFO] [stdout]    --> src/matrix/event_handler.rs:935:12
[INFO] [stdout]     |
[INFO] [stdout] 934 | impl MatrixEventProcessor {
[INFO] [stdout]     | ------------------------- associated items in this implementation
[INFO] [stdout] 935 |     pub fn new(handler: Arc<dyn MatrixEventHandlerTrait + Send + Sync>) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 942 |     pub fn with_age_limit(mut self, limit_ms: u64) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 947 |     pub async fn process_event(&self, event: RoomEvent) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 956 |     fn is_event_too_old(&self, event: &RoomEvent) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_router` is never used
[INFO] [stdout]   --> src/web/mod.rs:39:8
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub fn create_router() -> Router {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `CryptoStore` is never used
[INFO] [stdout]   --> src/crypto/store.rs:11:11
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub trait CryptoStore: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AccountInfo` is never constructed
[INFO] [stdout]   --> src/crypto/store.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub struct AccountInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MemoryCryptoStore` is never constructed
[INFO] [stdout]   --> src/crypto/store.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub struct MemoryCryptoStore {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MemoryCryptoStoreInner` is never constructed
[INFO] [stdout]   --> src/crypto/store.rs:62:8
[INFO] [stdout]    |
[INFO] [stdout] 62 | struct MemoryCryptoStoreInner {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/crypto/store.rs:74:12
[INFO] [stdout]    |
[INFO] [stdout] 73 | impl MemoryCryptoStore {
[INFO] [stdout]    | ---------------------- associated function in this implementation
[INFO] [stdout] 74 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CryptoMachine` is never constructed
[INFO] [stdout]  --> src/crypto/machine.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct CryptoMachine {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/crypto/machine.rs:16:18
[INFO] [stdout]     |
[INFO] [stdout]  15 | impl CryptoMachine {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout]  16 |     pub async fn new(user_id: String, device_id: String, store: Arc<dyn CryptoStore>) -> CryptoResult<Self> {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout]  31 |     pub async fn new_with_memory_store(user_id: String, device_id: String) -> CryptoResult<Self> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  36 |     async fn create_account(&self) -> CryptoResult<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  51 |     fn generate_pickle() -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  57 |     fn generate_identity_keys() -> std::collections::HashMap<String, String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  68 |     pub async fn get_account(&self) -> CryptoResult<Option<AccountInfo>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  72 |     pub async fn get_device_keys(&self) -> CryptoResult<DeviceKeys> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub async fn encrypt_for_room(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub async fn decrypt_room_event(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 136 |     async fn create_outbound_session(&self, room_id: &str) -> CryptoResult<MegolmSession> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 169 |     fn encrypt_megolm(&self, session: &MegolmSession, plaintext: &str) -> CryptoResult<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 180 |     fn decrypt_megolm(&self, session: &MegolmSession, ciphertext: &str) -> CryptoResult<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 195 |     async fn get_curve25519_key(&self) -> CryptoResult<String> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 204 |     pub async fn share_room_key(&self, room_id: &str, devices: &[(String, String)]) -> CryptoResult<Vec<serde_json::Value>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 244 |     pub async fn is_room_encrypted(&self, room_id: &str) -> bool {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 250 |     pub async fn verify_device(&self, user_id: &str, device_id: &str) -> CryptoResult<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 256 |     pub async fn unverify_device(&self, user_id: &str, device_id: &str) -> CryptoResult<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 262 |     pub async fn is_device_verified(&self, user_id: &str, device_id: &str) -> CryptoResult<bool> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rand_byte` is never used
[INFO] [stdout]    --> src/crypto/machine.rs:267:4
[INFO] [stdout]     |
[INFO] [stdout] 267 | fn rand_byte() -> u8 {
[INFO] [stdout]     |    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `OlmSession` is never constructed
[INFO] [stdout]  --> src/crypto/types.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct OlmSession {
[INFO] [stdout]   |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MegolmSession` is never constructed
[INFO] [stdout]   --> src/crypto/types.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct MegolmSession {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CrossSigningKey` is never constructed
[INFO] [stdout]   --> src/crypto/types.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct CrossSigningKey {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DeviceKey` is never constructed
[INFO] [stdout]   --> src/crypto/types.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct DeviceKey {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DeviceKeys` is never constructed
[INFO] [stdout]   --> src/crypto/types.rs:42:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct DeviceKeys {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RoomKey` is never constructed
[INFO] [stdout]   --> src/crypto/types.rs:52:12
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct RoomKey {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `GossipRequest` is never constructed
[INFO] [stdout]   --> src/crypto/types.rs:60:12
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub struct GossipRequest {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CryptoSessionInfo` is never constructed
[INFO] [stdout]   --> src/crypto/types.rs:70:12
[INFO] [stdout]    |
[INFO] [stdout] 70 | pub struct CryptoSessionInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `ed25519_key`, and `curve25519_key` are never used
[INFO] [stdout]   --> src/crypto/types.rs:78:12
[INFO] [stdout]    |
[INFO] [stdout] 77 | impl DeviceKeys {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 78 |     pub fn new(user_id: String, device_id: String) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 92 |     pub fn ed25519_key(&self) -> Option<&str> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 98 |     pub fn curve25519_key(&self) -> Option<&str> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `BridgeError` is never used
[INFO] [stdout]  --> src/error.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum BridgeError {
[INFO] [stdout]   |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `MatrixError` is never used
[INFO] [stdout]   --> src/error.rs:64:10
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub enum MatrixError {
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `WeChatError` is never used
[INFO] [stdout]   --> src/error.rs:97:10
[INFO] [stdout]    |
[INFO] [stdout] 97 | pub enum WeChatError {
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CryptoError` is never used
[INFO] [stdout]    --> src/error.rs:139:10
[INFO] [stdout]     |
[INFO] [stdout] 139 | pub enum CryptoError {
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `Result` is never used
[INFO] [stdout]    --> src/error.rs:201:10
[INFO] [stdout]     |
[INFO] [stdout] 201 | pub type Result<T> = std::result::Result<T, BridgeError>;
[INFO] [stdout]     |          ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `MatrixResult` is never used
[INFO] [stdout]    --> src/error.rs:202:10
[INFO] [stdout]     |
[INFO] [stdout] 202 | pub type MatrixResult<T> = std::result::Result<T, MatrixError>;
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `WeChatResult` is never used
[INFO] [stdout]    --> src/error.rs:203:10
[INFO] [stdout]     |
[INFO] [stdout] 203 | pub type WeChatResult<T> = std::result::Result<T, WeChatError>;
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `CryptoResult` is never used
[INFO] [stdout]    --> src/error.rs:204:10
[INFO] [stdout]     |
[INFO] [stdout] 204 | pub type CryptoResult<T> = std::result::Result<T, CryptoError>;
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `METRICS` is never used
[INFO] [stdout]  --> src/metrics.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub static METRICS: Lazy<Metrics> = Lazy::new(Metrics::new);
[INFO] [stdout]   |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Counter` is never constructed
[INFO] [stdout]   --> src/metrics.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct Counter {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/metrics.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | impl Counter {
[INFO] [stdout]    | ------------ associated items in this implementation
[INFO] [stdout] 16 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     pub fn with_labels(labels: HashMap<String, String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub async fn inc(&self) {
[INFO] [stdout]    |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub async fn inc_by(&self, delta: u64) {
[INFO] [stdout]    |                  ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     pub async fn dec(&self) {
[INFO] [stdout]    |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     pub async fn get(&self) -> u64 {
[INFO] [stdout]    |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub fn labels(&self) -> &HashMap<String, String> {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Gauge` is never constructed
[INFO] [stdout]   --> src/metrics.rs:52:12
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct Gauge {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/metrics.rs:67:12
[INFO] [stdout]     |
[INFO] [stdout]  66 | impl Gauge {
[INFO] [stdout]     | ---------- associated items in this implementation
[INFO] [stdout]  67 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  71 |     pub fn with_labels(labels: HashMap<String, String>) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  78 |     pub async fn set(&self, value: f64) {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout]  82 |     pub async fn inc(&self) {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     pub async fn dec(&self) {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout]  92 |     pub async fn add(&self, delta: f64) {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub async fn sub(&self, delta: f64) {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub async fn get(&self) -> f64 {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn labels(&self) -> &HashMap<String, String> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Histogram` is never constructed
[INFO] [stdout]    --> src/metrics.rs:112:12
[INFO] [stdout]     |
[INFO] [stdout] 112 | pub struct Histogram {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/metrics.rs:121:12
[INFO] [stdout]     |
[INFO] [stdout] 120 | impl Histogram {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] 121 |     pub fn new(buckets: Vec<f64>) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub fn with_labels(buckets: Vec<f64>, labels: HashMap<String, String>) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub fn default_buckets() -> Vec<f64> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub async fn observe(&self, value: f64) {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub async fn get_counts(&self) -> Vec<u64> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 167 |     pub async fn get_sum(&self) -> f64 {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 171 |     pub async fn get_count(&self) -> u64 {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 175 |     pub fn labels(&self) -> &HashMap<String, String> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HistogramTimer` is never constructed
[INFO] [stdout]    --> src/metrics.rs:180:12
[INFO] [stdout]     |
[INFO] [stdout] 180 | pub struct HistogramTimer {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `observe_duration` are never used
[INFO] [stdout]    --> src/metrics.rs:186:12
[INFO] [stdout]     |
[INFO] [stdout] 185 | impl HistogramTimer {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 186 |     pub fn new(histogram: Histogram) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 193 |     pub async fn observe_duration(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Metrics` is never constructed
[INFO] [stdout]    --> src/metrics.rs:210:12
[INFO] [stdout]     |
[INFO] [stdout] 210 | pub struct Metrics {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `to_prometheus` are never used
[INFO] [stdout]    --> src/metrics.rs:241:12
[INFO] [stdout]     |
[INFO] [stdout] 240 | impl Metrics {
[INFO] [stdout]     | ------------ associated items in this implementation
[INFO] [stdout] 241 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 273 |     pub async fn to_prometheus(&self) -> String {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `metrics` is never used
[INFO] [stdout]    --> src/metrics.rs:350:8
[INFO] [stdout]     |
[INFO] [stdout] 350 | pub fn metrics() -> &'static Metrics {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 2m 24s
[INFO] running `Command { std: "docker" "inspect" "f572d457a0a4e6f589802c41e737747ab409f5fe73ad926afd28d0c4ea13a2b5", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "f572d457a0a4e6f589802c41e737747ab409f5fe73ad926afd28d0c4ea13a2b5", kill_on_drop: false }`
[INFO] [stdout] f572d457a0a4e6f589802c41e737747ab409f5fe73ad926afd28d0c4ea13a2b5
