[INFO] fetching crate legion-server 0.1.0... [INFO] building legion-server-0.1.0 against master#c7f6aa2869acdbf014d094c6e427e554e160b6db for pr-146237-2 [INFO] extracting crate legion-server 0.1.0 into /workspace/builds/worker-3-tc1/source [INFO] started tweaking crates.io crate legion-server 0.1.0 [INFO] finished tweaking crates.io crate legion-server 0.1.0 [INFO] tweaked toml for crates.io crate legion-server 0.1.0 written to /workspace/builds/worker-3-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate legion-server 0.1.0 on toolchain c7f6aa2869acdbf014d094c6e427e554e160b6db [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+c7f6aa2869acdbf014d094c6e427e554e160b6db" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate crates.io crate legion-server 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" "+c7f6aa2869acdbf014d094c6e427e554e160b6db" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded whoami v1.6.0 [INFO] [stderr] Downloaded mockall v0.13.1 [INFO] [stderr] Downloaded mockall_derive v0.13.1 [INFO] [stderr] Downloaded legion-protocol v0.1.0 [INFO] [stderr] Downloaded rust-ini v0.20.0 [INFO] [stderr] Downloaded pest_derive v2.8.1 [INFO] [stderr] Downloaded pest_meta v2.8.1 [INFO] [stderr] Downloaded pest_generator v2.8.1 [INFO] [stderr] Downloaded yaml-rust2 v0.8.1 [INFO] [stderr] Downloaded io-uring v0.7.9 [INFO] [stderr] Downloaded raw-cpuid v11.5.0 [INFO] [stderr] Downloaded governor v0.8.1 [INFO] [stderr] Downloaded phalanx-crypto v0.1.0 [INFO] [stderr] Downloaded aws-lc-rs v1.13.3 [INFO] [stderr] Downloaded prettyplease v0.2.36 [INFO] [stderr] Downloaded aws-lc-sys v0.30.0 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-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:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+c7f6aa2869acdbf014d094c6e427e554e160b6db" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] cd2074f785668f8cb486c672ecdaeb36b22251a84cc688d7cd44added3da5df9 [INFO] running `Command { std: "docker" "start" "-a" "cd2074f785668f8cb486c672ecdaeb36b22251a84cc688d7cd44added3da5df9", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "cd2074f785668f8cb486c672ecdaeb36b22251a84cc688d7cd44added3da5df9", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "cd2074f785668f8cb486c672ecdaeb36b22251a84cc688d7cd44added3da5df9", kill_on_drop: false }` [INFO] [stdout] cd2074f785668f8cb486c672ecdaeb36b22251a84cc688d7cd44added3da5df9 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-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:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+c7f6aa2869acdbf014d094c6e427e554e160b6db" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] f9a1868e027069dd1b02fc72df4d26e92014e633aa1cc0dd834b8d121a28e26a [INFO] running `Command { std: "docker" "start" "-a" "f9a1868e027069dd1b02fc72df4d26e92014e633aa1cc0dd834b8d121a28e26a", kill_on_drop: false }` [INFO] [stderr] Compiling syn v2.0.104 [INFO] [stderr] Compiling libc v0.2.174 [INFO] [stderr] Compiling cfg-if v1.0.1 [INFO] [stderr] Compiling serde v1.0.219 [INFO] [stderr] Compiling zerocopy v0.8.26 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Compiling slab v0.4.10 [INFO] [stderr] Compiling serde_json v1.0.142 [INFO] [stderr] Compiling hashbrown v0.15.4 [INFO] [stderr] Compiling subtle v2.6.1 [INFO] [stderr] Compiling crypto-common v0.1.6 [INFO] [stderr] Compiling zeroize v1.8.1 [INFO] [stderr] Compiling getrandom v0.3.3 [INFO] [stderr] Compiling crossbeam-utils v0.8.21 [INFO] [stderr] Compiling ahash v0.8.12 [INFO] [stderr] Compiling aws-lc-rs v1.13.3 [INFO] [stderr] Compiling futures-sink v0.3.31 [INFO] [stderr] Compiling rustls-pki-types v1.12.0 [INFO] [stderr] Compiling crunchy v0.2.4 [INFO] [stderr] Compiling futures-channel v0.3.31 [INFO] [stderr] Compiling bytes v1.10.1 [INFO] [stderr] Compiling digest v0.10.7 [INFO] [stderr] Compiling rustls v0.23.31 [INFO] [stderr] Compiling spin v0.9.8 [INFO] [stderr] Compiling tracing-core v0.1.34 [INFO] [stderr] Compiling futures-util v0.3.31 [INFO] [stderr] Compiling log v0.4.27 [INFO] [stderr] Compiling sha2 v0.10.9 [INFO] [stderr] Compiling unicode-normalization v0.1.24 [INFO] [stderr] Compiling tiny-keccak v2.0.2 [INFO] [stderr] Compiling webpki-roots v1.0.2 [INFO] [stderr] Compiling concurrent-queue v2.5.0 [INFO] [stderr] Compiling crossbeam-queue v0.3.12 [INFO] [stderr] Compiling uuid v1.17.0 [INFO] [stderr] Compiling base64 v0.22.1 [INFO] [stderr] Compiling unicode-bidi v0.3.18 [INFO] [stderr] Compiling unicode-properties v0.1.3 [INFO] [stderr] Compiling event-listener v5.4.0 [INFO] [stderr] Compiling webpki-roots v0.26.11 [INFO] [stderr] Compiling curve25519-dalek v4.1.3 [INFO] [stderr] Compiling hmac v0.12.1 [INFO] [stderr] Compiling byteorder v1.5.0 [INFO] [stderr] Compiling whoami v1.6.0 [INFO] [stderr] Compiling indexmap v2.10.0 [INFO] [stderr] Compiling hashlink v0.10.0 [INFO] [stderr] Compiling stringprep v0.1.5 [INFO] [stderr] Compiling dotenvy v0.15.7 [INFO] [stderr] Compiling hkdf v0.12.4 [INFO] [stderr] Compiling flume v0.11.1 [INFO] [stderr] Compiling atoi v2.0.0 [INFO] [stderr] Compiling chrono v0.4.41 [INFO] [stderr] Compiling md-5 v0.10.6 [INFO] [stderr] Compiling regex-automata v0.4.9 [INFO] [stderr] Compiling toml_write v0.1.2 [INFO] [stderr] Compiling regex-syntax v0.6.29 [INFO] [stderr] Compiling portable-atomic v1.11.1 [INFO] [stderr] Compiling signature v2.2.0 [INFO] [stderr] Compiling winnow v0.7.12 [INFO] [stderr] Compiling encoding_rs v0.8.35 [INFO] [stderr] Compiling rustls v0.22.4 [INFO] [stderr] Compiling arrayvec v0.7.6 [INFO] [stderr] Compiling base64ct v1.8.0 [INFO] [stderr] Compiling arraydeque v0.5.1 [INFO] [stderr] Compiling base64 v0.21.7 [INFO] [stderr] Compiling convert_case v0.6.0 [INFO] [stderr] Compiling getrandom v0.2.16 [INFO] [stderr] Compiling jobserver v0.1.33 [INFO] [stderr] Compiling rand_core v0.6.4 [INFO] [stderr] Compiling cc v1.2.31 [INFO] [stderr] Compiling mio v1.0.4 [INFO] [stderr] Compiling socket2 v0.6.0 [INFO] [stderr] Compiling signal-hook-registry v1.4.5 [INFO] [stderr] Compiling tokio v1.47.1 [INFO] [stderr] Compiling const-random-macro v0.1.16 [INFO] [stderr] Compiling rand_core v0.9.3 [INFO] [stderr] Compiling universal-hash v0.5.1 [INFO] [stderr] Compiling aead v0.5.2 [INFO] [stderr] Compiling const-random v0.1.18 [INFO] [stderr] Compiling pbkdf2 v0.12.2 [INFO] [stderr] Compiling blake2 v0.10.6 [INFO] [stderr] Compiling dlv-list v0.5.2 [INFO] [stderr] Compiling poly1305 v0.8.0 [INFO] [stderr] Compiling password-hash v0.5.0 [INFO] [stderr] Compiling nom v7.1.3 [INFO] [stderr] Compiling tracing-log v0.2.0 [INFO] [stderr] Compiling thread_local v1.1.9 [INFO] [stderr] Compiling ppv-lite86 v0.2.21 [INFO] [stderr] Compiling spinning_top v0.3.0 [INFO] [stderr] Compiling no-std-compat v0.4.1 [INFO] [stderr] Compiling pathdiff v0.2.3 [INFO] [stderr] Compiling cmake v0.1.54 [INFO] [stderr] Compiling hashbrown v0.14.5 [INFO] [stderr] Compiling nonzero_ext v0.3.0 [INFO] [stderr] Compiling rand_chacha v0.3.1 [INFO] [stderr] Compiling rand_chacha v0.9.0 [INFO] [stderr] Compiling argon2 v0.5.3 [INFO] [stderr] Compiling num_cpus v1.17.0 [INFO] [stderr] Compiling rand v0.8.5 [INFO] [stderr] Compiling regex-automata v0.1.10 [INFO] [stderr] Compiling futures-executor v0.3.31 [INFO] [stderr] Compiling regex v1.11.1 [INFO] [stderr] Compiling rand v0.9.2 [INFO] [stderr] Compiling hashlink v0.8.4 [INFO] [stderr] Compiling ordered-multimap v0.7.3 [INFO] [stderr] Compiling ring v0.17.14 [INFO] [stderr] Compiling aws-lc-sys v0.30.0 [INFO] [stderr] Compiling libsqlite3-sys v0.30.1 [INFO] [stderr] Compiling blake3 v1.8.2 [INFO] [stderr] Compiling rust-ini v0.20.0 [INFO] [stderr] Compiling yaml-rust2 v0.8.1 [INFO] [stderr] Compiling synstructure v0.13.2 [INFO] [stderr] Compiling matchers v0.1.0 [INFO] [stderr] Compiling serde_derive v1.0.219 [INFO] [stderr] Compiling zerofrom-derive v0.1.6 [INFO] [stderr] Compiling yoke-derive v0.8.0 [INFO] [stderr] Compiling zeroize_derive v1.4.2 [INFO] [stderr] Compiling zerovec-derive v0.11.1 [INFO] [stderr] Compiling displaydoc v0.2.5 [INFO] [stderr] Compiling thiserror-impl v2.0.12 [INFO] [stderr] Compiling tracing-attributes v0.1.30 [INFO] [stderr] Compiling tokio-macros v2.5.0 [INFO] [stderr] Compiling futures-macro v0.3.31 [INFO] [stderr] Compiling curve25519-dalek-derive v0.1.1 [INFO] [stderr] Compiling async-trait v0.1.88 [INFO] [stderr] Compiling cipher v0.4.4 [INFO] [stderr] Compiling pin-project-internal v1.1.10 [INFO] [stderr] Compiling tokio-stream v0.1.17 [INFO] [stderr] Compiling chacha20 v0.9.1 [INFO] [stderr] Compiling rustls-pemfile v2.2.0 [INFO] [stderr] Compiling chacha20poly1305 v0.10.1 [INFO] [stderr] Compiling thiserror v2.0.12 [INFO] [stderr] Compiling pest v2.8.1 [INFO] [stderr] Compiling tracing v0.1.41 [INFO] [stderr] Compiling zerofrom v0.1.6 [INFO] [stderr] Compiling pin-project v1.1.10 [INFO] [stderr] Compiling yoke v0.8.0 [INFO] [stderr] Compiling zerovec v0.11.2 [INFO] [stderr] Compiling zerotrie v0.2.2 [INFO] [stderr] Compiling rustls-webpki v0.103.4 [INFO] [stderr] Compiling rustls-webpki v0.102.8 [INFO] [stderr] Compiling pest_meta v2.8.1 [INFO] [stderr] Compiling tinystr v0.8.1 [INFO] [stderr] Compiling potential_utf v0.1.2 [INFO] [stderr] Compiling icu_collections v2.0.0 [INFO] [stderr] Compiling icu_locale_core v2.0.0 [INFO] [stderr] Compiling pest_generator v2.8.1 [INFO] [stderr] Compiling icu_provider v2.0.0 [INFO] [stderr] Compiling icu_properties v2.0.1 [INFO] [stderr] Compiling pest_derive v2.8.1 [INFO] [stderr] Compiling futures v0.3.31 [INFO] [stderr] Compiling smallvec v1.15.1 [INFO] [stderr] Compiling either v1.15.0 [INFO] [stderr] Compiling bitflags v2.9.1 [INFO] [stderr] Compiling serde_urlencoded v0.7.1 [INFO] [stderr] Compiling parking_lot_core v0.9.11 [INFO] [stderr] Compiling icu_normalizer v2.0.0 [INFO] [stderr] Compiling toml_datetime v0.6.11 [INFO] [stderr] Compiling serde_spanned v0.6.9 [INFO] [stderr] Compiling parking_lot v0.12.4 [INFO] [stderr] Compiling raw-cpuid v11.5.0 [INFO] [stderr] Compiling ed25519 v2.2.3 [INFO] [stderr] Compiling toml_edit v0.22.27 [INFO] [stderr] Compiling idna_adapter v1.2.1 [INFO] [stderr] Compiling idna v1.0.3 [INFO] [stderr] Compiling futures-intrusive v0.5.0 [INFO] [stderr] Compiling dashmap v6.1.0 [INFO] [stderr] Compiling ron v0.8.1 [INFO] [stderr] Compiling url v2.5.4 [INFO] [stderr] Compiling bincode v1.3.3 [INFO] [stderr] Compiling json5 v0.4.1 [INFO] [stderr] Compiling tracing-subscriber v0.3.19 [INFO] [stderr] Compiling legion-protocol v0.1.0 [INFO] [stderr] Compiling sqlx-core v0.8.6 [INFO] [stderr] Compiling ed25519-dalek v2.2.0 [INFO] [stderr] Compiling x25519-dalek v2.0.1 [INFO] [stderr] Compiling quanta v0.12.6 [INFO] [stderr] Compiling toml v0.8.23 [INFO] [stderr] Compiling governor v0.8.1 [INFO] [stderr] Compiling config v0.14.1 [INFO] [stderr] Compiling sqlx-sqlite v0.8.6 [INFO] [stderr] Compiling sqlx-postgres v0.8.6 [INFO] [stderr] Compiling tokio-util v0.7.15 [INFO] [stderr] Compiling phalanx-crypto v0.1.0 [INFO] [stderr] Compiling sqlx-macros-core v0.8.6 [INFO] [stderr] Compiling sqlx-macros v0.8.6 [INFO] [stderr] Compiling tokio-rustls v0.26.2 [INFO] [stderr] Compiling sqlx v0.8.6 [INFO] [stderr] Compiling legion-server v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `bytes::BytesMut` [INFO] [stdout] --> src/actors/connection.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | use bytes::BytesMut; [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: `timeout` [INFO] [stdout] --> src/actors/connection.rs:10:29 [INFO] [stdout] | [INFO] [stdout] 10 | use tokio::time::{interval, timeout}; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `trace` and `warn` [INFO] [stdout] --> src/actors/connection.rs:13:35 [INFO] [stdout] | [INFO] [stdout] 13 | use tracing::{debug, error, info, warn, trace}; [INFO] [stdout] | ^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/actors/channel.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `warn` [INFO] [stdout] --> src/actors/channel.rs:6:28 [INFO] [stdout] | [INFO] [stdout] 6 | use tracing::{debug, info, warn}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `ChannelMember` [INFO] [stdout] --> src/actors/channel.rs:9:29 [INFO] [stdout] | [INFO] [stdout] 9 | use crate::state::{Channel, ChannelMember, ServerState}; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `self::channel::ChannelActor` [INFO] [stdout] --> src/actors/mod.rs:6:9 [INFO] [stdout] | [INFO] [stdout] 6 | pub use self::channel::ChannelActor; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `info` [INFO] [stdout] --> src/commands/mod.rs:4:22 [INFO] [stdout] | [INFO] [stdout] 4 | use tracing::{debug, info}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Reply` [INFO] [stdout] --> src/commands/handlers/notice.rs:3:32 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::protocol::{Message, Reply}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Reply` [INFO] [stdout] --> src/commands/handlers/list.rs:3:32 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::protocol::{Message, Reply}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Reply` [INFO] [stdout] --> src/commands/handlers/nick.rs:4:32 [INFO] [stdout] | [INFO] [stdout] 4 | use crate::protocol::{Message, Reply}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `HistoryItem` and `MessageType` [INFO] [stdout] --> src/commands/handlers/chathistory.rs:5:22 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::history::{HistoryItem, HistoryQuery, QueryResult, MessageType}; [INFO] [stdout] | ^^^^^^^^^^^ ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `StandardReply` [INFO] [stdout] --> src/commands/handlers/chathistory.rs:6:41 [INFO] [stdout] | [INFO] [stdout] 6 | use crate::commands::standard_replies::{StandardReply, common}; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around block return value [INFO] [stdout] --> src/commands/handlers/query.rs:17:13 [INFO] [stdout] | [INFO] [stdout] 17 | (conn.nickname.clone().unwrap_or_else(|| "*".to_string())) [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 17 - (conn.nickname.clone().unwrap_or_else(|| "*".to_string())) [INFO] [stdout] 17 + conn.nickname.clone().unwrap_or_else(|| "*".to_string()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `VecDeque` [INFO] [stdout] --> src/history/mod.rs:2:34 [INFO] [stdout] | [INFO] [stdout] 2 | use std::collections::{BTreeMap, VecDeque}; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::sync::RwLock` [INFO] [stdout] --> src/history/mod.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::sync::RwLock; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `format_timestamp` [INFO] [stdout] --> src/history/storage.rs:1:39 [INFO] [stdout] | [INFO] [stdout] 1 | use super::{HistoryItem, MessageType, format_timestamp}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `HistoryConfig` [INFO] [stdout] --> src/history/mod.rs:10:35 [INFO] [stdout] | [INFO] [stdout] 10 | pub use storage::{HistoryStorage, HistoryConfig}; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `is_legion_encrypted_channel` [INFO] [stdout] --> src/legion/channels.rs:6:30 [INFO] [stdout] | [INFO] [stdout] 6 | use legion_protocol::utils::{is_legion_encrypted_channel, ChannelType, get_channel_type}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Identity` [INFO] [stdout] --> src/legion/keys.rs:6:22 [INFO] [stdout] | [INFO] [stdout] 6 | use phalanx_crypto::{Identity, protocol::KeyRotationMessage}; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Identity` [INFO] [stdout] --> src/legion/federation.rs:6:22 [INFO] [stdout] | [INFO] [stdout] 6 | use phalanx_crypto::{Identity, PublicKey}; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `PublicKey` [INFO] [stdout] --> src/legion/channel_manager.rs:9:32 [INFO] [stdout] | [INFO] [stdout] 9 | use phalanx_crypto::{Identity, PublicKey}; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `debug`, `error`, and `warn` [INFO] [stdout] --> src/legion/channel_manager.rs:14:15 [INFO] [stdout] | [INFO] [stdout] 14 | use tracing::{debug, info, warn, error}; [INFO] [stdout] | ^^^^^ ^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `IronSession` and `IronVersion` [INFO] [stdout] --> src/legion/mod.rs:14:23 [INFO] [stdout] | [INFO] [stdout] 14 | use legion_protocol::{IronSession, IronVersion, Capability}; [INFO] [stdout] | ^^^^^^^^^^^ ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `PhalanxGroup` [INFO] [stdout] --> src/legion/mod.rs:15:32 [INFO] [stdout] | [INFO] [stdout] 15 | use phalanx_crypto::{Identity, PhalanxGroup, AsyncPhalanxGroup}; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Command as ProtocolCommand` [INFO] [stdout] --> src/protocol/mod.rs:2:35 [INFO] [stdout] | [INFO] [stdout] 2 | use legion_protocol::{IrcMessage, Command as ProtocolCommand, IronError}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/protocol/mod.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `thiserror::Error` [INFO] [stdout] --> src/protocol/mod.rs:4:5 [INFO] [stdout] | [INFO] [stdout] 4 | use thiserror::Error; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Buf` [INFO] [stdout] --> src/protocol/codec.rs:1:13 [INFO] [stdout] | [INFO] [stdout] 1 | use bytes::{Buf, BufMut, BytesMut}; [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::str::FromStr` [INFO] [stdout] --> src/protocol/commands.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use std::str::FromStr; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `CapabilityHandler`, `CapabilitySet`, `Capability`, `constants`, and `utils` [INFO] [stdout] --> src/protocol/mod.rs:23:5 [INFO] [stdout] | [INFO] [stdout] 23 | Capability, CapabilitySet, CapabilityHandler, [INFO] [stdout] | ^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ [INFO] [stdout] 24 | constants, utils, Reply [INFO] [stdout] | ^^^^^^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `SaslAuth` and `SaslMechanism` [INFO] [stdout] --> src/protocol/mod.rs:27:33 [INFO] [stdout] | [INFO] [stdout] 27 | pub use legion_protocol::sasl::{SaslAuth, SaslMechanism}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `legion_protocol::bleeding_edge` [INFO] [stdout] --> src/protocol/mod.rs:30:9 [INFO] [stdout] | [INFO] [stdout] 30 | pub use legion_protocol::bleeding_edge; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Argon2` and `PasswordHash` [INFO] [stdout] --> src/security/auth.rs:1:14 [INFO] [stdout] | [INFO] [stdout] 1 | use argon2::{Argon2, PasswordHash}; [INFO] [stdout] | ^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `PasswordHasher as ArgonPasswordHasher`, `SaltString`, and `rand_core::OsRng` [INFO] [stdout] --> src/security/auth.rs:2:29 [INFO] [stdout] | [INFO] [stdout] 2 | use argon2::password_hash::{rand_core::OsRng, SaltString, PasswordHasher as ArgonPasswordHasher}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `AuthMethod`, `SaslMechanism`, and `authenticate` [INFO] [stdout] --> src/security/mod.rs:14:22 [INFO] [stdout] | [INFO] [stdout] 14 | pub use self::auth::{AuthMethod, SaslMechanism, authenticate}; [INFO] [stdout] | ^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `validate_message` and `validate_nickname` [INFO] [stdout] --> src/security/mod.rs:15:28 [INFO] [stdout] | [INFO] [stdout] 15 | pub use self::validation::{validate_nickname, validate_channel_name, validate_message}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated unit variant `legion_protocol::Capability::IronProtocolV1`: Use LegionProtocolV1 instead [INFO] [stdout] --> src/legion/session.rs:45:70 [INFO] [stdout] | [INFO] [stdout] 45 | matches!(cap, Capability::LegionProtocolV1 | Capability::IronProtocolV1) [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated unit variant `legion_protocol::Capability::IronProtocolV1`: Use LegionProtocolV1 instead [INFO] [stdout] --> src/legion/session.rs:52:58 [INFO] [stdout] | [INFO] [stdout] 52 | } else if capabilities.contains(&Capability::IronProtocolV1) { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated unit variant `legion_protocol::Capability::IronProtocolV1`: Use LegionProtocolV1 instead [INFO] [stdout] --> src/legion/session.rs:74:49 [INFO] [stdout] | [INFO] [stdout] 74 | self.capabilities.contains(&Capability::IronProtocolV1) [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/actors/connection.rs:49:17 [INFO] [stdout] | [INFO] [stdout] 49 | let mut state = server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/actors/connection.rs:128:17 [INFO] [stdout] | [INFO] [stdout] 128 | let mut state = self.server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `cap_version` [INFO] [stdout] --> src/actors/connection.rs:183:21 [INFO] [stdout] | [INFO] [stdout] 183 | let cap_version = if !params.is_empty() { [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_cap_version` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/actors/connection.rs:244:33 [INFO] [stdout] | [INFO] [stdout] 244 | ... let mut state = self.server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/actors/connection.rs:299:17 [INFO] [stdout] | [INFO] [stdout] 299 | let mut state = self.server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/actors/connection.rs:349:17 [INFO] [stdout] | [INFO] [stdout] 349 | let mut state = self.server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/join.rs:14:9 [INFO] [stdout] | [INFO] [stdout] 14 | let mut state = server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/part.rs:13:9 [INFO] [stdout] | [INFO] [stdout] 13 | let mut state = server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `user` [INFO] [stdout] --> src/commands/handlers/privmsg.rs:15:16 [INFO] [stdout] | [INFO] [stdout] 15 | let (nick, user, host, has_echo_message, msg_id, privmsg) = { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_user` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `host` [INFO] [stdout] --> src/commands/handlers/privmsg.rs:15:22 [INFO] [stdout] | [INFO] [stdout] 15 | let (nick, user, host, has_echo_message, msg_id, privmsg) = { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_host` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `user` [INFO] [stdout] --> src/commands/handlers/notice.rs:21:16 [INFO] [stdout] | [INFO] [stdout] 21 | let (nick, user, host, has_echo_message, msg_id, notice_msg) = { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_user` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `host` [INFO] [stdout] --> src/commands/handlers/notice.rs:21:22 [INFO] [stdout] | [INFO] [stdout] 21 | let (nick, user, host, has_echo_message, msg_id, notice_msg) = { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_host` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `member_nick` [INFO] [stdout] --> src/commands/handlers/who.rs:37:37 [INFO] [stdout] | [INFO] [stdout] 37 | if let Some(member_nick) = &member_conn.nickname { [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_member_nick` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `target_conn` [INFO] [stdout] --> src/commands/handlers/who.rs:66:25 [INFO] [stdout] | [INFO] [stdout] 66 | if let Some(target_conn) = state.connections.get(&target_id) { [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_target_conn` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/topic.rs:20:9 [INFO] [stdout] | [INFO] [stdout] 20 | let mut state = server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/mode.rs:82:9 [INFO] [stdout] | [INFO] [stdout] 82 | let mut mode_args = mode_params[1..].to_vec(); [INFO] [stdout] | ----^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/kick.rs:25:9 [INFO] [stdout] | [INFO] [stdout] 25 | let mut state = server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/nick.rs:16:9 [INFO] [stdout] | [INFO] [stdout] 16 | let mut state = server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `policy` [INFO] [stdout] --> src/legion/keys.rs:259:17 [INFO] [stdout] | [INFO] [stdout] 259 | let policy = drop(keys); [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: if this is intentional, prefix it with an underscore [INFO] [stdout] | [INFO] [stdout] 259 | let _policy = drop(keys); [INFO] [stdout] | + [INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_` [INFO] [stdout] | [INFO] [stdout] 259 - let policy = drop(keys); [INFO] [stdout] 259 + let utils::config::_ = drop(keys); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `channel` [INFO] [stdout] --> src/legion/keys.rs:339:18 [INFO] [stdout] | [INFO] [stdout] 339 | for (channel, channel_keys) in keys.iter_mut() { [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_channel` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `message` [INFO] [stdout] --> src/legion/federation.rs:298:84 [INFO] [stdout] | [INFO] [stdout] 298 | pub async fn send_federated_message(&self, target_server: &str, channel: &str, message: Vec) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_message` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `message` [INFO] [stdout] --> src/legion/federation.rs:319:87 [INFO] [stdout] | [INFO] [stdout] 319 | pub async fn process_federated_message(&self, source_server: &str, channel: &str, message: Vec) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_message` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `cleaned_servers` is never read [INFO] [stdout] --> src/legion/federation.rs:361:17 [INFO] [stdout] | [INFO] [stdout] 361 | let mut cleaned_servers = 0; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `member` [INFO] [stdout] --> src/legion/channel_manager.rs:525:33 [INFO] [stdout] | [INFO] [stdout] 525 | if let Some(member) = channel.members.remove(target_user) { [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_member` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `operator_identity` [INFO] [stdout] --> src/legion/channel_manager.rs:753:9 [INFO] [stdout] | [INFO] [stdout] 753 | operator_identity: &Identity, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_operator_identity` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `channel` [INFO] [stdout] --> src/legion/mod.rs:229:13 [INFO] [stdout] | [INFO] [stdout] 229 | let channel = self.channels.get(&channel_name) [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_channel` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `members::ChannelSettings` is more private than the item `members::ChannelStats::settings` [INFO] [stdout] --> src/legion/members.rs:635:5 [INFO] [stdout] | [INFO] [stdout] 635 | pub settings: ChannelSettings, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ field `members::ChannelStats::settings` is reachable at visibility `pub(crate)` [INFO] [stdout] | [INFO] [stdout] note: but type `members::ChannelSettings` is only usable at visibility `pub(self)` [INFO] [stdout] --> src/legion/members.rs:145:1 [INFO] [stdout] | [INFO] [stdout] 145 | struct ChannelSettings { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = note: `#[warn(private_interfaces)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `TrustLevel` is more private than the item `FederationManager::add_federated_server` [INFO] [stdout] --> src/legion/federation.rs:185:5 [INFO] [stdout] | [INFO] [stdout] 185 | pub async fn add_federated_server(&self, hostname: String, public_key: PublicKey, trust_level: TrustLevel) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method `FederationManager::add_federated_server` is reachable at visibility `pub(crate)` [INFO] [stdout] | [INFO] [stdout] note: but type `TrustLevel` is only usable at visibility `pub(self)` [INFO] [stdout] --> src/legion/federation.rs:51:1 [INFO] [stdout] | [INFO] [stdout] 51 | enum TrustLevel { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `FederationStatus` is more private than the item `FederationManager::update_server_status` [INFO] [stdout] --> src/legion/federation.rs:227:5 [INFO] [stdout] | [INFO] [stdout] 227 | pub async fn update_server_status(&self, hostname: &str, status: FederationStatus) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method `FederationManager::update_server_status` is reachable at visibility `pub(crate)` [INFO] [stdout] | [INFO] [stdout] note: but type `FederationStatus` is only usable at visibility `pub(self)` [INFO] [stdout] --> src/legion/federation.rs:42:1 [INFO] [stdout] | [INFO] [stdout] 42 | enum FederationStatus { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `ActivityEntry` is more private than the item `ExtendedChannelInfo::recent_activity` [INFO] [stdout] --> src/legion/channel_manager.rs:166:5 [INFO] [stdout] | [INFO] [stdout] 166 | pub recent_activity: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ field `ExtendedChannelInfo::recent_activity` is reachable at visibility `pub(crate)` [INFO] [stdout] | [INFO] [stdout] note: but type `ActivityEntry` is only usable at visibility `pub(self)` [INFO] [stdout] --> src/legion/channel_manager.rs:124:1 [INFO] [stdout] | [INFO] [stdout] 124 | struct ActivityEntry { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `PING_TIMEOUT` is never used [INFO] [stdout] --> src/actors/connection.rs:20:7 [INFO] [stdout] | [INFO] [stdout] 20 | const PING_TIMEOUT: Duration = Duration::from_secs(60); [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `tx` is never read [INFO] [stdout] --> src/actors/connection.rs:29:5 [INFO] [stdout] | [INFO] [stdout] 23 | pub struct ConnectionActor { [INFO] [stdout] | --------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 29 | tx: mpsc::Sender, [INFO] [stdout] | ^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `tx` is never read [INFO] [stdout] --> src/actors/channel.rs:16:5 [INFO] [stdout] | [INFO] [stdout] 11 | pub struct ChannelActor { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] ... [INFO] [stdout] 16 | tx: mpsc::Sender, [INFO] [stdout] | ^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Invite` is never constructed [INFO] [stdout] --> src/actors/channel.rs:47:5 [INFO] [stdout] | [INFO] [stdout] 20 | pub enum ChannelMessage { [INFO] [stdout] | -------------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 47 | Invite { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ChannelMessage` 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 `tx` is never read [INFO] [stdout] --> src/actors/server.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 11 | pub struct ServerActor { [INFO] [stdout] | ----------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 15 | tx: mpsc::Sender, [INFO] [stdout] | ^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `ConnectionCommand`, `CreateChannel`, `RemoveChannel`, `BroadcastMessage`, and `ServerNotice` are never constructed [INFO] [stdout] --> src/actors/server.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 19 | pub enum ServerMessage { [INFO] [stdout] | ------------- variants in this enum [INFO] [stdout] 20 | ConnectionCommand { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 24 | CreateChannel { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 28 | RemoveChannel { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | BroadcastMessage { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 35 | ServerNotice { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ServerMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `CommandProcessor` is never constructed [INFO] [stdout] --> src/commands/mod.rs:12:12 [INFO] [stdout] | [INFO] [stdout] 12 | pub struct CommandProcessor { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new` and `process` are never used [INFO] [stdout] --> src/commands/mod.rs:17:12 [INFO] [stdout] | [INFO] [stdout] 16 | impl CommandProcessor { [INFO] [stdout] | --------------------- associated items in this implementation [INFO] [stdout] 17 | pub fn new(server_state: Arc>) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 21 | pub async fn process( [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `handle_notice` is never used [INFO] [stdout] --> src/commands/handlers/notice.rs:8:14 [INFO] [stdout] | [INFO] [stdout] 8 | pub async fn handle_notice( [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `handle_oper` is never used [INFO] [stdout] --> src/commands/handlers/oper.rs:6:14 [INFO] [stdout] | [INFO] [stdout] 6 | pub async fn handle_oper( [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `handle_nick` is never used [INFO] [stdout] --> src/commands/handlers/nick.rs:9:14 [INFO] [stdout] | [INFO] [stdout] 9 | pub async fn handle_nick( [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `Warn` and `Note` are never constructed [INFO] [stdout] --> src/commands/standard_replies.rs:12:5 [INFO] [stdout] | [INFO] [stdout] 8 | pub enum StandardReplyType { [INFO] [stdout] | ----------------- variants in this enum [INFO] [stdout] ... [INFO] [stdout] 12 | Warn, [INFO] [stdout] | ^^^^ [INFO] [stdout] 13 | /// NOTE - Provides informational messages [INFO] [stdout] 14 | Note, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StandardReplyType` 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 variants are never constructed [INFO] [stdout] --> src/commands/standard_replies.rs:32:5 [INFO] [stdout] | [INFO] [stdout] 29 | pub enum StandardReplyCode { [INFO] [stdout] | ----------------- variants in this enum [INFO] [stdout] ... [INFO] [stdout] 32 | AccountRequiredToConnect, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 38 | NeedMoreParams, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 39 | /// Message could not be retrieved [INFO] [stdout] 40 | MessageError, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 41 | /// Unknown error occurred [INFO] [stdout] 42 | UnknownError, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 46 | CannotSendToChan, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 47 | /// No such channel exists [INFO] [stdout] 48 | NoSuchChannel, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 49 | /// Not on channel [INFO] [stdout] 50 | NotOnChannel, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 51 | /// Channel is invite-only [INFO] [stdout] 52 | InviteOnlyChan, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 53 | /// Channel key required [INFO] [stdout] 54 | BadChannelKey, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 55 | /// Channel is full [INFO] [stdout] 56 | ChannelIsFull, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 57 | /// Banned from channel [INFO] [stdout] 58 | BannedFromChan, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 62 | NoSuchNick, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 63 | /// Nickname in use [INFO] [stdout] 64 | NicknameInUse, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 65 | /// Invalid nickname [INFO] [stdout] 66 | InvalidNickname, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 70 | SaslFail, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 71 | /// Invalid credentials provided [INFO] [stdout] 72 | InvalidCredentials, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 73 | /// Registration failed [INFO] [stdout] 74 | RegFail, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 75 | /// Account registration callback invalid [INFO] [stdout] 76 | RegInvalidCallback, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 77 | /// Account already registered [INFO] [stdout] 78 | AlreadyRegistered, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 82 | UnknownCommand, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 83 | /// Command disabled [INFO] [stdout] 84 | CommandDisabled, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 88 | RateLimitExceeded, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] 89 | /// Resource limit exceeded [INFO] [stdout] 90 | ResourceLimit, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 93 | Custom(String), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StandardReplyCode` 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 `warn`, `note`, and `with_context` are never used [INFO] [stdout] --> src/commands/standard_replies.rs:157:12 [INFO] [stdout] | [INFO] [stdout] 144 | impl StandardReply { [INFO] [stdout] | ------------------ associated items in this implementation [INFO] [stdout] ... [INFO] [stdout] 157 | pub fn warn(command: &str, code: StandardReplyCode, description: &str) -> Self { [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 168 | pub fn note(command: &str, code: StandardReplyCode, description: &str) -> Self { [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 179 | pub fn with_context(mut self, context: Vec) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `no_such_channel` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:225:12 [INFO] [stdout] | [INFO] [stdout] 225 | pub fn no_such_channel(command: &str, channel: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `no_such_nick` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:231:12 [INFO] [stdout] | [INFO] [stdout] 231 | pub fn no_such_nick(command: &str, nick: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `not_on_channel` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:237:12 [INFO] [stdout] | [INFO] [stdout] 237 | pub fn not_on_channel(command: &str, channel: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `cannot_send_to_chan` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:243:12 [INFO] [stdout] | [INFO] [stdout] 243 | pub fn cannot_send_to_chan(command: &str, channel: &str, reason: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `nickname_in_use` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:249:12 [INFO] [stdout] | [INFO] [stdout] 249 | pub fn nickname_in_use(command: &str, nick: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `invalid_nickname` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:255:12 [INFO] [stdout] | [INFO] [stdout] 255 | pub fn invalid_nickname(command: &str, nick: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `unknown_command` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:261:12 [INFO] [stdout] | [INFO] [stdout] 261 | pub fn unknown_command(command: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `rate_limit_exceeded` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:267:12 [INFO] [stdout] | [INFO] [stdout] 267 | pub fn rate_limit_exceeded(command: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `deprecated_command` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:272:12 [INFO] [stdout] | [INFO] [stdout] 272 | pub fn deprecated_command(command: &str, alternative: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `info_note` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:278:12 [INFO] [stdout] | [INFO] [stdout] 278 | pub fn info_note(command: &str, message: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `DatabaseError` is never used [INFO] [stdout] --> src/db/mod.rs:12:10 [INFO] [stdout] | [INFO] [stdout] 12 | pub enum DatabaseError { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `Database` is never used [INFO] [stdout] --> src/db/mod.rs:30:10 [INFO] [stdout] | [INFO] [stdout] 30 | pub enum Database { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> src/db/mod.rs:36:18 [INFO] [stdout] | [INFO] [stdout] 35 | impl Database { [INFO] [stdout] | ------------- associated items in this implementation [INFO] [stdout] 36 | pub async fn connect_postgres(url: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 41 | pub async fn connect_sqlite(url: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 46 | pub async fn run_migrations(&self) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 52 | pub async fn create_user(&self, user: &User) -> Result { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 56 | pub async fn get_user_by_nickname(&self, nickname: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 60 | pub async fn get_user_by_id(&self, id: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 64 | pub async fn update_user(&self, user: &User) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 68 | pub async fn authenticate_user(&self, nickname: &str, password: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 73 | pub async fn create_channel(&self, channel: &Channel) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 77 | pub async fn get_channel(&self, name: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 81 | pub async fn update_channel(&self, channel: &Channel) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 85 | pub async fn delete_channel(&self, name: &str) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 89 | pub async fn list_channels(&self) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 94 | pub async fn add_channel_member(&self, member: &ChannelMember) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 98 | pub async fn remove_channel_member(&self, channel: &str, user_id: &str) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 102 | pub async fn get_channel_members(&self, channel: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 106 | pub async fn get_user_channels(&self, user_id: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 111 | pub async fn add_ban(&self, ban: &BanEntry) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 115 | pub async fn remove_ban(&self, channel: &str, mask: &str) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 119 | pub async fn get_channel_bans(&self, channel: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 123 | pub async fn is_banned(&self, channel: &str, user_mask: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 128 | pub async fn get_server_config(&self) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 132 | pub async fn update_server_config(&self, config: &ServerConfig) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `User` is never constructed [INFO] [stdout] --> src/db/models.rs:6:12 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct User { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `new` is never used [INFO] [stdout] --> src/db/models.rs:25:12 [INFO] [stdout] | [INFO] [stdout] 24 | impl User { [INFO] [stdout] | --------- associated function in this implementation [INFO] [stdout] 25 | pub fn new(nickname: String, username: String, realname: String, password_hash: String) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Channel` is never constructed [INFO] [stdout] --> src/db/models.rs:47:12 [INFO] [stdout] | [INFO] [stdout] 47 | pub struct Channel { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `new` is never used [INFO] [stdout] --> src/db/models.rs:66:12 [INFO] [stdout] | [INFO] [stdout] 65 | impl Channel { [INFO] [stdout] | ------------ associated function in this implementation [INFO] [stdout] 66 | pub fn new(name: String, founder: Option) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelMember` is never constructed [INFO] [stdout] --> src/db/models.rs:88:12 [INFO] [stdout] | [INFO] [stdout] 88 | pub struct ChannelMember { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `BanEntry` is never constructed [INFO] [stdout] --> src/db/models.rs:97:12 [INFO] [stdout] | [INFO] [stdout] 97 | pub struct BanEntry { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ServerConfig` is never constructed [INFO] [stdout] --> src/db/models.rs:107:12 [INFO] [stdout] | [INFO] [stdout] 107 | pub struct ServerConfig { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `MessageLog` is never constructed [INFO] [stdout] --> src/db/models.rs:164:12 [INFO] [stdout] | [INFO] [stdout] 164 | pub struct MessageLog { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `OperatorCredential` is never constructed [INFO] [stdout] --> src/db/models.rs:175:12 [INFO] [stdout] | [INFO] [stdout] 175 | pub struct OperatorCredential { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `create_user` is never used [INFO] [stdout] --> src/db/queries/users.rs:3:14 [INFO] [stdout] | [INFO] [stdout] 3 | pub async fn create_user(_db: &Database, user: &User) -> Result { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_user_by_nickname` is never used [INFO] [stdout] --> src/db/queries/users.rs:8:14 [INFO] [stdout] | [INFO] [stdout] 8 | pub async fn get_user_by_nickname( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_user_by_id` is never used [INFO] [stdout] --> src/db/queries/users.rs:16:14 [INFO] [stdout] | [INFO] [stdout] 16 | pub async fn get_user_by_id(_db: &Database, _id: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `update_user` is never used [INFO] [stdout] --> src/db/queries/users.rs:21:14 [INFO] [stdout] | [INFO] [stdout] 21 | pub async fn update_user(_db: &Database, _user: &User) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `authenticate_user` is never used [INFO] [stdout] --> src/db/queries/users.rs:26:14 [INFO] [stdout] | [INFO] [stdout] 26 | pub async fn authenticate_user( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `create_channel` is never used [INFO] [stdout] --> src/db/queries/channels.rs:3:14 [INFO] [stdout] | [INFO] [stdout] 3 | pub async fn create_channel(_db: &Database, channel: &Channel) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_channel` is never used [INFO] [stdout] --> src/db/queries/channels.rs:8:14 [INFO] [stdout] | [INFO] [stdout] 8 | pub async fn get_channel(_db: &Database, _name: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `update_channel` is never used [INFO] [stdout] --> src/db/queries/channels.rs:13:14 [INFO] [stdout] | [INFO] [stdout] 13 | pub async fn update_channel(_db: &Database, _channel: &Channel) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `delete_channel` is never used [INFO] [stdout] --> src/db/queries/channels.rs:18:14 [INFO] [stdout] | [INFO] [stdout] 18 | pub async fn delete_channel(_db: &Database, _name: &str) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `list_channels` is never used [INFO] [stdout] --> src/db/queries/channels.rs:23:14 [INFO] [stdout] | [INFO] [stdout] 23 | pub async fn list_channels(_db: &Database) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `add_channel_member` is never used [INFO] [stdout] --> src/db/queries/channels.rs:28:14 [INFO] [stdout] | [INFO] [stdout] 28 | pub async fn add_channel_member(_db: &Database, _member: &ChannelMember) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `remove_channel_member` is never used [INFO] [stdout] --> src/db/queries/channels.rs:33:14 [INFO] [stdout] | [INFO] [stdout] 33 | pub async fn remove_channel_member(_db: &Database, _channel: &str, _user_id: &str) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_channel_members` is never used [INFO] [stdout] --> src/db/queries/channels.rs:38:14 [INFO] [stdout] | [INFO] [stdout] 38 | pub async fn get_channel_members(_db: &Database, _channel: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_user_channels` is never used [INFO] [stdout] --> src/db/queries/channels.rs:43:14 [INFO] [stdout] | [INFO] [stdout] 43 | pub async fn get_user_channels(_db: &Database, _user_id: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `add_ban` is never used [INFO] [stdout] --> src/db/queries/bans.rs:3:14 [INFO] [stdout] | [INFO] [stdout] 3 | pub async fn add_ban(_db: &Database, _ban: &BanEntry) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `remove_ban` is never used [INFO] [stdout] --> src/db/queries/bans.rs:8:14 [INFO] [stdout] | [INFO] [stdout] 8 | pub async fn remove_ban(_db: &Database, _channel: &str, _mask: &str) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_channel_bans` is never used [INFO] [stdout] --> src/db/queries/bans.rs:13:14 [INFO] [stdout] | [INFO] [stdout] 13 | pub async fn get_channel_bans(_db: &Database, _channel: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_banned` is never used [INFO] [stdout] --> src/db/queries/bans.rs:18:14 [INFO] [stdout] | [INFO] [stdout] 18 | pub async fn is_banned(_db: &Database, _channel: &str, _user_mask: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_server_config` is never used [INFO] [stdout] --> src/db/queries/config.rs:3:14 [INFO] [stdout] | [INFO] [stdout] 3 | pub async fn get_server_config(_db: &Database) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `update_server_config` is never used [INFO] [stdout] --> src/db/queries/config.rs:8:14 [INFO] [stdout] | [INFO] [stdout] 8 | pub async fn update_server_config(_db: &Database, _config: &ServerConfig) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `create_schema_sql` is never used [INFO] [stdout] --> src/db/migrations.rs:3:8 [INFO] [stdout] | [INFO] [stdout] 3 | pub fn create_schema_sql() -> &'static str { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Config` is never constructed [INFO] [stdout] --> src/error.rs:22:5 [INFO] [stdout] | [INFO] [stdout] 7 | pub enum CenturionError { [INFO] [stdout] | -------------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 22 | Config(String), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `CenturionError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `has_msgid` and `timestamp_secs` are never used [INFO] [stdout] --> src/history/mod.rs:81:12 [INFO] [stdout] | [INFO] [stdout] 56 | impl HistoryItem { [INFO] [stdout] | ---------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 81 | pub fn has_msgid(&self, msgid: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 86 | pub fn timestamp_secs(&self) -> u64 { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `cleanup_old_messages` is never used [INFO] [stdout] --> src/history/storage.rs:286:12 [INFO] [stdout] | [INFO] [stdout] 195 | impl HistoryStorage { [INFO] [stdout] | ------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 286 | pub fn cleanup_old_messages(&self) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `is_empty` is never used [INFO] [stdout] --> src/history/queries.rs:33:12 [INFO] [stdout] | [INFO] [stdout] 11 | impl HistorySelector { [INFO] [stdout] | -------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 33 | pub fn is_empty(&self) -> bool { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `start` and `end` are never read [INFO] [stdout] --> src/history/queries.rs:74:9 [INFO] [stdout] | [INFO] [stdout] 73 | Targets { [INFO] [stdout] | ------- fields in this variant [INFO] [stdout] 74 | start: Option, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 75 | end: Option, [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `HistoryQuery` 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: variants `Channel`, `Member`, `Key`, `Session`, and `Federation` are never constructed [INFO] [stdout] --> src/legion/mod.rs:36:5 [INFO] [stdout] | [INFO] [stdout] 25 | pub enum LegionError { [INFO] [stdout] | ----------- variants in this enum [INFO] [stdout] ... [INFO] [stdout] 36 | Channel(String), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 40 | Member(String), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 44 | Key(String), [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 48 | Session(String), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 52 | Federation(String), [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LegionError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `server_identity`, `channels`, `sessions`, `key_manager`, `member_manager`, and `federation_manager` are never read [INFO] [stdout] --> src/legion/mod.rs:63:5 [INFO] [stdout] | [INFO] [stdout] 61 | pub struct LegionManager { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] 62 | /// Server identity for Legion operations [INFO] [stdout] 63 | server_identity: Arc>, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] 64 | /// Active Legion channels [INFO] [stdout] 65 | channels: Arc>, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 66 | /// Client sessions with Legion capabilities [INFO] [stdout] 67 | sessions: Arc>, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 68 | /// Key manager for rotation and storage [INFO] [stdout] 69 | key_manager: Arc, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 70 | /// Member manager for authentication and authorization [INFO] [stdout] 71 | member_manager: Arc, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 72 | /// Federation manager for cross-server communication [INFO] [stdout] 73 | federation_manager: Arc, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LegionManager` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple methods are never used [INFO] [stdout] --> src/legion/mod.rs:95:18 [INFO] [stdout] | [INFO] [stdout] 76 | impl LegionManager { [INFO] [stdout] | ------------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 95 | pub async fn server_identity(&self) -> Identity { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 100 | pub async fn supports_legion(&self, client_id: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 109 | pub async fn create_session(&self, client_id: String, capabilities: Vec) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 116 | pub async fn remove_session(&self, client_id: &str) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 122 | pub async fn create_channel(&self, channel_name: String, creator_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 160 | pub async fn join_channel(&self, channel_name: String, client_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 200 | pub async fn leave_channel(&self, channel_name: String, client_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 222 | pub async fn send_message( [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 246 | pub async fn receive_message( [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 277 | pub async fn channel_stats(&self, channel_name: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 285 | pub async fn list_channels(&self) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 290 | pub async fn rotate_channel_keys(&self, channel_name: String, admin_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 312 | pub async fn cleanup(&self) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `ChannelOperation` is never used [INFO] [stdout] --> src/legion/channels.rs:13:10 [INFO] [stdout] | [INFO] [stdout] 13 | pub enum ChannelOperation { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelEvent` is never constructed [INFO] [stdout] --> src/legion/channels.rs:29:12 [INFO] [stdout] | [INFO] [stdout] 29 | pub struct ChannelEvent { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> src/legion/channels.rs:41:12 [INFO] [stdout] | [INFO] [stdout] 39 | impl LegionManager { [INFO] [stdout] | ------------------ associated items in this implementation [INFO] [stdout] 40 | /// Validate channel name for Legion Protocol [INFO] [stdout] 41 | pub fn validate_channel_name(channel_name: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 60 | pub async fn handle_create_channel(&self, channel_name: String, creator_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 88 | pub async fn handle_join_channel(&self, channel_name: String, client_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 114 | pub async fn handle_leave_channel(&self, channel_name: String, client_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 135 | pub async fn handle_send_message(&self, channel_name: String, sender_id: String, message: String) -> LegionResult> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 164 | pub async fn handle_receive_message(&self, channel_name: String, recipient_id: String, encrypted_data: Vec) -> LegionResult LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 201 | pub async fn get_channel_info(&self, channel_name: &str, requester_id: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 231 | pub async fn list_user_channels(&self, user_id: &str) -> LegionResult> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 252 | async fn log_channel_event(&self, event: ChannelEvent) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelInfo` is never constructed [INFO] [stdout] --> src/legion/channels.rs:261:12 [INFO] [stdout] | [INFO] [stdout] 261 | pub struct ChannelInfo { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelSummary` is never constructed [INFO] [stdout] --> src/legion/channels.rs:271:12 [INFO] [stdout] | [INFO] [stdout] 271 | pub struct ChannelSummary { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_OLD_KEYS` is never used [INFO] [stdout] --> src/legion/keys.rs:18:7 [INFO] [stdout] | [INFO] [stdout] 18 | const MAX_OLD_KEYS: usize = 10; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `channel_keys`, `rotation_policies`, `kdf_context`, and `backup_handler` are never read [INFO] [stdout] --> src/legion/keys.rs:24:5 [INFO] [stdout] | [INFO] [stdout] 22 | pub struct KeyManager { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 23 | /// Channel key storage [INFO] [stdout] 24 | channel_keys: RwLock>, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 25 | /// Key rotation policies [INFO] [stdout] 26 | rotation_policies: RwLock>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] 27 | /// Key derivation context [INFO] [stdout] 28 | kdf_context: Vec, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 29 | /// Backup storage handler [INFO] [stdout] 30 | backup_handler: Option>, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `KeyManager` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `current_rotation`, `old_rotations`, `created_at`, `last_rotation`, and `next_rotation` are never read [INFO] [stdout] --> src/legion/keys.rs:37:5 [INFO] [stdout] | [INFO] [stdout] 35 | struct ChannelKeys { [INFO] [stdout] | ----------- fields in this struct [INFO] [stdout] 36 | /// Current active key rotation info [INFO] [stdout] 37 | current_rotation: KeyRotationInfo, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 38 | /// Previous keys for backward compatibility [INFO] [stdout] 39 | old_rotations: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 40 | /// Channel creation timestamp [INFO] [stdout] 41 | created_at: SystemTime, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 42 | /// Last rotation timestamp [INFO] [stdout] 43 | last_rotation: SystemTime, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 44 | /// Next scheduled rotation [INFO] [stdout] 45 | next_rotation: SystemTime, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ChannelKeys` 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 `store_backup`, `retrieve_backup`, `list_backups`, and `cleanup_backups` are never used [INFO] [stdout] --> src/legion/keys.rs:106:14 [INFO] [stdout] | [INFO] [stdout] 104 | pub trait BackupHandler: Send + Sync + std::fmt::Debug { [INFO] [stdout] | ------------- methods in this trait [INFO] [stdout] 105 | /// Store a key rotation backup [INFO] [stdout] 106 | async fn store_backup(&self, channel: &str, rotation: &KeyRotationInfo) -> LegionResult<()>; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 109 | async fn retrieve_backup(&self, channel: &str, sequence: u64) -> LegionResult>; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 112 | async fn list_backups(&self, channel: &str) -> LegionResult>; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 115 | async fn cleanup_backups(&self, channel: &str, keep_count: usize) -> LegionResult<()>; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple methods are never used [INFO] [stdout] --> src/legion/keys.rs:146:18 [INFO] [stdout] | [INFO] [stdout] 130 | impl KeyManager { [INFO] [stdout] | --------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 146 | pub async fn set_backup_handler(&mut self, handler: Box) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 151 | pub async fn set_rotation_policy(&self, channel: String, policy: RotationPolicy) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 160 | pub async fn get_rotation_policy(&self, channel: &str) -> RotationPolicy { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 166 | pub async fn store_key_rotation(&self, channel: &str, rotation_msg: &KeyRotationMessage) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 215 | pub async fn get_current_rotation(&self, channel: &str) -> LegionResult> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 221 | pub async fn get_rotation_by_sequence(&self, channel: &str, sequence: u64) -> LegionResult> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 247 | pub async fn needs_rotation(&self, channel: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 275 | pub async fn schedule_rotation(&self, channel: &str, when: SystemTime) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 288 | pub async fn on_member_change(&self, channel: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 302 | pub async fn channel_stats(&self, channel: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 326 | pub async fn list_channels(&self) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 332 | pub async fn cleanup(&self) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 365 | fn compute_key_fingerprint(&self, rotation_msg: &KeyRotationMessage) -> [u8; 32] { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelKeyStats` is never constructed [INFO] [stdout] --> src/legion/keys.rs:382:12 [INFO] [stdout] | [INFO] [stdout] 382 | pub struct ChannelKeyStats { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `to_json` is never used [INFO] [stdout] --> src/legion/keys.rs:395:12 [INFO] [stdout] | [INFO] [stdout] 393 | impl ChannelKeyStats { [INFO] [stdout] | -------------------- method in this implementation [INFO] [stdout] 394 | /// Convert to JSON-friendly format [INFO] [stdout] 395 | pub fn to_json(&self) -> serde_json::Value { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MEMBER_INACTIVITY_TIMEOUT` is never used [INFO] [stdout] --> src/legion/members.rs:16:7 [INFO] [stdout] | [INFO] [stdout] 16 | const MEMBER_INACTIVITY_TIMEOUT: Duration = Duration::from_secs(7 * 24 * 60 * 60); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `channel_members`, `member_registry`, `permission_policies`, and `invitations` are never read [INFO] [stdout] --> src/legion/members.rs:22:5 [INFO] [stdout] | [INFO] [stdout] 20 | pub struct MemberManager { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] 21 | /// Channel membership data [INFO] [stdout] 22 | channel_members: RwLock>, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] 23 | /// Global member registry [INFO] [stdout] 24 | member_registry: RwLock>, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] 25 | /// Permission policies [INFO] [stdout] 26 | permission_policies: RwLock>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 27 | /// Invitation system [INFO] [stdout] 28 | invitations: RwLock>>, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `MemberManager` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `channel_name`, `owner`, `members`, `created_at`, `settings`, and `pending_invitations` are never read [INFO] [stdout] --> src/legion/members.rs:35:5 [INFO] [stdout] | [INFO] [stdout] 33 | struct ChannelMembership { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 34 | /// Channel name [INFO] [stdout] 35 | channel_name: String, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 36 | /// Channel owner [INFO] [stdout] 37 | owner: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 38 | /// Channel members with roles [INFO] [stdout] 39 | members: HashMap, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 40 | /// Channel creation time [INFO] [stdout] 41 | created_at: SystemTime, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 42 | /// Channel settings [INFO] [stdout] 43 | settings: ChannelSettings, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 44 | /// Active invitations for this channel [INFO] [stdout] 45 | pending_invitations: HashSet, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ChannelMembership` 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 `member_id`, `identity`, `channels`, `registered_at`, `last_seen`, and `metadata` are never read [INFO] [stdout] --> src/legion/members.rs:69:5 [INFO] [stdout] | [INFO] [stdout] 67 | struct MemberInfo { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 68 | /// Member ID [INFO] [stdout] 69 | member_id: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 70 | /// Member's current identity [INFO] [stdout] 71 | identity: phalanx_crypto::Identity, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 72 | /// Channels this member is in [INFO] [stdout] 73 | channels: HashSet, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 74 | /// Member registration time [INFO] [stdout] 75 | registered_at: SystemTime, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 76 | /// Last global activity [INFO] [stdout] 77 | last_seen: SystemTime, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 78 | /// Member metadata [INFO] [stdout] 79 | metadata: HashMap, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `MemberInfo` 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 methods are never used [INFO] [stdout] --> src/legion/members.rs:274:18 [INFO] [stdout] | [INFO] [stdout] 262 | impl MemberManager { [INFO] [stdout] | ------------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 274 | pub async fn register_member(&self, member_id: String, identity: phalanx_crypto::Identity) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 292 | pub async fn create_channel(&self, channel_name: String, owner_id: String, owner_identity: phalanx_crypto::Identity) -> LegionResult<... [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 338 | pub async fn add_channel_member(&self, channel_name: &str, member_id: &str, role: MemberRole) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 380 | pub async fn remove_channel_member(&self, channel_name: &str, member_id: &str) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 407 | pub async fn can_join_channel(&self, channel_name: &str, member_id: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 441 | pub async fn is_channel_member(&self, channel_name: &str, member_id: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 451 | pub async fn is_channel_admin(&self, channel_name: &str, member_id: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 465 | pub async fn has_permission(&self, channel_name: &str, member_id: &str, permission: Permission) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 491 | pub async fn set_permission_policy(&self, channel_name: String, mut policy: PermissionPolicy) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 502 | pub async fn create_invitation(&self, channel_name: String, inviter_id: String, invitee_id: String, expires_in: Duration) -> LegionRe... [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 531 | pub async fn use_invitation(&self, invitation_id: &str) -> LegionResult<(String, String)> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 553 | pub async fn is_member_registered(&self, member_id: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 559 | pub async fn channel_member_count(&self, channel_name: &str) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 567 | pub async fn channel_stats(&self, channel_name: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 596 | pub async fn cleanup(&self) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 616 | pub async fn get_user_channels(&self, user_id: &str) -> LegionResult> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelStats` is never constructed [INFO] [stdout] --> src/legion/members.rs:628:12 [INFO] [stdout] | [INFO] [stdout] 628 | pub struct ChannelStats { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_IDLE_TIME` is never used [INFO] [stdout] --> src/legion/session.rs:14:7 [INFO] [stdout] | [INFO] [stdout] 14 | const MAX_IDLE_TIME: Duration = Duration::from_secs(30 * 60); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple fields are never read [INFO] [stdout] --> src/legion/session.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 18 | pub struct LegionSession { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] 19 | /// Client identifier [INFO] [stdout] 20 | client_id: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 21 | /// Client's identity for encryption [INFO] [stdout] 22 | identity: RwLock, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 23 | /// Legion Protocol session state [INFO] [stdout] 24 | legion_session: RwLock, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 25 | /// Client capabilities [INFO] [stdout] 26 | capabilities: HashSet, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 27 | /// Session creation time [INFO] [stdout] 28 | created_at: SystemTime, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 29 | /// Last activity timestamp [INFO] [stdout] 30 | last_activity: RwLock, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 31 | /// Channels this client is in [INFO] [stdout] 32 | joined_channels: RwLock>, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] 33 | /// Whether Legion Protocol is fully negotiated [INFO] [stdout] 34 | legion_active: RwLock, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LegionSession` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> src/legion/session.rs:39:18 [INFO] [stdout] | [INFO] [stdout] 37 | impl LegionSession { [INFO] [stdout] | ------------------ associated items in this implementation [INFO] [stdout] 38 | /// Create a new Legion session [INFO] [stdout] 39 | pub async fn new(client_id: String, capabilities: Vec) -> LegionResult { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 72 | pub fn supports_legion(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 78 | pub async fn is_legion_active(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 83 | pub async fn activate_legion(&self) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 101 | pub async fn identity(&self) -> LegionResult { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 106 | pub async fn public_key(&self) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 112 | pub async fn update_activity(&self) { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 117 | pub fn is_inactive(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 127 | pub fn age(&self) -> Duration { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 132 | pub async fn join_channel(&self, channel_name: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 151 | pub async fn leave_channel(&self, channel_name: &str) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 166 | pub async fn joined_channels(&self) -> HashSet { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 171 | pub async fn is_in_channel(&self, channel_name: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 176 | pub fn capabilities(&self) -> &HashSet { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 181 | pub fn client_id(&self) -> &str { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 186 | pub async fn stats(&self) -> SessionStats { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 204 | pub async fn create_handshake(&self, group_id: [u8; 32]) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 223 | pub async fn process_handshake( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `SessionStats` is never constructed [INFO] [stdout] --> src/legion/session.rs:234:12 [INFO] [stdout] | [INFO] [stdout] 234 | pub struct SessionStats { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `to_json` is never used [INFO] [stdout] --> src/legion/session.rs:247:12 [INFO] [stdout] | [INFO] [stdout] 245 | impl SessionStats { [INFO] [stdout] | ----------------- method in this implementation [INFO] [stdout] 246 | /// Convert to JSON-friendly format [INFO] [stdout] 247 | pub fn to_json(&self) -> serde_json::Value { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `federated_servers`, `bridge_configs`, and `policies` are never read [INFO] [stdout] --> src/legion/federation.rs:16:5 [INFO] [stdout] | [INFO] [stdout] 14 | pub struct FederationManager { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 15 | /// Connected servers [INFO] [stdout] 16 | federated_servers: RwLock>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] 17 | /// Bridge configurations [INFO] [stdout] 18 | bridge_configs: RwLock>, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 19 | /// Federation policies [INFO] [stdout] 20 | policies: RwLock, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `FederationManager` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `hostname`, `public_key`, `status`, `last_seen`, `capabilities`, and `trust_level` are never read [INFO] [stdout] --> src/legion/federation.rs:27:5 [INFO] [stdout] | [INFO] [stdout] 25 | struct FederatedServer { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] 26 | /// Server hostname [INFO] [stdout] 27 | hostname: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 28 | /// Server public key [INFO] [stdout] 29 | public_key: PublicKey, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 30 | /// Connection status [INFO] [stdout] 31 | status: FederationStatus, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 32 | /// Last communication [INFO] [stdout] 33 | last_seen: SystemTime, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 34 | /// Supported capabilities [INFO] [stdout] 35 | capabilities: Vec, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 36 | /// Trust level [INFO] [stdout] 37 | trust_level: TrustLevel, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `FederatedServer` 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: variants `Connected`, `Connecting`, `Disconnected`, and `Error` are never constructed [INFO] [stdout] --> src/legion/federation.rs:43:5 [INFO] [stdout] | [INFO] [stdout] 42 | enum FederationStatus { [INFO] [stdout] | ---------------- variants in this enum [INFO] [stdout] 43 | Connected, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 44 | Connecting, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 45 | Disconnected, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 46 | Error(String), [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `FederationStatus` 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 methods are never used [INFO] [stdout] --> src/legion/federation.rs:170:18 [INFO] [stdout] | [INFO] [stdout] 159 | impl FederationManager { [INFO] [stdout] | ---------------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 170 | pub async fn set_federation_enabled(&self, enabled: bool) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 179 | pub async fn is_federation_enabled(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 185 | pub async fn add_federated_server(&self, hostname: String, public_key: PublicKey, trust_level: TrustLevel) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 216 | pub async fn remove_federated_server(&self, hostname: &str) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 227 | pub async fn update_server_status(&self, hostname: &str, status: FederationStatus) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 239 | pub async fn get_server_info(&self, hostname: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 255 | pub async fn list_federated_servers(&self) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 267 | pub async fn configure_bridge(&self, config: BridgeConfig) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 287 | pub async fn remove_bridge(&self, bridge_name: &str) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 298 | pub async fn send_federated_message(&self, target_server: &str, channel: &str, message: Vec) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 319 | pub async fn process_federated_message(&self, source_server: &str, channel: &str, message: Vec) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 336 | pub async fn federation_stats(&self) -> FederationStats { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 360 | pub async fn cleanup(&self) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `FederatedServerInfo` is never constructed [INFO] [stdout] --> src/legion/federation.rs:386:12 [INFO] [stdout] | [INFO] [stdout] 386 | pub struct FederatedServerInfo { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `FederationStats` is never constructed [INFO] [stdout] --> src/legion/federation.rs:396:12 [INFO] [stdout] | [INFO] [stdout] 396 | pub struct FederationStats { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AdvancedChannelManager` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:17:12 [INFO] [stdout] | [INFO] [stdout] 17 | pub struct AdvancedChannelManager { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ManagedChannel` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:32:8 [INFO] [stdout] | [INFO] [stdout] 32 | struct ManagedChannel { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ServerChannelSettings` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:53:12 [INFO] [stdout] | [INFO] [stdout] 53 | pub struct ServerChannelSettings { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelOperation` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:72:8 [INFO] [stdout] | [INFO] [stdout] 72 | struct ChannelOperation { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ScheduledOperation` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:89:8 [INFO] [stdout] | [INFO] [stdout] 89 | struct ScheduledOperation { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `Priority` is never used [INFO] [stdout] --> src/legion/channel_manager.rs:104:6 [INFO] [stdout] | [INFO] [stdout] 104 | enum Priority { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `RateState` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:113:8 [INFO] [stdout] | [INFO] [stdout] 113 | struct RateState { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ActivityEntry` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:124:8 [INFO] [stdout] | [INFO] [stdout] 124 | struct ActivityEntry { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `ActivityType` is never used [INFO] [stdout] --> src/legion/channel_manager.rs:137:6 [INFO] [stdout] | [INFO] [stdout] 137 | enum ActivityType { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ExtendedChannelInfo` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:160:12 [INFO] [stdout] | [INFO] [stdout] 160 | pub struct ExtendedChannelInfo { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelHealth` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:175:12 [INFO] [stdout] | [INFO] [stdout] 175 | pub struct ChannelHealth { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `HealthIssue` is never used [INFO] [stdout] --> src/legion/channel_manager.rs:186:10 [INFO] [stdout] | [INFO] [stdout] 186 | pub enum HealthIssue { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `PerformanceMetrics` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:201:12 [INFO] [stdout] | [INFO] [stdout] 201 | pub struct PerformanceMetrics { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `SecurityStatus` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:214:12 [INFO] [stdout] | [INFO] [stdout] 214 | pub struct SecurityStatus { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `SecurityEvent` is never used [INFO] [stdout] --> src/legion/channel_manager.rs:227:10 [INFO] [stdout] | [INFO] [stdout] 227 | pub enum SecurityEvent { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> src/legion/channel_manager.rs:254:18 [INFO] [stdout] | [INFO] [stdout] 252 | impl AdvancedChannelManager { [INFO] [stdout] | --------------------------- associated items in this implementation [INFO] [stdout] 253 | /// Create a new advanced channel manager [INFO] [stdout] 254 | pub async fn new(server_settings: ServerChannelSettings) -> LegionResult { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 265 | pub async fn execute_admin_operation( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 344 | async fn create_channel( [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 425 | async fn set_channel_topic( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 465 | async fn set_channel_mode( [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 513 | async fn execute_member_operation( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 619 | async fn execute_ban_operation( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 749 | async fn execute_key_operation( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 808 | pub async fn get_extended_channel_info(&self, channel_name: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 833 | async fn calculate_channel_health(&self, channel: &ManagedChannel) -> ChannelHealth { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 873 | async fn assess_security_status(&self, channel: &ManagedChannel) -> SecurityStatus { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 886 | async fn log_operation( [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 911 | async fn log_activity( [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 935 | async fn get_user_role(&self, channel_name: &str, user_id: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 949 | async fn get_user_permissions(&self, channel_name: &str, user_id: &str) -> LegionResult> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 963 | async fn get_channel_settings(&self, channel_name: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 973 | pub async fn process_scheduled_operations(&self) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type alias `ProtocolError` is never used [INFO] [stdout] --> src/protocol/mod.rs:36:10 [INFO] [stdout] | [INFO] [stdout] 36 | pub type ProtocolError = IronError; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> src/protocol/commands.rs:16:5 [INFO] [stdout] | [INFO] [stdout] 4 | pub enum Command { [INFO] [stdout] | ------- variants in this enum [INFO] [stdout] ... [INFO] [stdout] 16 | Topic { channel: String, topic: Option }, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 17 | Names(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 18 | List(Option>), [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 25 | Who(Option), [INFO] [stdout] | ^^^ [INFO] [stdout] 26 | Whois(Vec), [INFO] [stdout] 27 | Whowas(String, Option), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | Kick { channel: String, user: String, reason: Option }, [INFO] [stdout] | ^^^^ [INFO] [stdout] 32 | Mode { target: String, modes: Option, params: Vec }, [INFO] [stdout] | ^^^^ [INFO] [stdout] 33 | Invite { nick: String, channel: String }, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 36 | Motd(Option), [INFO] [stdout] | ^^^^ [INFO] [stdout] 37 | Version(Option), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 38 | Stats(Option, Option), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 39 | Time(Option), [INFO] [stdout] | ^^^^ [INFO] [stdout] 40 | Info(Option), [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 45 | Account(String), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 46 | Monitor { subcommand: String, targets: Vec }, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 47 | Metadata { target: String, subcommand: String, params: Vec }, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 48 | TagMsg { target: String }, [INFO] [stdout] 49 | Batch { reference: String, batch_type: Option, params: Vec }, [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 58 | Oper { name: String, password: String }, [INFO] [stdout] | ^^^^ [INFO] [stdout] 59 | Kill { nick: String, reason: String }, [INFO] [stdout] | ^^^^ [INFO] [stdout] 60 | Rehash, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 61 | Restart, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 62 | Die, [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 65 | CtcpRequest { target: String, command: String, params: String }, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 66 | CtcpResponse { target: String, command: String, params: String }, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Command` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `MessageExtensions` is never constructed [INFO] [stdout] --> src/protocol/extensions.rs:5:12 [INFO] [stdout] | [INFO] [stdout] 5 | pub struct MessageExtensions { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `TypingState` is never used [INFO] [stdout] --> src/protocol/extensions.rs:18:10 [INFO] [stdout] | [INFO] [stdout] 18 | pub enum TypingState { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `from_tags`, and `to_tags` are never used [INFO] [stdout] --> src/protocol/extensions.rs:25:12 [INFO] [stdout] | [INFO] [stdout] 24 | impl MessageExtensions { [INFO] [stdout] | ---------------------- associated items in this implementation [INFO] [stdout] 25 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 39 | pub fn from_tags(tags: &HashMap>) -> Self { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 74 | pub fn to_tags(&self) -> HashMap> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Batch` is never constructed [INFO] [stdout] --> src/protocol/extensions.rs:127:12 [INFO] [stdout] | [INFO] [stdout] 127 | pub struct Batch { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new` and `add_message` are never used [INFO] [stdout] --> src/protocol/extensions.rs:136:12 [INFO] [stdout] | [INFO] [stdout] 135 | impl Batch { [INFO] [stdout] | ---------- associated items in this implementation [INFO] [stdout] 136 | pub fn new(reference: String, batch_type: String, params: Vec) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 146 | pub fn add_message(&mut self, msg: crate::protocol::Message) { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `SecurityError` is never used [INFO] [stdout] --> src/security/mod.rs:18:10 [INFO] [stdout] | [INFO] [stdout] 18 | pub enum SecurityError { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `quota` is never read [INFO] [stdout] --> src/security/mod.rs:39:5 [INFO] [stdout] | [INFO] [stdout] 38 | pub struct RateLimiter { [INFO] [stdout] | ----------- field in this struct [INFO] [stdout] 39 | quota: Quota, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `check_key` is never used [INFO] [stdout] --> src/security/mod.rs:59:18 [INFO] [stdout] | [INFO] [stdout] 43 | impl RateLimiter { [INFO] [stdout] | ---------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 59 | pub async fn check_key(&self, _key: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ConnectionLimiter` is never constructed [INFO] [stdout] --> src/security/mod.rs:64:12 [INFO] [stdout] | [INFO] [stdout] 64 | pub struct ConnectionLimiter { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ConnectionLimits` is never constructed [INFO] [stdout] --> src/security/mod.rs:68:8 [INFO] [stdout] | [INFO] [stdout] 68 | struct ConnectionLimits { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `check_and_add`, and `remove` are never used [INFO] [stdout] --> src/security/mod.rs:76:12 [INFO] [stdout] | [INFO] [stdout] 75 | impl ConnectionLimiter { [INFO] [stdout] | ---------------------- associated items in this implementation [INFO] [stdout] 76 | pub fn new(max_per_ip: usize, max_global: usize) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 87 | pub fn check_and_add(&self, addr: SocketAddr) -> Result<(), SecurityError> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 108 | pub fn remove(&self, addr: SocketAddr) { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `FloodProtection` is never constructed [INFO] [stdout] --> src/security/mod.rs:123:12 [INFO] [stdout] | [INFO] [stdout] 123 | pub struct FloodProtection { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `check_flood`, and `clear` are never used [INFO] [stdout] --> src/security/mod.rs:130:12 [INFO] [stdout] | [INFO] [stdout] 129 | impl FloodProtection { [INFO] [stdout] | -------------------- associated items in this implementation [INFO] [stdout] 130 | pub fn new(max_messages: usize, time_window: Duration) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 138 | pub fn check_flood(&self, connection_id: u64) -> bool { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 155 | pub fn clear(&self, connection_id: u64) { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `BanManager` is never constructed [INFO] [stdout] --> src/security/mod.rs:160:12 [INFO] [stdout] | [INFO] [stdout] 160 | pub struct BanManager { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `BanEntry` is never constructed [INFO] [stdout] --> src/security/mod.rs:165:12 [INFO] [stdout] | [INFO] [stdout] 165 | pub struct BanEntry { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `add_ban`, `remove_ban`, `is_banned`, and `get_bans` are never used [INFO] [stdout] --> src/security/mod.rs:173:12 [INFO] [stdout] | [INFO] [stdout] 172 | impl BanManager { [INFO] [stdout] | --------------- associated items in this implementation [INFO] [stdout] 173 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 179 | pub fn add_ban(&self, channel: &str, ban: BanEntry) { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 186 | pub fn remove_ban(&self, channel: &str, mask: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 196 | pub fn is_banned(&self, channel: &str, user_mask: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 214 | pub fn get_bans(&self, channel: &str) -> Vec { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `mask_matches` is never used [INFO] [stdout] --> src/security/mod.rs:222:4 [INFO] [stdout] | [INFO] [stdout] 222 | fn mask_matches(pattern: &str, text: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `AuthError` is never used [INFO] [stdout] --> src/security/auth.rs:10:10 [INFO] [stdout] | [INFO] [stdout] 10 | pub enum AuthError { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `SaslMechanism` is never used [INFO] [stdout] --> src/security/auth.rs:25:10 [INFO] [stdout] | [INFO] [stdout] 25 | pub enum SaslMechanism { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `from_str` and `as_str` are never used [INFO] [stdout] --> src/security/auth.rs:32:12 [INFO] [stdout] | [INFO] [stdout] 31 | impl SaslMechanism { [INFO] [stdout] | ------------------ associated items in this implementation [INFO] [stdout] 32 | pub fn from_str(s: &str) -> Option { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 41 | pub fn as_str(&self) -> &'static str { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `AuthMethod` is never used [INFO] [stdout] --> src/security/auth.rs:51:10 [INFO] [stdout] | [INFO] [stdout] 51 | pub enum AuthMethod { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `LocalPasswordHasher` is never constructed [INFO] [stdout] --> src/security/auth.rs:62:12 [INFO] [stdout] | [INFO] [stdout] 62 | pub struct LocalPasswordHasher; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated functions `hash_password` and `verify_password` are never used [INFO] [stdout] --> src/security/auth.rs:65:12 [INFO] [stdout] | [INFO] [stdout] 64 | impl LocalPasswordHasher { [INFO] [stdout] | ------------------------ associated functions in this implementation [INFO] [stdout] 65 | pub fn hash_password(password: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 70 | pub fn verify_password(password: &str, hash: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `SaslAuthenticator` is never constructed [INFO] [stdout] --> src/security/auth.rs:76:12 [INFO] [stdout] | [INFO] [stdout] 76 | pub struct SaslAuthenticator { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ScramServerState` is never constructed [INFO] [stdout] --> src/security/auth.rs:80:8 [INFO] [stdout] | [INFO] [stdout] 80 | struct ScramServerState { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `authenticate_plain`, `start_scram_sha256`, and `verify_scram_sha256` are never used [INFO] [stdout] --> src/security/auth.rs:89:12 [INFO] [stdout] | [INFO] [stdout] 88 | impl SaslAuthenticator { [INFO] [stdout] | ---------------------- associated items in this implementation [INFO] [stdout] 89 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 95 | pub fn authenticate_plain(&self, auth_data: &[u8]) -> Result<(String, String), AuthError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 115 | pub fn start_scram_sha256(&mut self, client_first: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 152 | pub fn verify_scram_sha256( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `authenticate` is never used [INFO] [stdout] --> src/security/auth.rs:193:14 [INFO] [stdout] | [INFO] [stdout] 193 | pub async fn authenticate( [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `generate_nonce` is never used [INFO] [stdout] --> src/security/auth.rs:218:4 [INFO] [stdout] | [INFO] [stdout] 218 | fn generate_nonce() -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `generate_salt` is never used [INFO] [stdout] --> src/security/auth.rs:225:4 [INFO] [stdout] | [INFO] [stdout] 225 | fn generate_salt() -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `derive_salted_password` is never used [INFO] [stdout] --> src/security/auth.rs:231:4 [INFO] [stdout] | [INFO] [stdout] 231 | fn derive_salted_password(password: &[u8], salt: &[u8], iterations: u32) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `hmac_sha256` is never used [INFO] [stdout] --> src/security/auth.rs:237:4 [INFO] [stdout] | [INFO] [stdout] 237 | fn hmac_sha256(key: &[u8], data: &[u8]) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `create_tls_acceptor` is never used [INFO] [stdout] --> src/security/tls.rs:4:14 [INFO] [stdout] | [INFO] [stdout] 4 | pub async fn create_tls_acceptor(_cert_path: &Path, _key_path: &Path) -> io::Result<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static `NICKNAME_REGEX` is never used [INFO] [stdout] --> src/security/validation.rs:4:8 [INFO] [stdout] | [INFO] [stdout] 4 | static NICKNAME_REGEX: Lazy = Lazy::new(|| { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static `VALID_USER_REGEX` is never used [INFO] [stdout] --> src/security/validation.rs:12:8 [INFO] [stdout] | [INFO] [stdout] 12 | static VALID_USER_REGEX: Lazy = Lazy::new(|| { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_nickname` is never used [INFO] [stdout] --> src/security/validation.rs:16:8 [INFO] [stdout] | [INFO] [stdout] 16 | pub fn validate_nickname(nick: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_username` is never used [INFO] [stdout] --> src/security/validation.rs:32:8 [INFO] [stdout] | [INFO] [stdout] 32 | pub fn validate_username(username: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_realname` is never used [INFO] [stdout] --> src/security/validation.rs:40:8 [INFO] [stdout] | [INFO] [stdout] 40 | pub fn validate_realname(realname: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_message` is never used [INFO] [stdout] --> src/security/validation.rs:49:8 [INFO] [stdout] | [INFO] [stdout] 49 | pub fn validate_message(message: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_topic` is never used [INFO] [stdout] --> src/security/validation.rs:58:8 [INFO] [stdout] | [INFO] [stdout] 58 | pub fn validate_topic(topic: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_away_message` is never used [INFO] [stdout] --> src/security/validation.rs:67:8 [INFO] [stdout] | [INFO] [stdout] 67 | pub fn validate_away_message(message: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_kick_reason` is never used [INFO] [stdout] --> src/security/validation.rs:76:8 [INFO] [stdout] | [INFO] [stdout] 76 | pub fn validate_kick_reason(reason: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_quit_message` is never used [INFO] [stdout] --> src/security/validation.rs:85:8 [INFO] [stdout] | [INFO] [stdout] 85 | pub fn validate_quit_message(message: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_channel_key` is never used [INFO] [stdout] --> src/security/validation.rs:94:8 [INFO] [stdout] | [INFO] [stdout] 94 | pub fn validate_channel_key(key: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `sanitize_message` is never used [INFO] [stdout] --> src/security/validation.rs:103:8 [INFO] [stdout] | [INFO] [stdout] 103 | pub fn sanitize_message(message: &str) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_valid_host_mask` is never used [INFO] [stdout] --> src/security/validation.rs:111:8 [INFO] [stdout] | [INFO] [stdout] 111 | pub fn is_valid_host_mask(mask: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `has_legion` and `legion` are never used [INFO] [stdout] --> src/state/mod.rs:52:12 [INFO] [stdout] | [INFO] [stdout] 23 | impl ServerState { [INFO] [stdout] | ---------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 52 | pub fn has_legion(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 57 | pub fn legion(&self) -> Option<&LegionManager> { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `connection_id` and `joined_at` are never read [INFO] [stdout] --> src/state/channel.rs:6:9 [INFO] [stdout] | [INFO] [stdout] 5 | pub struct ChannelMember { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] 6 | pub connection_id: u64, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 7 | pub modes: Vec, [INFO] [stdout] 8 | pub joined_at: DateTime, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ChannelMember` 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 `name` and `created_at` are never read [INFO] [stdout] --> src/state/channel.rs:13:9 [INFO] [stdout] | [INFO] [stdout] 12 | pub struct Channel { [INFO] [stdout] | ------- fields in this struct [INFO] [stdout] 13 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 19 | pub created_at: DateTime, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Channel` 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 `id`, `addr`, and `created_at` are never read [INFO] [stdout] --> src/state/connection.rs:9:9 [INFO] [stdout] | [INFO] [stdout] 8 | pub struct Connection { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 9 | pub id: u64, [INFO] [stdout] | ^^ [INFO] [stdout] 10 | pub addr: SocketAddr, [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 17 | pub created_at: DateTime, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Connection` 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: function `mask_ip` is never used [INFO] [stdout] --> src/utils/mod.rs:13:8 [INFO] [stdout] | [INFO] [stdout] 13 | pub fn mask_ip(ip: IpAddr) -> String { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `parse_mode_string` is never used [INFO] [stdout] --> src/utils/mod.rs:34:8 [INFO] [stdout] | [INFO] [stdout] 34 | pub fn parse_mode_string(modes: &str) -> (Vec, Vec) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `format_duration` is never used [INFO] [stdout] --> src/utils/mod.rs:56:8 [INFO] [stdout] | [INFO] [stdout] 56 | pub fn format_duration(seconds: u64) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `normalize_channel_name` is never used [INFO] [stdout] --> src/utils/mod.rs:77:8 [INFO] [stdout] | [INFO] [stdout] 77 | pub fn normalize_channel_name(name: &str) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `normalize_nickname` is never used [INFO] [stdout] --> src/utils/mod.rs:81:8 [INFO] [stdout] | [INFO] [stdout] 81 | pub fn normalize_nickname(nick: &str) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `load_with_defaults` is never used [INFO] [stdout] --> src/utils/config.rs:157:12 [INFO] [stdout] | [INFO] [stdout] 148 | impl ServerConfig { [INFO] [stdout] | ----------------- associated function in this implementation [INFO] [stdout] ... [INFO] [stdout] 157 | pub fn load_with_defaults(path: Option>) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 2m 54s [INFO] running `Command { std: "docker" "inspect" "f9a1868e027069dd1b02fc72df4d26e92014e633aa1cc0dd834b8d121a28e26a", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "f9a1868e027069dd1b02fc72df4d26e92014e633aa1cc0dd834b8d121a28e26a", kill_on_drop: false }` [INFO] [stdout] f9a1868e027069dd1b02fc72df4d26e92014e633aa1cc0dd834b8d121a28e26a [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-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:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+c7f6aa2869acdbf014d094c6e427e554e160b6db" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 5f5d5adf25f0fbd713807a370beb3b19f0193e30cfb5204c87d739cf52a35b91 [INFO] running `Command { std: "docker" "start" "-a" "5f5d5adf25f0fbd713807a370beb3b19f0193e30cfb5204c87d739cf52a35b91", kill_on_drop: false }` [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Compiling bitflags v2.9.1 [INFO] [stderr] Compiling either v1.15.0 [INFO] [stderr] Compiling rustix v1.0.8 [INFO] [stderr] Compiling half v2.6.0 [INFO] [stderr] Compiling mockall_derive v0.13.1 [INFO] [stderr] Compiling ciborium-io v0.2.2 [INFO] [stderr] Compiling clap_builder v4.5.42 [INFO] [stderr] Compiling rayon-core v1.12.1 [INFO] [stderr] Compiling wait-timeout v0.2.1 [INFO] [stderr] Compiling bit-vec v0.8.0 [INFO] [stderr] Compiling predicates v3.1.3 [INFO] [stderr] Compiling rand_xorshift v0.4.0 [INFO] [stderr] Compiling tinytemplate v1.2.1 [INFO] [stderr] Compiling raw-cpuid v11.5.0 [INFO] [stderr] Compiling ron v0.8.1 [INFO] [stderr] Compiling ciborium-ll v0.2.2 [INFO] [stderr] Compiling is-terminal v0.4.16 [INFO] [stderr] Compiling itertools v0.10.5 [INFO] [stderr] Compiling unarray v0.1.4 [INFO] [stderr] Compiling downcast v0.11.0 [INFO] [stderr] Compiling fragile v2.0.1 [INFO] [stderr] Compiling anes v0.1.6 [INFO] [stderr] Compiling ciborium v0.2.2 [INFO] [stderr] Compiling bit-set v0.8.0 [INFO] [stderr] Compiling rayon v1.10.0 [INFO] [stderr] Compiling chrono v0.4.41 [INFO] [stderr] Compiling atoi v2.0.0 [INFO] [stderr] Compiling plotters v0.3.7 [INFO] [stderr] Compiling config v0.14.1 [INFO] [stderr] Compiling clap v4.5.42 [INFO] [stderr] Compiling quanta v0.12.6 [INFO] [stderr] Compiling criterion-plot v0.5.0 [INFO] [stderr] Compiling sqlx-core v0.8.6 [INFO] [stderr] Compiling legion-protocol v0.1.0 [INFO] [stderr] Compiling governor v0.8.1 [INFO] [stderr] Compiling tempfile v3.20.0 [INFO] [stderr] Compiling rusty-fork v0.3.0 [INFO] [stderr] Compiling criterion v0.5.1 [INFO] [stderr] Compiling proptest v1.7.0 [INFO] [stderr] Compiling mockall v0.13.1 [INFO] [stderr] Compiling sqlx-postgres v0.8.6 [INFO] [stderr] Compiling sqlx-sqlite v0.8.6 [INFO] [stderr] Compiling sqlx-macros-core v0.8.6 [INFO] [stderr] Compiling sqlx-macros v0.8.6 [INFO] [stderr] Compiling sqlx v0.8.6 [INFO] [stderr] Compiling legion-server v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `bytes::BytesMut` [INFO] [stdout] --> src/actors/connection.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | use bytes::BytesMut; [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: `timeout` [INFO] [stdout] --> src/actors/connection.rs:10:29 [INFO] [stdout] | [INFO] [stdout] 10 | use tokio::time::{interval, timeout}; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `trace` and `warn` [INFO] [stdout] --> src/actors/connection.rs:13:35 [INFO] [stdout] | [INFO] [stdout] 13 | use tracing::{debug, error, info, warn, trace}; [INFO] [stdout] | ^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/actors/channel.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `warn` [INFO] [stdout] --> src/actors/channel.rs:6:28 [INFO] [stdout] | [INFO] [stdout] 6 | use tracing::{debug, info, warn}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `ChannelMember` [INFO] [stdout] --> src/actors/channel.rs:9:29 [INFO] [stdout] | [INFO] [stdout] 9 | use crate::state::{Channel, ChannelMember, ServerState}; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `self::channel::ChannelActor` [INFO] [stdout] --> src/actors/mod.rs:6:9 [INFO] [stdout] | [INFO] [stdout] 6 | pub use self::channel::ChannelActor; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `info` [INFO] [stdout] --> src/commands/mod.rs:4:22 [INFO] [stdout] | [INFO] [stdout] 4 | use tracing::{debug, info}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Reply` [INFO] [stdout] --> src/commands/handlers/notice.rs:3:32 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::protocol::{Message, Reply}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Message` and `Reply` [INFO] [stdout] --> src/commands/handlers/who_test.rs:3:23 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::protocol::{Message, Reply}; [INFO] [stdout] | ^^^^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Message` and `Reply` [INFO] [stdout] --> src/commands/handlers/topic_test.rs:3:23 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::protocol::{Message, Reply}; [INFO] [stdout] | ^^^^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Message` and `Reply` [INFO] [stdout] --> src/commands/handlers/mode_test.rs:3:23 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::protocol::{Message, Reply}; [INFO] [stdout] | ^^^^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Message` and `Reply` [INFO] [stdout] --> src/commands/handlers/kick_test.rs:3:23 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::protocol::{Message, Reply}; [INFO] [stdout] | ^^^^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Reply` [INFO] [stdout] --> src/commands/handlers/list.rs:3:32 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::protocol::{Message, Reply}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Message` and `Reply` [INFO] [stdout] --> src/commands/handlers/list_test.rs:3:23 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::protocol::{Message, Reply}; [INFO] [stdout] | ^^^^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Reply` [INFO] [stdout] --> src/commands/handlers/nick.rs:4:32 [INFO] [stdout] | [INFO] [stdout] 4 | use crate::protocol::{Message, Reply}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `HistoryItem` and `MessageType` [INFO] [stdout] --> src/commands/handlers/chathistory.rs:5:22 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::history::{HistoryItem, HistoryQuery, QueryResult, MessageType}; [INFO] [stdout] | ^^^^^^^^^^^ ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `StandardReply` [INFO] [stdout] --> src/commands/handlers/chathistory.rs:6:41 [INFO] [stdout] | [INFO] [stdout] 6 | use crate::commands::standard_replies::{StandardReply, common}; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around block return value [INFO] [stdout] --> src/commands/handlers/query.rs:17:13 [INFO] [stdout] | [INFO] [stdout] 17 | (conn.nickname.clone().unwrap_or_else(|| "*".to_string())) [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 17 - (conn.nickname.clone().unwrap_or_else(|| "*".to_string())) [INFO] [stdout] 17 + conn.nickname.clone().unwrap_or_else(|| "*".to_string()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `VecDeque` [INFO] [stdout] --> src/history/mod.rs:2:34 [INFO] [stdout] | [INFO] [stdout] 2 | use std::collections::{BTreeMap, VecDeque}; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::sync::RwLock` [INFO] [stdout] --> src/history/mod.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::sync::RwLock; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `format_timestamp` [INFO] [stdout] --> src/history/storage.rs:1:39 [INFO] [stdout] | [INFO] [stdout] 1 | use super::{HistoryItem, MessageType, format_timestamp}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `HistoryConfig` [INFO] [stdout] --> src/history/mod.rs:10:35 [INFO] [stdout] | [INFO] [stdout] 10 | pub use storage::{HistoryStorage, HistoryConfig}; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `is_legion_encrypted_channel` [INFO] [stdout] --> src/legion/channels.rs:6:30 [INFO] [stdout] | [INFO] [stdout] 6 | use legion_protocol::utils::{is_legion_encrypted_channel, ChannelType, get_channel_type}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Identity` [INFO] [stdout] --> src/legion/keys.rs:6:22 [INFO] [stdout] | [INFO] [stdout] 6 | use phalanx_crypto::{Identity, protocol::KeyRotationMessage}; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Identity` and `protocol::KeyRotationMessage` [INFO] [stdout] --> src/legion/keys.rs:412:26 [INFO] [stdout] | [INFO] [stdout] 412 | use phalanx_crypto::{Identity, protocol::KeyRotationMessage}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Identity` [INFO] [stdout] --> src/legion/federation.rs:6:22 [INFO] [stdout] | [INFO] [stdout] 6 | use phalanx_crypto::{Identity, PublicKey}; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `PublicKey` [INFO] [stdout] --> src/legion/channel_manager.rs:9:32 [INFO] [stdout] | [INFO] [stdout] 9 | use phalanx_crypto::{Identity, PublicKey}; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `debug`, `error`, and `warn` [INFO] [stdout] --> src/legion/channel_manager.rs:14:15 [INFO] [stdout] | [INFO] [stdout] 14 | use tracing::{debug, info, warn, error}; [INFO] [stdout] | ^^^^^ ^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `IronSession` and `IronVersion` [INFO] [stdout] --> src/legion/mod.rs:14:23 [INFO] [stdout] | [INFO] [stdout] 14 | use legion_protocol::{IronSession, IronVersion, Capability}; [INFO] [stdout] | ^^^^^^^^^^^ ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `PhalanxGroup` [INFO] [stdout] --> src/legion/mod.rs:15:32 [INFO] [stdout] | [INFO] [stdout] 15 | use phalanx_crypto::{Identity, PhalanxGroup, AsyncPhalanxGroup}; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Command as ProtocolCommand` [INFO] [stdout] --> src/protocol/mod.rs:2:35 [INFO] [stdout] | [INFO] [stdout] 2 | use legion_protocol::{IrcMessage, Command as ProtocolCommand, IronError}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/protocol/mod.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `thiserror::Error` [INFO] [stdout] --> src/protocol/mod.rs:4:5 [INFO] [stdout] | [INFO] [stdout] 4 | use thiserror::Error; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Buf` [INFO] [stdout] --> src/protocol/codec.rs:1:13 [INFO] [stdout] | [INFO] [stdout] 1 | use bytes::{Buf, BufMut, BytesMut}; [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::str::FromStr` [INFO] [stdout] --> src/protocol/commands.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use std::str::FromStr; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `CapabilityHandler`, `CapabilitySet`, `Capability`, `constants`, and `utils` [INFO] [stdout] --> src/protocol/mod.rs:23:5 [INFO] [stdout] | [INFO] [stdout] 23 | Capability, CapabilitySet, CapabilityHandler, [INFO] [stdout] | ^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ [INFO] [stdout] 24 | constants, utils, Reply [INFO] [stdout] | ^^^^^^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `SaslAuth` and `SaslMechanism` [INFO] [stdout] --> src/protocol/mod.rs:27:33 [INFO] [stdout] | [INFO] [stdout] 27 | pub use legion_protocol::sasl::{SaslAuth, SaslMechanism}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `legion_protocol::bleeding_edge` [INFO] [stdout] --> src/protocol/mod.rs:30:9 [INFO] [stdout] | [INFO] [stdout] 30 | pub use legion_protocol::bleeding_edge; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Argon2` and `PasswordHash` [INFO] [stdout] --> src/security/auth.rs:1:14 [INFO] [stdout] | [INFO] [stdout] 1 | use argon2::{Argon2, PasswordHash}; [INFO] [stdout] | ^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `PasswordHasher as ArgonPasswordHasher`, `SaltString`, and `rand_core::OsRng` [INFO] [stdout] --> src/security/auth.rs:2:29 [INFO] [stdout] | [INFO] [stdout] 2 | use argon2::password_hash::{rand_core::OsRng, SaltString, PasswordHasher as ArgonPasswordHasher}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `AuthMethod`, `SaslMechanism`, and `authenticate` [INFO] [stdout] --> src/security/mod.rs:14:22 [INFO] [stdout] | [INFO] [stdout] 14 | pub use self::auth::{AuthMethod, SaslMechanism, authenticate}; [INFO] [stdout] | ^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `validate_message` and `validate_nickname` [INFO] [stdout] --> src/security/mod.rs:15:28 [INFO] [stdout] | [INFO] [stdout] 15 | pub use self::validation::{validate_nickname, validate_channel_name, validate_message}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated unit variant `legion_protocol::Capability::IronProtocolV1`: Use LegionProtocolV1 instead [INFO] [stdout] --> src/legion/session.rs:45:70 [INFO] [stdout] | [INFO] [stdout] 45 | matches!(cap, Capability::LegionProtocolV1 | Capability::IronProtocolV1) [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated unit variant `legion_protocol::Capability::IronProtocolV1`: Use LegionProtocolV1 instead [INFO] [stdout] --> src/legion/session.rs:52:58 [INFO] [stdout] | [INFO] [stdout] 52 | } else if capabilities.contains(&Capability::IronProtocolV1) { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated unit variant `legion_protocol::Capability::IronProtocolV1`: Use LegionProtocolV1 instead [INFO] [stdout] --> src/legion/session.rs:74:49 [INFO] [stdout] | [INFO] [stdout] 74 | self.capabilities.contains(&Capability::IronProtocolV1) [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/actors/connection.rs:49:17 [INFO] [stdout] | [INFO] [stdout] 49 | let mut state = server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/actors/connection.rs:128:17 [INFO] [stdout] | [INFO] [stdout] 128 | let mut state = self.server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `cap_version` [INFO] [stdout] --> src/actors/connection.rs:183:21 [INFO] [stdout] | [INFO] [stdout] 183 | let cap_version = if !params.is_empty() { [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_cap_version` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/actors/connection.rs:244:33 [INFO] [stdout] | [INFO] [stdout] 244 | ... let mut state = self.server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/actors/connection.rs:299:17 [INFO] [stdout] | [INFO] [stdout] 299 | let mut state = self.server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/actors/connection.rs:349:17 [INFO] [stdout] | [INFO] [stdout] 349 | let mut state = self.server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/join.rs:14:9 [INFO] [stdout] | [INFO] [stdout] 14 | let mut state = server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/part.rs:13:9 [INFO] [stdout] | [INFO] [stdout] 13 | let mut state = server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `user` [INFO] [stdout] --> src/commands/handlers/privmsg.rs:15:16 [INFO] [stdout] | [INFO] [stdout] 15 | let (nick, user, host, has_echo_message, msg_id, privmsg) = { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_user` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `host` [INFO] [stdout] --> src/commands/handlers/privmsg.rs:15:22 [INFO] [stdout] | [INFO] [stdout] 15 | let (nick, user, host, has_echo_message, msg_id, privmsg) = { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_host` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `user` [INFO] [stdout] --> src/commands/handlers/notice.rs:21:16 [INFO] [stdout] | [INFO] [stdout] 21 | let (nick, user, host, has_echo_message, msg_id, notice_msg) = { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_user` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `host` [INFO] [stdout] --> src/commands/handlers/notice.rs:21:22 [INFO] [stdout] | [INFO] [stdout] 21 | let (nick, user, host, has_echo_message, msg_id, notice_msg) = { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_host` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `member_nick` [INFO] [stdout] --> src/commands/handlers/who.rs:37:37 [INFO] [stdout] | [INFO] [stdout] 37 | if let Some(member_nick) = &member_conn.nickname { [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_member_nick` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `target_conn` [INFO] [stdout] --> src/commands/handlers/who.rs:66:25 [INFO] [stdout] | [INFO] [stdout] 66 | if let Some(target_conn) = state.connections.get(&target_id) { [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_target_conn` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/who_test.rs:21:9 [INFO] [stdout] | [INFO] [stdout] 21 | let mut state_guard = state.write().await; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/topic.rs:20:9 [INFO] [stdout] | [INFO] [stdout] 20 | let mut state = server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/topic_test.rs:19:9 [INFO] [stdout] | [INFO] [stdout] 19 | let mut state_guard = state.write().await; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/mode.rs:82:9 [INFO] [stdout] | [INFO] [stdout] 82 | let mut mode_args = mode_params[1..].to_vec(); [INFO] [stdout] | ----^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/mode_test.rs:21:9 [INFO] [stdout] | [INFO] [stdout] 21 | let mut state_guard = state.write().await; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/mode_test.rs:49:9 [INFO] [stdout] | [INFO] [stdout] 49 | let mut channel = Channel::new("#test".to_string()); [INFO] [stdout] | ----^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/kick.rs:25:9 [INFO] [stdout] | [INFO] [stdout] 25 | let mut state = server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/kick_test.rs:22:13 [INFO] [stdout] | [INFO] [stdout] 22 | let mut state_guard = state.write().await; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/list_test.rs:19:9 [INFO] [stdout] | [INFO] [stdout] 19 | let mut state_guard = state.write().await; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/list_test.rs:57:9 [INFO] [stdout] | [INFO] [stdout] 57 | let mut empty_channel = Channel::new("#empty".to_string()); [INFO] [stdout] | ----^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/list_test.rs:60:9 [INFO] [stdout] | [INFO] [stdout] 60 | let mut no_topic_channel = Channel::new("#notopic".to_string()); [INFO] [stdout] | ----^^^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/nick.rs:16:9 [INFO] [stdout] | [INFO] [stdout] 16 | let mut state = server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `policy` [INFO] [stdout] --> src/legion/keys.rs:259:17 [INFO] [stdout] | [INFO] [stdout] 259 | let policy = drop(keys); [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: if this is intentional, prefix it with an underscore [INFO] [stdout] | [INFO] [stdout] 259 | let _policy = drop(keys); [INFO] [stdout] | + [INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `_` [INFO] [stdout] | [INFO] [stdout] 259 - let policy = drop(keys); [INFO] [stdout] 259 + let utils::config::_ = drop(keys); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `channel` [INFO] [stdout] --> src/legion/keys.rs:339:18 [INFO] [stdout] | [INFO] [stdout] 339 | for (channel, channel_keys) in keys.iter_mut() { [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_channel` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `message` [INFO] [stdout] --> src/legion/federation.rs:298:84 [INFO] [stdout] | [INFO] [stdout] 298 | pub async fn send_federated_message(&self, target_server: &str, channel: &str, message: Vec) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_message` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `message` [INFO] [stdout] --> src/legion/federation.rs:319:87 [INFO] [stdout] | [INFO] [stdout] 319 | pub async fn process_federated_message(&self, source_server: &str, channel: &str, message: Vec) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_message` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `cleaned_servers` is never read [INFO] [stdout] --> src/legion/federation.rs:361:17 [INFO] [stdout] | [INFO] [stdout] 361 | let mut cleaned_servers = 0; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `member` [INFO] [stdout] --> src/legion/channel_manager.rs:525:33 [INFO] [stdout] | [INFO] [stdout] 525 | if let Some(member) = channel.members.remove(target_user) { [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_member` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `operator_identity` [INFO] [stdout] --> src/legion/channel_manager.rs:753:9 [INFO] [stdout] | [INFO] [stdout] 753 | operator_identity: &Identity, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_operator_identity` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `channel` [INFO] [stdout] --> src/legion/mod.rs:229:13 [INFO] [stdout] | [INFO] [stdout] 229 | let channel = self.channels.get(&channel_name) [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_channel` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/who_test.rs:271:13 [INFO] [stdout] | [INFO] [stdout] 271 | let mut state_guard = state.write().await; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `user_id` [INFO] [stdout] --> src/commands/handlers/topic_test.rs:124:17 [INFO] [stdout] | [INFO] [stdout] 124 | let (state, user_id, member_id) = setup_test_state().await; [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_user_id` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/topic_test.rs:180:13 [INFO] [stdout] | [INFO] [stdout] 180 | let mut channel = state_guard.channels.get_mut("#test").unwrap(); [INFO] [stdout] | ----^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/kick_test.rs:126:17 [INFO] [stdout] | [INFO] [stdout] 126 | let mut state_guard = state.write().await; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/list_test.rs:343:13 [INFO] [stdout] | [INFO] [stdout] 343 | let mut state_guard = state.write().await; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `members::ChannelSettings` is more private than the item `members::ChannelStats::settings` [INFO] [stdout] --> src/legion/members.rs:635:5 [INFO] [stdout] | [INFO] [stdout] 635 | pub settings: ChannelSettings, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ field `members::ChannelStats::settings` is reachable at visibility `pub(crate)` [INFO] [stdout] | [INFO] [stdout] note: but type `members::ChannelSettings` is only usable at visibility `pub(self)` [INFO] [stdout] --> src/legion/members.rs:145:1 [INFO] [stdout] | [INFO] [stdout] 145 | struct ChannelSettings { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = note: `#[warn(private_interfaces)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `federation::TrustLevel` is more private than the item `federation::FederationManager::add_federated_server` [INFO] [stdout] --> src/legion/federation.rs:185:5 [INFO] [stdout] | [INFO] [stdout] 185 | pub async fn add_federated_server(&self, hostname: String, public_key: PublicKey, trust_level: TrustLevel) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method `federation::FederationManager::add_federated_server` is reachable at visibility `pub(crate)` [INFO] [stdout] | [INFO] [stdout] note: but type `federation::TrustLevel` is only usable at visibility `pub(self)` [INFO] [stdout] --> src/legion/federation.rs:51:1 [INFO] [stdout] | [INFO] [stdout] 51 | enum TrustLevel { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `FederationStatus` is more private than the item `federation::FederationManager::update_server_status` [INFO] [stdout] --> src/legion/federation.rs:227:5 [INFO] [stdout] | [INFO] [stdout] 227 | pub async fn update_server_status(&self, hostname: &str, status: FederationStatus) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method `federation::FederationManager::update_server_status` is reachable at visibility `pub(crate)` [INFO] [stdout] | [INFO] [stdout] note: but type `FederationStatus` is only usable at visibility `pub(self)` [INFO] [stdout] --> src/legion/federation.rs:42:1 [INFO] [stdout] | [INFO] [stdout] 42 | enum FederationStatus { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `ActivityEntry` is more private than the item `ExtendedChannelInfo::recent_activity` [INFO] [stdout] --> src/legion/channel_manager.rs:166:5 [INFO] [stdout] | [INFO] [stdout] 166 | pub recent_activity: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ field `ExtendedChannelInfo::recent_activity` is reachable at visibility `pub(crate)` [INFO] [stdout] | [INFO] [stdout] note: but type `ActivityEntry` is only usable at visibility `pub(self)` [INFO] [stdout] --> src/legion/channel_manager.rs:124:1 [INFO] [stdout] | [INFO] [stdout] 124 | struct ActivityEntry { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `PING_TIMEOUT` is never used [INFO] [stdout] --> src/actors/connection.rs:20:7 [INFO] [stdout] | [INFO] [stdout] 20 | const PING_TIMEOUT: Duration = Duration::from_secs(60); [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `tx` is never read [INFO] [stdout] --> src/actors/connection.rs:29:5 [INFO] [stdout] | [INFO] [stdout] 23 | pub struct ConnectionActor { [INFO] [stdout] | --------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 29 | tx: mpsc::Sender, [INFO] [stdout] | ^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `tx` is never read [INFO] [stdout] --> src/actors/channel.rs:16:5 [INFO] [stdout] | [INFO] [stdout] 11 | pub struct ChannelActor { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] ... [INFO] [stdout] 16 | tx: mpsc::Sender, [INFO] [stdout] | ^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Invite` is never constructed [INFO] [stdout] --> src/actors/channel.rs:47:5 [INFO] [stdout] | [INFO] [stdout] 20 | pub enum ChannelMessage { [INFO] [stdout] | -------------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 47 | Invite { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ChannelMessage` 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 `tx` is never read [INFO] [stdout] --> src/actors/server.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 11 | pub struct ServerActor { [INFO] [stdout] | ----------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 15 | tx: mpsc::Sender, [INFO] [stdout] | ^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `ConnectionCommand`, `CreateChannel`, `RemoveChannel`, `BroadcastMessage`, and `ServerNotice` are never constructed [INFO] [stdout] --> src/actors/server.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 19 | pub enum ServerMessage { [INFO] [stdout] | ------------- variants in this enum [INFO] [stdout] 20 | ConnectionCommand { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 24 | CreateChannel { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 28 | RemoveChannel { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | BroadcastMessage { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 35 | ServerNotice { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ServerMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `CommandProcessor` is never constructed [INFO] [stdout] --> src/commands/mod.rs:12:12 [INFO] [stdout] | [INFO] [stdout] 12 | pub struct CommandProcessor { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new` and `process` are never used [INFO] [stdout] --> src/commands/mod.rs:17:12 [INFO] [stdout] | [INFO] [stdout] 16 | impl CommandProcessor { [INFO] [stdout] | --------------------- associated items in this implementation [INFO] [stdout] 17 | pub fn new(server_state: Arc>) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 21 | pub async fn process( [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `handle_notice` is never used [INFO] [stdout] --> src/commands/handlers/notice.rs:8:14 [INFO] [stdout] | [INFO] [stdout] 8 | pub async fn handle_notice( [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `handle_oper` is never used [INFO] [stdout] --> src/commands/handlers/oper.rs:6:14 [INFO] [stdout] | [INFO] [stdout] 6 | pub async fn handle_oper( [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `handle_nick` is never used [INFO] [stdout] --> src/commands/handlers/nick.rs:9:14 [INFO] [stdout] | [INFO] [stdout] 9 | pub async fn handle_nick( [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `Warn` and `Note` are never constructed [INFO] [stdout] --> src/commands/standard_replies.rs:12:5 [INFO] [stdout] | [INFO] [stdout] 8 | pub enum StandardReplyType { [INFO] [stdout] | ----------------- variants in this enum [INFO] [stdout] ... [INFO] [stdout] 12 | Warn, [INFO] [stdout] | ^^^^ [INFO] [stdout] 13 | /// NOTE - Provides informational messages [INFO] [stdout] 14 | Note, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StandardReplyType` 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 variants are never constructed [INFO] [stdout] --> src/commands/standard_replies.rs:32:5 [INFO] [stdout] | [INFO] [stdout] 29 | pub enum StandardReplyCode { [INFO] [stdout] | ----------------- variants in this enum [INFO] [stdout] ... [INFO] [stdout] 32 | AccountRequiredToConnect, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 38 | NeedMoreParams, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 39 | /// Message could not be retrieved [INFO] [stdout] 40 | MessageError, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 41 | /// Unknown error occurred [INFO] [stdout] 42 | UnknownError, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 46 | CannotSendToChan, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 50 | NotOnChannel, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 51 | /// Channel is invite-only [INFO] [stdout] 52 | InviteOnlyChan, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 53 | /// Channel key required [INFO] [stdout] 54 | BadChannelKey, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 55 | /// Channel is full [INFO] [stdout] 56 | ChannelIsFull, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 57 | /// Banned from channel [INFO] [stdout] 58 | BannedFromChan, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 62 | NoSuchNick, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 63 | /// Nickname in use [INFO] [stdout] 64 | NicknameInUse, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 65 | /// Invalid nickname [INFO] [stdout] 66 | InvalidNickname, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 70 | SaslFail, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 71 | /// Invalid credentials provided [INFO] [stdout] 72 | InvalidCredentials, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 73 | /// Registration failed [INFO] [stdout] 74 | RegFail, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 75 | /// Account registration callback invalid [INFO] [stdout] 76 | RegInvalidCallback, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 77 | /// Account already registered [INFO] [stdout] 78 | AlreadyRegistered, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 82 | UnknownCommand, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 83 | /// Command disabled [INFO] [stdout] 84 | CommandDisabled, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 88 | RateLimitExceeded, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] 89 | /// Resource limit exceeded [INFO] [stdout] 90 | ResourceLimit, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 93 | Custom(String), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StandardReplyCode` 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 `warn`, `note`, and `with_context` are never used [INFO] [stdout] --> src/commands/standard_replies.rs:157:12 [INFO] [stdout] | [INFO] [stdout] 144 | impl StandardReply { [INFO] [stdout] | ------------------ associated items in this implementation [INFO] [stdout] ... [INFO] [stdout] 157 | pub fn warn(command: &str, code: StandardReplyCode, description: &str) -> Self { [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 168 | pub fn note(command: &str, code: StandardReplyCode, description: &str) -> Self { [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 179 | pub fn with_context(mut self, context: Vec) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `no_such_channel` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:225:12 [INFO] [stdout] | [INFO] [stdout] 225 | pub fn no_such_channel(command: &str, channel: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `no_such_nick` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:231:12 [INFO] [stdout] | [INFO] [stdout] 231 | pub fn no_such_nick(command: &str, nick: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `not_on_channel` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:237:12 [INFO] [stdout] | [INFO] [stdout] 237 | pub fn not_on_channel(command: &str, channel: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `cannot_send_to_chan` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:243:12 [INFO] [stdout] | [INFO] [stdout] 243 | pub fn cannot_send_to_chan(command: &str, channel: &str, reason: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `nickname_in_use` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:249:12 [INFO] [stdout] | [INFO] [stdout] 249 | pub fn nickname_in_use(command: &str, nick: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `invalid_nickname` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:255:12 [INFO] [stdout] | [INFO] [stdout] 255 | pub fn invalid_nickname(command: &str, nick: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `unknown_command` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:261:12 [INFO] [stdout] | [INFO] [stdout] 261 | pub fn unknown_command(command: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `rate_limit_exceeded` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:267:12 [INFO] [stdout] | [INFO] [stdout] 267 | pub fn rate_limit_exceeded(command: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `deprecated_command` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:272:12 [INFO] [stdout] | [INFO] [stdout] 272 | pub fn deprecated_command(command: &str, alternative: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `info_note` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:278:12 [INFO] [stdout] | [INFO] [stdout] 278 | pub fn info_note(command: &str, message: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `DatabaseError` is never used [INFO] [stdout] --> src/db/mod.rs:12:10 [INFO] [stdout] | [INFO] [stdout] 12 | pub enum DatabaseError { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `Database` is never used [INFO] [stdout] --> src/db/mod.rs:30:10 [INFO] [stdout] | [INFO] [stdout] 30 | pub enum Database { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> src/db/mod.rs:36:18 [INFO] [stdout] | [INFO] [stdout] 35 | impl Database { [INFO] [stdout] | ------------- associated items in this implementation [INFO] [stdout] 36 | pub async fn connect_postgres(url: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 41 | pub async fn connect_sqlite(url: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 46 | pub async fn run_migrations(&self) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 52 | pub async fn create_user(&self, user: &User) -> Result { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 56 | pub async fn get_user_by_nickname(&self, nickname: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 60 | pub async fn get_user_by_id(&self, id: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 64 | pub async fn update_user(&self, user: &User) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 68 | pub async fn authenticate_user(&self, nickname: &str, password: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 73 | pub async fn create_channel(&self, channel: &Channel) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 77 | pub async fn get_channel(&self, name: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 81 | pub async fn update_channel(&self, channel: &Channel) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 85 | pub async fn delete_channel(&self, name: &str) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 89 | pub async fn list_channels(&self) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 94 | pub async fn add_channel_member(&self, member: &ChannelMember) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 98 | pub async fn remove_channel_member(&self, channel: &str, user_id: &str) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 102 | pub async fn get_channel_members(&self, channel: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 106 | pub async fn get_user_channels(&self, user_id: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 111 | pub async fn add_ban(&self, ban: &BanEntry) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 115 | pub async fn remove_ban(&self, channel: &str, mask: &str) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 119 | pub async fn get_channel_bans(&self, channel: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 123 | pub async fn is_banned(&self, channel: &str, user_mask: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 128 | pub async fn get_server_config(&self) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 132 | pub async fn update_server_config(&self, config: &ServerConfig) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `User` is never constructed [INFO] [stdout] --> src/db/models.rs:6:12 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct User { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `new` is never used [INFO] [stdout] --> src/db/models.rs:25:12 [INFO] [stdout] | [INFO] [stdout] 24 | impl User { [INFO] [stdout] | --------- associated function in this implementation [INFO] [stdout] 25 | pub fn new(nickname: String, username: String, realname: String, password_hash: String) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Channel` is never constructed [INFO] [stdout] --> src/db/models.rs:47:12 [INFO] [stdout] | [INFO] [stdout] 47 | pub struct Channel { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `new` is never used [INFO] [stdout] --> src/db/models.rs:66:12 [INFO] [stdout] | [INFO] [stdout] 65 | impl Channel { [INFO] [stdout] | ------------ associated function in this implementation [INFO] [stdout] 66 | pub fn new(name: String, founder: Option) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelMember` is never constructed [INFO] [stdout] --> src/db/models.rs:88:12 [INFO] [stdout] | [INFO] [stdout] 88 | pub struct ChannelMember { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `BanEntry` is never constructed [INFO] [stdout] --> src/db/models.rs:97:12 [INFO] [stdout] | [INFO] [stdout] 97 | pub struct BanEntry { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ServerConfig` is never constructed [INFO] [stdout] --> src/db/models.rs:107:12 [INFO] [stdout] | [INFO] [stdout] 107 | pub struct ServerConfig { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `MessageLog` is never constructed [INFO] [stdout] --> src/db/models.rs:164:12 [INFO] [stdout] | [INFO] [stdout] 164 | pub struct MessageLog { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `OperatorCredential` is never constructed [INFO] [stdout] --> src/db/models.rs:175:12 [INFO] [stdout] | [INFO] [stdout] 175 | pub struct OperatorCredential { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `create_user` is never used [INFO] [stdout] --> src/db/queries/users.rs:3:14 [INFO] [stdout] | [INFO] [stdout] 3 | pub async fn create_user(_db: &Database, user: &User) -> Result { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_user_by_nickname` is never used [INFO] [stdout] --> src/db/queries/users.rs:8:14 [INFO] [stdout] | [INFO] [stdout] 8 | pub async fn get_user_by_nickname( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_user_by_id` is never used [INFO] [stdout] --> src/db/queries/users.rs:16:14 [INFO] [stdout] | [INFO] [stdout] 16 | pub async fn get_user_by_id(_db: &Database, _id: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `update_user` is never used [INFO] [stdout] --> src/db/queries/users.rs:21:14 [INFO] [stdout] | [INFO] [stdout] 21 | pub async fn update_user(_db: &Database, _user: &User) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `authenticate_user` is never used [INFO] [stdout] --> src/db/queries/users.rs:26:14 [INFO] [stdout] | [INFO] [stdout] 26 | pub async fn authenticate_user( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `create_channel` is never used [INFO] [stdout] --> src/db/queries/channels.rs:3:14 [INFO] [stdout] | [INFO] [stdout] 3 | pub async fn create_channel(_db: &Database, channel: &Channel) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_channel` is never used [INFO] [stdout] --> src/db/queries/channels.rs:8:14 [INFO] [stdout] | [INFO] [stdout] 8 | pub async fn get_channel(_db: &Database, _name: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `update_channel` is never used [INFO] [stdout] --> src/db/queries/channels.rs:13:14 [INFO] [stdout] | [INFO] [stdout] 13 | pub async fn update_channel(_db: &Database, _channel: &Channel) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `delete_channel` is never used [INFO] [stdout] --> src/db/queries/channels.rs:18:14 [INFO] [stdout] | [INFO] [stdout] 18 | pub async fn delete_channel(_db: &Database, _name: &str) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `list_channels` is never used [INFO] [stdout] --> src/db/queries/channels.rs:23:14 [INFO] [stdout] | [INFO] [stdout] 23 | pub async fn list_channels(_db: &Database) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `add_channel_member` is never used [INFO] [stdout] --> src/db/queries/channels.rs:28:14 [INFO] [stdout] | [INFO] [stdout] 28 | pub async fn add_channel_member(_db: &Database, _member: &ChannelMember) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `remove_channel_member` is never used [INFO] [stdout] --> src/db/queries/channels.rs:33:14 [INFO] [stdout] | [INFO] [stdout] 33 | pub async fn remove_channel_member(_db: &Database, _channel: &str, _user_id: &str) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_channel_members` is never used [INFO] [stdout] --> src/db/queries/channels.rs:38:14 [INFO] [stdout] | [INFO] [stdout] 38 | pub async fn get_channel_members(_db: &Database, _channel: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_user_channels` is never used [INFO] [stdout] --> src/db/queries/channels.rs:43:14 [INFO] [stdout] | [INFO] [stdout] 43 | pub async fn get_user_channels(_db: &Database, _user_id: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `add_ban` is never used [INFO] [stdout] --> src/db/queries/bans.rs:3:14 [INFO] [stdout] | [INFO] [stdout] 3 | pub async fn add_ban(_db: &Database, _ban: &BanEntry) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `remove_ban` is never used [INFO] [stdout] --> src/db/queries/bans.rs:8:14 [INFO] [stdout] | [INFO] [stdout] 8 | pub async fn remove_ban(_db: &Database, _channel: &str, _mask: &str) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_channel_bans` is never used [INFO] [stdout] --> src/db/queries/bans.rs:13:14 [INFO] [stdout] | [INFO] [stdout] 13 | pub async fn get_channel_bans(_db: &Database, _channel: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_banned` is never used [INFO] [stdout] --> src/db/queries/bans.rs:18:14 [INFO] [stdout] | [INFO] [stdout] 18 | pub async fn is_banned(_db: &Database, _channel: &str, _user_mask: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_server_config` is never used [INFO] [stdout] --> src/db/queries/config.rs:3:14 [INFO] [stdout] | [INFO] [stdout] 3 | pub async fn get_server_config(_db: &Database) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `update_server_config` is never used [INFO] [stdout] --> src/db/queries/config.rs:8:14 [INFO] [stdout] | [INFO] [stdout] 8 | pub async fn update_server_config(_db: &Database, _config: &ServerConfig) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `create_schema_sql` is never used [INFO] [stdout] --> src/db/migrations.rs:3:8 [INFO] [stdout] | [INFO] [stdout] 3 | pub fn create_schema_sql() -> &'static str { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Config` is never constructed [INFO] [stdout] --> src/error.rs:22:5 [INFO] [stdout] | [INFO] [stdout] 7 | pub enum CenturionError { [INFO] [stdout] | -------------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 22 | Config(String), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `CenturionError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `has_msgid` and `timestamp_secs` are never used [INFO] [stdout] --> src/history/mod.rs:81:12 [INFO] [stdout] | [INFO] [stdout] 56 | impl HistoryItem { [INFO] [stdout] | ---------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 81 | pub fn has_msgid(&self, msgid: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 86 | pub fn timestamp_secs(&self) -> u64 { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `cleanup_old_messages` is never used [INFO] [stdout] --> src/history/storage.rs:286:12 [INFO] [stdout] | [INFO] [stdout] 195 | impl HistoryStorage { [INFO] [stdout] | ------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 286 | pub fn cleanup_old_messages(&self) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `is_empty` is never used [INFO] [stdout] --> src/history/queries.rs:33:12 [INFO] [stdout] | [INFO] [stdout] 11 | impl HistorySelector { [INFO] [stdout] | -------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 33 | pub fn is_empty(&self) -> bool { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `start` and `end` are never read [INFO] [stdout] --> src/history/queries.rs:74:9 [INFO] [stdout] | [INFO] [stdout] 73 | Targets { [INFO] [stdout] | ------- fields in this variant [INFO] [stdout] 74 | start: Option, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 75 | end: Option, [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `HistoryQuery` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Key` is never constructed [INFO] [stdout] --> src/legion/mod.rs:44:5 [INFO] [stdout] | [INFO] [stdout] 25 | pub enum LegionError { [INFO] [stdout] | ----------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 44 | Key(String), [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LegionError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `server_identity`, `channels`, `sessions`, `key_manager`, `member_manager`, and `federation_manager` are never read [INFO] [stdout] --> src/legion/mod.rs:63:5 [INFO] [stdout] | [INFO] [stdout] 61 | pub struct LegionManager { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] 62 | /// Server identity for Legion operations [INFO] [stdout] 63 | server_identity: Arc>, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] 64 | /// Active Legion channels [INFO] [stdout] 65 | channels: Arc>, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 66 | /// Client sessions with Legion capabilities [INFO] [stdout] 67 | sessions: Arc>, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 68 | /// Key manager for rotation and storage [INFO] [stdout] 69 | key_manager: Arc, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 70 | /// Member manager for authentication and authorization [INFO] [stdout] 71 | member_manager: Arc, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 72 | /// Federation manager for cross-server communication [INFO] [stdout] 73 | federation_manager: Arc, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LegionManager` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple methods are never used [INFO] [stdout] --> src/legion/mod.rs:95:18 [INFO] [stdout] | [INFO] [stdout] 76 | impl LegionManager { [INFO] [stdout] | ------------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 95 | pub async fn server_identity(&self) -> Identity { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 100 | pub async fn supports_legion(&self, client_id: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 109 | pub async fn create_session(&self, client_id: String, capabilities: Vec) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 116 | pub async fn remove_session(&self, client_id: &str) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 122 | pub async fn create_channel(&self, channel_name: String, creator_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 160 | pub async fn join_channel(&self, channel_name: String, client_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 200 | pub async fn leave_channel(&self, channel_name: String, client_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 222 | pub async fn send_message( [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 246 | pub async fn receive_message( [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 277 | pub async fn channel_stats(&self, channel_name: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 285 | pub async fn list_channels(&self) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 290 | pub async fn rotate_channel_keys(&self, channel_name: String, admin_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 312 | pub async fn cleanup(&self) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `ChannelOperation` is never used [INFO] [stdout] --> src/legion/channels.rs:13:10 [INFO] [stdout] | [INFO] [stdout] 13 | pub enum ChannelOperation { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelEvent` is never constructed [INFO] [stdout] --> src/legion/channels.rs:29:12 [INFO] [stdout] | [INFO] [stdout] 29 | pub struct ChannelEvent { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple methods are never used [INFO] [stdout] --> src/legion/channels.rs:60:18 [INFO] [stdout] | [INFO] [stdout] 39 | impl LegionManager { [INFO] [stdout] | ------------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 60 | pub async fn handle_create_channel(&self, channel_name: String, creator_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 88 | pub async fn handle_join_channel(&self, channel_name: String, client_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 114 | pub async fn handle_leave_channel(&self, channel_name: String, client_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 135 | pub async fn handle_send_message(&self, channel_name: String, sender_id: String, message: String) -> LegionResult> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 164 | pub async fn handle_receive_message(&self, channel_name: String, recipient_id: String, encrypted_data: Vec) -> LegionResult LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 201 | pub async fn get_channel_info(&self, channel_name: &str, requester_id: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 231 | pub async fn list_user_channels(&self, user_id: &str) -> LegionResult> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 252 | async fn log_channel_event(&self, event: ChannelEvent) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelInfo` is never constructed [INFO] [stdout] --> src/legion/channels.rs:261:12 [INFO] [stdout] | [INFO] [stdout] 261 | pub struct ChannelInfo { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelSummary` is never constructed [INFO] [stdout] --> src/legion/channels.rs:271:12 [INFO] [stdout] | [INFO] [stdout] 271 | pub struct ChannelSummary { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_OLD_KEYS` is never used [INFO] [stdout] --> src/legion/keys.rs:18:7 [INFO] [stdout] | [INFO] [stdout] 18 | const MAX_OLD_KEYS: usize = 10; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `kdf_context` and `backup_handler` are never read [INFO] [stdout] --> src/legion/keys.rs:28:5 [INFO] [stdout] | [INFO] [stdout] 22 | pub struct KeyManager { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 28 | kdf_context: Vec, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 29 | /// Backup storage handler [INFO] [stdout] 30 | backup_handler: Option>, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `KeyManager` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `current_rotation`, `old_rotations`, `created_at`, `last_rotation`, and `next_rotation` are never read [INFO] [stdout] --> src/legion/keys.rs:37:5 [INFO] [stdout] | [INFO] [stdout] 35 | struct ChannelKeys { [INFO] [stdout] | ----------- fields in this struct [INFO] [stdout] 36 | /// Current active key rotation info [INFO] [stdout] 37 | current_rotation: KeyRotationInfo, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 38 | /// Previous keys for backward compatibility [INFO] [stdout] 39 | old_rotations: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 40 | /// Channel creation timestamp [INFO] [stdout] 41 | created_at: SystemTime, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 42 | /// Last rotation timestamp [INFO] [stdout] 43 | last_rotation: SystemTime, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 44 | /// Next scheduled rotation [INFO] [stdout] 45 | next_rotation: SystemTime, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ChannelKeys` 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 `store_backup`, `retrieve_backup`, `list_backups`, and `cleanup_backups` are never used [INFO] [stdout] --> src/legion/keys.rs:106:14 [INFO] [stdout] | [INFO] [stdout] 104 | pub trait BackupHandler: Send + Sync + std::fmt::Debug { [INFO] [stdout] | ------------- methods in this trait [INFO] [stdout] 105 | /// Store a key rotation backup [INFO] [stdout] 106 | async fn store_backup(&self, channel: &str, rotation: &KeyRotationInfo) -> LegionResult<()>; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 109 | async fn retrieve_backup(&self, channel: &str, sequence: u64) -> LegionResult>; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 112 | async fn list_backups(&self, channel: &str) -> LegionResult>; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 115 | async fn cleanup_backups(&self, channel: &str, keep_count: usize) -> LegionResult<()>; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple methods are never used [INFO] [stdout] --> src/legion/keys.rs:146:18 [INFO] [stdout] | [INFO] [stdout] 130 | impl KeyManager { [INFO] [stdout] | --------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 146 | pub async fn set_backup_handler(&mut self, handler: Box) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 166 | pub async fn store_key_rotation(&self, channel: &str, rotation_msg: &KeyRotationMessage) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 215 | pub async fn get_current_rotation(&self, channel: &str) -> LegionResult> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 221 | pub async fn get_rotation_by_sequence(&self, channel: &str, sequence: u64) -> LegionResult> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 247 | pub async fn needs_rotation(&self, channel: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 275 | pub async fn schedule_rotation(&self, channel: &str, when: SystemTime) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 288 | pub async fn on_member_change(&self, channel: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 302 | pub async fn channel_stats(&self, channel: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 332 | pub async fn cleanup(&self) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 365 | fn compute_key_fingerprint(&self, rotation_msg: &KeyRotationMessage) -> [u8; 32] { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelKeyStats` is never constructed [INFO] [stdout] --> src/legion/keys.rs:382:12 [INFO] [stdout] | [INFO] [stdout] 382 | pub struct ChannelKeyStats { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `to_json` is never used [INFO] [stdout] --> src/legion/keys.rs:395:12 [INFO] [stdout] | [INFO] [stdout] 393 | impl ChannelKeyStats { [INFO] [stdout] | -------------------- method in this implementation [INFO] [stdout] 394 | /// Convert to JSON-friendly format [INFO] [stdout] 395 | pub fn to_json(&self) -> serde_json::Value { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MEMBER_INACTIVITY_TIMEOUT` is never used [INFO] [stdout] --> src/legion/members.rs:16:7 [INFO] [stdout] | [INFO] [stdout] 16 | const MEMBER_INACTIVITY_TIMEOUT: Duration = Duration::from_secs(7 * 24 * 60 * 60); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `invitations` is never read [INFO] [stdout] --> src/legion/members.rs:28:5 [INFO] [stdout] | [INFO] [stdout] 20 | pub struct MemberManager { [INFO] [stdout] | ------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 28 | invitations: RwLock>>, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `MemberManager` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `channel_name`, `owner`, `created_at`, `settings`, and `pending_invitations` are never read [INFO] [stdout] --> src/legion/members.rs:35:5 [INFO] [stdout] | [INFO] [stdout] 33 | struct ChannelMembership { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 34 | /// Channel name [INFO] [stdout] 35 | channel_name: String, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 36 | /// Channel owner [INFO] [stdout] 37 | owner: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 41 | created_at: SystemTime, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 42 | /// Channel settings [INFO] [stdout] 43 | settings: ChannelSettings, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 44 | /// Active invitations for this channel [INFO] [stdout] 45 | pending_invitations: HashSet, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ChannelMembership` 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 `member_id`, `identity`, `registered_at`, `last_seen`, and `metadata` are never read [INFO] [stdout] --> src/legion/members.rs:69:5 [INFO] [stdout] | [INFO] [stdout] 67 | struct MemberInfo { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 68 | /// Member ID [INFO] [stdout] 69 | member_id: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 70 | /// Member's current identity [INFO] [stdout] 71 | identity: phalanx_crypto::Identity, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 75 | registered_at: SystemTime, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 76 | /// Last global activity [INFO] [stdout] 77 | last_seen: SystemTime, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 78 | /// Member metadata [INFO] [stdout] 79 | metadata: HashMap, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `MemberInfo` 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 methods are never used [INFO] [stdout] --> src/legion/members.rs:338:18 [INFO] [stdout] | [INFO] [stdout] 262 | impl MemberManager { [INFO] [stdout] | ------------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 338 | pub async fn add_channel_member(&self, channel_name: &str, member_id: &str, role: MemberRole) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 380 | pub async fn remove_channel_member(&self, channel_name: &str, member_id: &str) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 407 | pub async fn can_join_channel(&self, channel_name: &str, member_id: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 502 | pub async fn create_invitation(&self, channel_name: String, inviter_id: String, invitee_id: String, expires_in: Duration) -> LegionRe... [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 531 | pub async fn use_invitation(&self, invitation_id: &str) -> LegionResult<(String, String)> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 567 | pub async fn channel_stats(&self, channel_name: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 596 | pub async fn cleanup(&self) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 616 | pub async fn get_user_channels(&self, user_id: &str) -> LegionResult> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelStats` is never constructed [INFO] [stdout] --> src/legion/members.rs:628:12 [INFO] [stdout] | [INFO] [stdout] 628 | pub struct ChannelStats { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `identity` and `created_at` are never read [INFO] [stdout] --> src/legion/session.rs:22:5 [INFO] [stdout] | [INFO] [stdout] 18 | pub struct LegionSession { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 22 | identity: RwLock, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 28 | created_at: SystemTime, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LegionSession` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple methods are never used [INFO] [stdout] --> src/legion/session.rs:101:18 [INFO] [stdout] | [INFO] [stdout] 37 | impl LegionSession { [INFO] [stdout] | ------------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 101 | pub async fn identity(&self) -> LegionResult { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 106 | pub async fn public_key(&self) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 127 | pub fn age(&self) -> Duration { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 176 | pub fn capabilities(&self) -> &HashSet { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 186 | pub async fn stats(&self) -> SessionStats { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 204 | pub async fn create_handshake(&self, group_id: [u8; 32]) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 223 | pub async fn process_handshake( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `SessionStats` is never constructed [INFO] [stdout] --> src/legion/session.rs:234:12 [INFO] [stdout] | [INFO] [stdout] 234 | pub struct SessionStats { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `to_json` is never used [INFO] [stdout] --> src/legion/session.rs:247:12 [INFO] [stdout] | [INFO] [stdout] 245 | impl SessionStats { [INFO] [stdout] | ----------------- method in this implementation [INFO] [stdout] 246 | /// Convert to JSON-friendly format [INFO] [stdout] 247 | pub fn to_json(&self) -> serde_json::Value { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `bridge_configs` is never read [INFO] [stdout] --> src/legion/federation.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 14 | pub struct FederationManager { [INFO] [stdout] | ----------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 18 | bridge_configs: RwLock>, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `FederationManager` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `public_key` is never read [INFO] [stdout] --> src/legion/federation.rs:29:5 [INFO] [stdout] | [INFO] [stdout] 25 | struct FederatedServer { [INFO] [stdout] | --------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 29 | public_key: PublicKey, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `FederatedServer` 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: variants `Connected`, `Disconnected`, and `Error` are never constructed [INFO] [stdout] --> src/legion/federation.rs:43:5 [INFO] [stdout] | [INFO] [stdout] 42 | enum FederationStatus { [INFO] [stdout] | ---------------- variants in this enum [INFO] [stdout] 43 | Connected, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 44 | Connecting, [INFO] [stdout] 45 | Disconnected, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 46 | Error(String), [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `FederationStatus` 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 methods are never used [INFO] [stdout] --> src/legion/federation.rs:227:18 [INFO] [stdout] | [INFO] [stdout] 159 | impl FederationManager { [INFO] [stdout] | ---------------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 227 | pub async fn update_server_status(&self, hostname: &str, status: FederationStatus) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 267 | pub async fn configure_bridge(&self, config: BridgeConfig) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 287 | pub async fn remove_bridge(&self, bridge_name: &str) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 298 | pub async fn send_federated_message(&self, target_server: &str, channel: &str, message: Vec) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 319 | pub async fn process_federated_message(&self, source_server: &str, channel: &str, message: Vec) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 336 | pub async fn federation_stats(&self) -> FederationStats { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 360 | pub async fn cleanup(&self) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `FederationStats` is never constructed [INFO] [stdout] --> src/legion/federation.rs:396:12 [INFO] [stdout] | [INFO] [stdout] 396 | pub struct FederationStats { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `scheduled_operations` is never read [INFO] [stdout] --> src/legion/channel_manager.rs:27:5 [INFO] [stdout] | [INFO] [stdout] 17 | pub struct AdvancedChannelManager { [INFO] [stdout] | ---------------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 27 | scheduled_operations: RwLock>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `stats` and `rate_limits` are never read [INFO] [stdout] --> src/legion/channel_manager.rs:42:5 [INFO] [stdout] | [INFO] [stdout] 32 | struct ManagedChannel { [INFO] [stdout] | -------------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 42 | stats: ChannelStats, [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 46 | rate_limits: HashMap, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ManagedChannel` 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 `message_count`, `window_start`, and `burst_remaining` are never read [INFO] [stdout] --> src/legion/channel_manager.rs:115:5 [INFO] [stdout] | [INFO] [stdout] 113 | struct RateState { [INFO] [stdout] | --------- fields in this struct [INFO] [stdout] 114 | /// Message count in current window [INFO] [stdout] 115 | message_count: u32, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 116 | /// Current window start time [INFO] [stdout] 117 | window_start: SystemTime, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 118 | /// Burst allowance remaining [INFO] [stdout] 119 | burst_remaining: u32, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `RateState` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ExtendedChannelInfo` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:160:12 [INFO] [stdout] | [INFO] [stdout] 160 | pub struct ExtendedChannelInfo { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelHealth` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:175:12 [INFO] [stdout] | [INFO] [stdout] 175 | pub struct ChannelHealth { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `HealthIssue` is never used [INFO] [stdout] --> src/legion/channel_manager.rs:186:10 [INFO] [stdout] | [INFO] [stdout] 186 | pub enum HealthIssue { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `PerformanceMetrics` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:201:12 [INFO] [stdout] | [INFO] [stdout] 201 | pub struct PerformanceMetrics { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `SecurityStatus` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:214:12 [INFO] [stdout] | [INFO] [stdout] 214 | pub struct SecurityStatus { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `SecurityEvent` is never used [INFO] [stdout] --> src/legion/channel_manager.rs:227:10 [INFO] [stdout] | [INFO] [stdout] 227 | pub enum SecurityEvent { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `get_extended_channel_info`, `calculate_channel_health`, `assess_security_status`, and `process_scheduled_operations` are never used [INFO] [stdout] --> src/legion/channel_manager.rs:808:18 [INFO] [stdout] | [INFO] [stdout] 252 | impl AdvancedChannelManager { [INFO] [stdout] | --------------------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 808 | pub async fn get_extended_channel_info(&self, channel_name: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 833 | async fn calculate_channel_health(&self, channel: &ManagedChannel) -> ChannelHealth { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 873 | async fn assess_security_status(&self, channel: &ManagedChannel) -> SecurityStatus { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 973 | pub async fn process_scheduled_operations(&self) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type alias `ProtocolError` is never used [INFO] [stdout] --> src/protocol/mod.rs:36:10 [INFO] [stdout] | [INFO] [stdout] 36 | pub type ProtocolError = IronError; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> src/protocol/commands.rs:16:5 [INFO] [stdout] | [INFO] [stdout] 4 | pub enum Command { [INFO] [stdout] | ------- variants in this enum [INFO] [stdout] ... [INFO] [stdout] 16 | Topic { channel: String, topic: Option }, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 17 | Names(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 18 | List(Option>), [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 25 | Who(Option), [INFO] [stdout] | ^^^ [INFO] [stdout] 26 | Whois(Vec), [INFO] [stdout] 27 | Whowas(String, Option), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | Kick { channel: String, user: String, reason: Option }, [INFO] [stdout] | ^^^^ [INFO] [stdout] 32 | Mode { target: String, modes: Option, params: Vec }, [INFO] [stdout] | ^^^^ [INFO] [stdout] 33 | Invite { nick: String, channel: String }, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 36 | Motd(Option), [INFO] [stdout] | ^^^^ [INFO] [stdout] 37 | Version(Option), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 38 | Stats(Option, Option), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 39 | Time(Option), [INFO] [stdout] | ^^^^ [INFO] [stdout] 40 | Info(Option), [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 45 | Account(String), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 46 | Monitor { subcommand: String, targets: Vec }, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 47 | Metadata { target: String, subcommand: String, params: Vec }, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 48 | TagMsg { target: String }, [INFO] [stdout] 49 | Batch { reference: String, batch_type: Option, params: Vec }, [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 58 | Oper { name: String, password: String }, [INFO] [stdout] | ^^^^ [INFO] [stdout] 59 | Kill { nick: String, reason: String }, [INFO] [stdout] | ^^^^ [INFO] [stdout] 60 | Rehash, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 61 | Restart, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 62 | Die, [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 65 | CtcpRequest { target: String, command: String, params: String }, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 66 | CtcpResponse { target: String, command: String, params: String }, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Command` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `MessageExtensions` is never constructed [INFO] [stdout] --> src/protocol/extensions.rs:5:12 [INFO] [stdout] | [INFO] [stdout] 5 | pub struct MessageExtensions { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `TypingState` is never used [INFO] [stdout] --> src/protocol/extensions.rs:18:10 [INFO] [stdout] | [INFO] [stdout] 18 | pub enum TypingState { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `from_tags`, and `to_tags` are never used [INFO] [stdout] --> src/protocol/extensions.rs:25:12 [INFO] [stdout] | [INFO] [stdout] 24 | impl MessageExtensions { [INFO] [stdout] | ---------------------- associated items in this implementation [INFO] [stdout] 25 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 39 | pub fn from_tags(tags: &HashMap>) -> Self { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 74 | pub fn to_tags(&self) -> HashMap> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Batch` is never constructed [INFO] [stdout] --> src/protocol/extensions.rs:127:12 [INFO] [stdout] | [INFO] [stdout] 127 | pub struct Batch { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new` and `add_message` are never used [INFO] [stdout] --> src/protocol/extensions.rs:136:12 [INFO] [stdout] | [INFO] [stdout] 135 | impl Batch { [INFO] [stdout] | ---------- associated items in this implementation [INFO] [stdout] 136 | pub fn new(reference: String, batch_type: String, params: Vec) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 146 | pub fn add_message(&mut self, msg: crate::protocol::Message) { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `SecurityError` is never used [INFO] [stdout] --> src/security/mod.rs:18:10 [INFO] [stdout] | [INFO] [stdout] 18 | pub enum SecurityError { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `quota` is never read [INFO] [stdout] --> src/security/mod.rs:39:5 [INFO] [stdout] | [INFO] [stdout] 38 | pub struct RateLimiter { [INFO] [stdout] | ----------- field in this struct [INFO] [stdout] 39 | quota: Quota, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `check_key` is never used [INFO] [stdout] --> src/security/mod.rs:59:18 [INFO] [stdout] | [INFO] [stdout] 43 | impl RateLimiter { [INFO] [stdout] | ---------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 59 | pub async fn check_key(&self, _key: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ConnectionLimiter` is never constructed [INFO] [stdout] --> src/security/mod.rs:64:12 [INFO] [stdout] | [INFO] [stdout] 64 | pub struct ConnectionLimiter { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ConnectionLimits` is never constructed [INFO] [stdout] --> src/security/mod.rs:68:8 [INFO] [stdout] | [INFO] [stdout] 68 | struct ConnectionLimits { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `check_and_add`, and `remove` are never used [INFO] [stdout] --> src/security/mod.rs:76:12 [INFO] [stdout] | [INFO] [stdout] 75 | impl ConnectionLimiter { [INFO] [stdout] | ---------------------- associated items in this implementation [INFO] [stdout] 76 | pub fn new(max_per_ip: usize, max_global: usize) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 87 | pub fn check_and_add(&self, addr: SocketAddr) -> Result<(), SecurityError> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 108 | pub fn remove(&self, addr: SocketAddr) { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `FloodProtection` is never constructed [INFO] [stdout] --> src/security/mod.rs:123:12 [INFO] [stdout] | [INFO] [stdout] 123 | pub struct FloodProtection { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `check_flood`, and `clear` are never used [INFO] [stdout] --> src/security/mod.rs:130:12 [INFO] [stdout] | [INFO] [stdout] 129 | impl FloodProtection { [INFO] [stdout] | -------------------- associated items in this implementation [INFO] [stdout] 130 | pub fn new(max_messages: usize, time_window: Duration) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 138 | pub fn check_flood(&self, connection_id: u64) -> bool { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 155 | pub fn clear(&self, connection_id: u64) { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `BanManager` is never constructed [INFO] [stdout] --> src/security/mod.rs:160:12 [INFO] [stdout] | [INFO] [stdout] 160 | pub struct BanManager { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `BanEntry` is never constructed [INFO] [stdout] --> src/security/mod.rs:165:12 [INFO] [stdout] | [INFO] [stdout] 165 | pub struct BanEntry { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `add_ban`, `remove_ban`, `is_banned`, and `get_bans` are never used [INFO] [stdout] --> src/security/mod.rs:173:12 [INFO] [stdout] | [INFO] [stdout] 172 | impl BanManager { [INFO] [stdout] | --------------- associated items in this implementation [INFO] [stdout] 173 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 179 | pub fn add_ban(&self, channel: &str, ban: BanEntry) { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 186 | pub fn remove_ban(&self, channel: &str, mask: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 196 | pub fn is_banned(&self, channel: &str, user_mask: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 214 | pub fn get_bans(&self, channel: &str) -> Vec { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `mask_matches` is never used [INFO] [stdout] --> src/security/mod.rs:222:4 [INFO] [stdout] | [INFO] [stdout] 222 | fn mask_matches(pattern: &str, text: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `AuthError` is never used [INFO] [stdout] --> src/security/auth.rs:10:10 [INFO] [stdout] | [INFO] [stdout] 10 | pub enum AuthError { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `SaslMechanism` is never used [INFO] [stdout] --> src/security/auth.rs:25:10 [INFO] [stdout] | [INFO] [stdout] 25 | pub enum SaslMechanism { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `from_str` and `as_str` are never used [INFO] [stdout] --> src/security/auth.rs:32:12 [INFO] [stdout] | [INFO] [stdout] 31 | impl SaslMechanism { [INFO] [stdout] | ------------------ associated items in this implementation [INFO] [stdout] 32 | pub fn from_str(s: &str) -> Option { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 41 | pub fn as_str(&self) -> &'static str { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `AuthMethod` is never used [INFO] [stdout] --> src/security/auth.rs:51:10 [INFO] [stdout] | [INFO] [stdout] 51 | pub enum AuthMethod { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `LocalPasswordHasher` is never constructed [INFO] [stdout] --> src/security/auth.rs:62:12 [INFO] [stdout] | [INFO] [stdout] 62 | pub struct LocalPasswordHasher; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated functions `hash_password` and `verify_password` are never used [INFO] [stdout] --> src/security/auth.rs:65:12 [INFO] [stdout] | [INFO] [stdout] 64 | impl LocalPasswordHasher { [INFO] [stdout] | ------------------------ associated functions in this implementation [INFO] [stdout] 65 | pub fn hash_password(password: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 70 | pub fn verify_password(password: &str, hash: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `SaslAuthenticator` is never constructed [INFO] [stdout] --> src/security/auth.rs:76:12 [INFO] [stdout] | [INFO] [stdout] 76 | pub struct SaslAuthenticator { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ScramServerState` is never constructed [INFO] [stdout] --> src/security/auth.rs:80:8 [INFO] [stdout] | [INFO] [stdout] 80 | struct ScramServerState { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `authenticate_plain`, `start_scram_sha256`, and `verify_scram_sha256` are never used [INFO] [stdout] --> src/security/auth.rs:89:12 [INFO] [stdout] | [INFO] [stdout] 88 | impl SaslAuthenticator { [INFO] [stdout] | ---------------------- associated items in this implementation [INFO] [stdout] 89 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 95 | pub fn authenticate_plain(&self, auth_data: &[u8]) -> Result<(String, String), AuthError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 115 | pub fn start_scram_sha256(&mut self, client_first: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 152 | pub fn verify_scram_sha256( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `authenticate` is never used [INFO] [stdout] --> src/security/auth.rs:193:14 [INFO] [stdout] | [INFO] [stdout] 193 | pub async fn authenticate( [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `generate_nonce` is never used [INFO] [stdout] --> src/security/auth.rs:218:4 [INFO] [stdout] | [INFO] [stdout] 218 | fn generate_nonce() -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `generate_salt` is never used [INFO] [stdout] --> src/security/auth.rs:225:4 [INFO] [stdout] | [INFO] [stdout] 225 | fn generate_salt() -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `derive_salted_password` is never used [INFO] [stdout] --> src/security/auth.rs:231:4 [INFO] [stdout] | [INFO] [stdout] 231 | fn derive_salted_password(password: &[u8], salt: &[u8], iterations: u32) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `hmac_sha256` is never used [INFO] [stdout] --> src/security/auth.rs:237:4 [INFO] [stdout] | [INFO] [stdout] 237 | fn hmac_sha256(key: &[u8], data: &[u8]) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `create_tls_acceptor` is never used [INFO] [stdout] --> src/security/tls.rs:4:14 [INFO] [stdout] | [INFO] [stdout] 4 | pub async fn create_tls_acceptor(_cert_path: &Path, _key_path: &Path) -> io::Result<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static `VALID_USER_REGEX` is never used [INFO] [stdout] --> src/security/validation.rs:12:8 [INFO] [stdout] | [INFO] [stdout] 12 | static VALID_USER_REGEX: Lazy = Lazy::new(|| { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_username` is never used [INFO] [stdout] --> src/security/validation.rs:32:8 [INFO] [stdout] | [INFO] [stdout] 32 | pub fn validate_username(username: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_realname` is never used [INFO] [stdout] --> src/security/validation.rs:40:8 [INFO] [stdout] | [INFO] [stdout] 40 | pub fn validate_realname(realname: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_topic` is never used [INFO] [stdout] --> src/security/validation.rs:58:8 [INFO] [stdout] | [INFO] [stdout] 58 | pub fn validate_topic(topic: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_away_message` is never used [INFO] [stdout] --> src/security/validation.rs:67:8 [INFO] [stdout] | [INFO] [stdout] 67 | pub fn validate_away_message(message: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_kick_reason` is never used [INFO] [stdout] --> src/security/validation.rs:76:8 [INFO] [stdout] | [INFO] [stdout] 76 | pub fn validate_kick_reason(reason: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_quit_message` is never used [INFO] [stdout] --> src/security/validation.rs:85:8 [INFO] [stdout] | [INFO] [stdout] 85 | pub fn validate_quit_message(message: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_channel_key` is never used [INFO] [stdout] --> src/security/validation.rs:94:8 [INFO] [stdout] | [INFO] [stdout] 94 | pub fn validate_channel_key(key: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `sanitize_message` is never used [INFO] [stdout] --> src/security/validation.rs:103:8 [INFO] [stdout] | [INFO] [stdout] 103 | pub fn sanitize_message(message: &str) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_valid_host_mask` is never used [INFO] [stdout] --> src/security/validation.rs:111:8 [INFO] [stdout] | [INFO] [stdout] 111 | pub fn is_valid_host_mask(mask: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `has_legion` and `legion` are never used [INFO] [stdout] --> src/state/mod.rs:52:12 [INFO] [stdout] | [INFO] [stdout] 23 | impl ServerState { [INFO] [stdout] | ---------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 52 | pub fn has_legion(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 57 | pub fn legion(&self) -> Option<&LegionManager> { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `connection_id` and `joined_at` are never read [INFO] [stdout] --> src/state/channel.rs:6:9 [INFO] [stdout] | [INFO] [stdout] 5 | pub struct ChannelMember { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] 6 | pub connection_id: u64, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 7 | pub modes: Vec, [INFO] [stdout] 8 | pub joined_at: DateTime, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ChannelMember` 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 `name` and `created_at` are never read [INFO] [stdout] --> src/state/channel.rs:13:9 [INFO] [stdout] | [INFO] [stdout] 12 | pub struct Channel { [INFO] [stdout] | ------- fields in this struct [INFO] [stdout] 13 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 19 | pub created_at: DateTime, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Channel` 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 `id`, `addr`, and `created_at` are never read [INFO] [stdout] --> src/state/connection.rs:9:9 [INFO] [stdout] | [INFO] [stdout] 8 | pub struct Connection { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 9 | pub id: u64, [INFO] [stdout] | ^^ [INFO] [stdout] 10 | pub addr: SocketAddr, [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 17 | pub created_at: DateTime, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Connection` 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: function `mask_ip` is never used [INFO] [stdout] --> src/utils/mod.rs:13:8 [INFO] [stdout] | [INFO] [stdout] 13 | pub fn mask_ip(ip: IpAddr) -> String { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `parse_mode_string` is never used [INFO] [stdout] --> src/utils/mod.rs:34:8 [INFO] [stdout] | [INFO] [stdout] 34 | pub fn parse_mode_string(modes: &str) -> (Vec, Vec) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `format_duration` is never used [INFO] [stdout] --> src/utils/mod.rs:56:8 [INFO] [stdout] | [INFO] [stdout] 56 | pub fn format_duration(seconds: u64) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `normalize_channel_name` is never used [INFO] [stdout] --> src/utils/mod.rs:77:8 [INFO] [stdout] | [INFO] [stdout] 77 | pub fn normalize_channel_name(name: &str) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `normalize_nickname` is never used [INFO] [stdout] --> src/utils/mod.rs:81:8 [INFO] [stdout] | [INFO] [stdout] 81 | pub fn normalize_nickname(nick: &str) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `load_with_defaults` is never used [INFO] [stdout] --> src/utils/config.rs:157:12 [INFO] [stdout] | [INFO] [stdout] 148 | impl ServerConfig { [INFO] [stdout] | ----------------- associated function in this implementation [INFO] [stdout] ... [INFO] [stdout] 157 | pub fn load_with_defaults(path: Option>) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 59.82s [INFO] running `Command { std: "docker" "inspect" "5f5d5adf25f0fbd713807a370beb3b19f0193e30cfb5204c87d739cf52a35b91", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "5f5d5adf25f0fbd713807a370beb3b19f0193e30cfb5204c87d739cf52a35b91", kill_on_drop: false }` [INFO] [stdout] 5f5d5adf25f0fbd713807a370beb3b19f0193e30cfb5204c87d739cf52a35b91